欢迎来到天天文库
浏览记录
ID:55867482
大小:131.50 KB
页数:10页
时间:2020-03-14
《约瑟夫环课程设计实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《数据结构》课程设计报告课程名称:《数据结构》课程设计课程设计题目:joseph环姓名:院系:计算机学院专业:年级:学号:指导教师:2011年12月18日目录1课程设计的目的………………………………………………………………22需求分析………………………………………………………………………23课程设计报告内容……………………………………………………………31、概要设计……………………………………………………………………32、详细设计……………………………………………………………………33、调试分析………………
2、……………………………………………………x4、用户手册……………………………………………………………………x5、测试结果……………………………………………………………………66、程序清单……………………………………………………………………74小结…………………………………………………………………………101、课程设计的目的(1)熟练使用C++编写程序,解决实际问题;(2)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(3)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法
3、和技能;(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;2、需求分析1、问题描述:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。2、要求:利用不带表头结点的单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编
4、号。3、测试数据:m的初值为20,n=7,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?输出形式:建立一个输出函数,将正确的输出序列3、课程设计报告内容概要设计:在理解了题目后,我先想到的是我们所学的单链表,利用单链表先建立循环链表进行存贮,建立完循环链表后,我将所要编写的函数分为了两块,一块是经过学过的单链表改编的循环链表的基本操作函数,还有一块是运行约瑟夫环的函数。详细设计:我先建立一个结构体,与单链表一样,只是多了一个存密码的code域structLinkNode{in
5、tdata;//顺序intcode;//密码LinkNode*next;};建立一个类LinkList,包含的函数:LinkList();//构造函数voidCreat(constint);//创建循环链表intDelete(LinkNode*);//删除报到数的结点intJoseph(int);//约瑟夫环私有成员是LinkNode*head;//指向第一个结点的指针LinkNode*elem;//同上intlen;//长度我定义了一个elem指针是为了约瑟夫环里运行方便,elem只在约瑟夫环这个函数里用
6、到,其他函数没有特别大的用处。构造函数与书上的没什么大差别,创建循环链表时,要考虑几个问题,一个是题目要求是不带头结点,所以head指针直接指向了第一个结点,我在创建链表时把第一个结点初始化data为1,表明这个结点是第一个结点。具体如下:voidLinkList::Creat(constintnumber)//number为结点个数,也就是参与的人数{if(number==1)//只有一个人的情况{head=elem=newLinkNode;head->data=1;cout<<"请输入密码:"<7、l;cin>>head->code;head->next=head;}else{head=elem=newLinkNode;head->data=1;cout<<"请依次输入各个密码:"<>head->code;LinkNode*q=head;q=head;for(inti=1;idata=i+1;cin>>p->code;q->next=p;q=p;}q->next=he8、ad;//构成循环链表}len=number;}在构建约瑟夫环的执行函数时,我首先考虑了递归调用的函数,原本的这个程序的所有的都定为elemtype类型的,虽然编译没出错,但是在连接时发生了错误,在老师的指导下改成了具体的int型。intLinkList::Joseph(intm){if(len>1){LinkNode*q;if(m==1)//在初始报数为1的情况下{q=elem;inta=q->code;//将
7、l;cin>>head->code;head->next=head;}else{head=elem=newLinkNode;head->data=1;cout<<"请依次输入各个密码:"<>head->code;LinkNode*q=head;q=head;for(inti=1;idata=i+1;cin>>p->code;q->next=p;q=p;}q->next=he
8、ad;//构成循环链表}len=number;}在构建约瑟夫环的执行函数时,我首先考虑了递归调用的函数,原本的这个程序的所有的都定为elemtype类型的,虽然编译没出错,但是在连接时发生了错误,在老师的指导下改成了具体的int型。intLinkList::Joseph(intm){if(len>1){LinkNode*q;if(m==1)//在初始报数为1的情况下{q=elem;inta=q->code;//将
此文档下载收益归作者所有