资源描述:
《数据结构课程设计---joseph环》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、软件学院课程设计报告书课程名称数据结构课程设计设计题目Joseph环专业班级学号姓名指导教师2010年12月目录(一)设计时间…………………………………3(二)设计目的…………………………………3(三)设计任务…………………………………3(四)设计内容…………………………………3-10(五)总结与展望………………………………10(六)参考文献………………………………….111设计时间12月27日--12月31日2设计目的数据结构是计算机专业的核心课程,是计算机科学的算法理论基础和软件设计的技术基础。数据结构
2、是实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段。要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C程序并上机调试的基本方法。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。3设计任务编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数
3、。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。4设计内容设计一个程序,以人机交互的方式执行,用户指定约瑟夫环游戏的总人数n和初始的报数上限m,然后输入每个人所持有的密码key。模拟约瑟夫环,从头开始报数,直到所有人出列。系统按照出列顺序给出编号及该人所持有的密码。4.1需求分析1、程序所能达到的功能:用户指定约瑟夫环游戏的总人数n和初始的报数上限m,然后输入每个人所持有的密码key。模拟约瑟夫环,从头开始报数
4、,直到所有人出列。系统按照出列顺序给出编号及该人所持有的密码。2、输入的形式为一个在-2147483648~2147483648之间的整数数值。3、测试数据正确输入结果:参加的人数为:3起始报数上线值:2输入第1个人的密码:4输入第2个人的密码:5输入第3个人的密码:6输出结果为:第1个出列的人的编号是:2密码是:5第2个出列的人的编号是:3密码是:6最后一个出局的人的编号是:1密码是:4错误的结果:若输入的内容格式不符合要求,则会出现乱码。4.2总体设计1、本程序中用到的所有抽象数据类型的定义为:创建一个
5、循环链表structLNode**CreateList_L(LinkList*L,intz)对循环链表进行操作Operate(LinkListL,inth,intn)找到第m个元素将其删除并且将其data域的值赋给下一个m值继而进行循环。2、主程序的流程为:输入起始参加约瑟夫循环的人数以及起始上限m值,建立一个循环链表,之后对循环来表进行操作,实现目的。3、各程序模块之间的调用关系。主函数调用CreateList_L(LinkList*L,intz)函数和Operate(LinkListL,inth,int
6、n)。4.3详细设计1、structLNode**CreateList_L(LinkList*L,intz){(*L)=(LinkList)malloc(sizeof(LNode));q=(*L);q->next=NULL;for(i=1;i<=z;i++){p=(LinkList)malloc(sizeof(LNode));q->next=p;p->next=NULL;p->data=i;printf("输入第%d个人的密码:",i);scanf("%d",&key);p->password=key;q=
7、p;}*L=(*L)->next;p->next=*L;returnL;}//创建约瑟夫环Operate(LinkListL,inth,intn){inti=1,j;LinkListJ;for(i=1;inext;}J->next=L->next;printf("第%d个出列的人的编号是:%d密码是:%d",i,L->data,L->password);h=L->password;L=L->next;}i=L->password;j=L
8、->data;printf("最后一个出局的人的编号是:%d密码是:%d",j,i);}//对单循环链表进行操作main(){k=CreateList_L(&I,n);I=*k;Operate(I,m,n);}2、structLNode**CreateList_L(LinkList*L,intz){(*L)=(LinkList)malloc(sizeof(LNode));//定义一个LinkList型的指针q