数据结构课程设计 4.docx
- 文档编号:27761598
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:10
- 大小:154.59KB
数据结构课程设计 4.docx
《数据结构课程设计 4.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计 4.docx(10页珍藏版)》请在冰豆网上搜索。
数据结构课程设计4
安徽省巢湖学院计算机与信息工程学院
课程设计报告
课程名称《数据结构》
课题名称约瑟夫环
专业计算机科学与技术
班级
学号
姓名
联系方式
指导教师
2011年12月25日
1、数据结构课程设计任务书
1.1、题目
约瑟夫(Joseph)环
2、总体设计
约瑟夫问题的一种描述是:
编号为1,2,…,n的n个人按顺时针方向围坐一圈,从1起报到k则出圈,下一个人再从1报起,如此下去直到圈中只有一人为止。
求最后剩下的人的编号。
3、详细设计
1)问题改进:
在人数n、k及起始报数人确定的情况下,最后剩下的人的编号事前是可以确定的。
若每人有一个密码Ki(整数),留作其出圈后的报到Ki后出圈。
密码Ki可用随机数产生。
这样事前无法确定谁是最后一人。
2).流程图
3.1、程序中所采用的数据结构及存储结构的说明
#include
#include
typedefstructJoseph
{
intnum;
intkey;
structJoseph*next;
}Joseph1;
Joseph1*CreatList(intn)
{
Joseph1*R,*p,*q;
inti,k;
R=p=(Joseph1*)malloc(sizeof(Joseph1));
p->next=NULL;
for(i=0;i q=(Joseph1*)malloc(sizeof(Joseph1)); p->num=i+1; scanf("%d",&k); if(k<=0) { printf("输入信息有误! "); exit(0); } p->key=k; p->next=q; p=q; } q->num=n; scanf("%d",&k); if(k<=0) { printf("输入信息有误! "); exit(0); } q->key=k; q->next=R; R=q; return(R); } voidDeleList(intn,Joseph1*P,intm) { Joseph1*q,*t; q=P; inti,j; for(i=1;i { for(j=1;j q=q->next; t=q->next; q->next=t->next; m=t->key; printf("删除的第%d个数是: ",i); printf("%d\n",t->num); free(t); } printf("删除的最后一个数是: %d\n",q->num); free(q); } voidmain() { intm,n; Joseph1*P; printf("请输入参加的人数: "); scanf("%d",&n); if(n<=0) { printf("输入信息有误! "); exit(0); } printf("请输入初始密码: "); scanf("%d",&m); if(m<=0) { printf("输入信息有误! "); exit(0); } printf("请输入每个人的密码: "); P=CreatList(n); DeleList(n,P,m); } 3.2、算法的设计思想 2)在人数n、k及起始报数人确定的情况下,最后剩下的人的编号事前是可以确定的。 若每人有一个密码Ki(整数),留作其出圈后的报到Ki后出圈。 密码Ki可用随机数产生。 这样事前无法确定谁是最后一人。 ; 4.2、测试结果的分析与讨论: 4.3、测试过程中遇到的主要问题及采取的解决措施: 在主函数里面主要就是实现约瑟夫环的运行,从第一个开始,找到对应上限值的的人,然后输出编号,将头指针指向下一个结点,将该编号人员的密码赋值为新上限值,然后清空该结点的数据,一直这样的运行,直到所有结点都被清空,就完成了约瑟夫环的运行。 6、源程序清单和执行结果 #include #include typedefstructJoseph { intnum; intkey; structJoseph*next; }Joseph1; Joseph1*CreatList(intn) { Joseph1*R,*p,*q; inti,k; R=p=(Joseph1*)malloc(sizeof(Joseph1)); p->next=NULL; for(i=0;i q=(Joseph1*)malloc(sizeof(Joseph1)); p->num=i+1; scanf("%d",&k); if(k<=0) { printf("输入信息有误! "); exit(0); } p->key=k; p->next=q; p=q; } q->num=n; scanf("%d",&k); if(k<=0) { printf("输入信息有误! "); exit(0); } q->key=k; q->next=R; R=q; return(R); } voidDeleList(intn,Joseph1*P,intm) { Joseph1*q,*t; q=P; inti,j; for(i=1;i { for(j=1;j q=q->next; t=q->next; q->next=t->next; m=t->key; printf("删除的第%d个数是: ",i); printf("%d\n",t->num); free(t); } printf("删除的最后一个数是: %d\n",q->num); free(q); } voidmain() { intm,n; Joseph1*P; printf("请输入参加的人数: "); scanf("%d",&n); if(n<=0) { printf("输入信息有误! "); exit(0); } printf("请输入初始密码: "); scanf("%d",&m); if(m<=0) { printf("输入信息有误! "); exit(0); } printf("请输入每个人的密码: "); P=CreatList(n); DeleList(n,P,m); } 7、C程序设计总结 typedefstructNode { intpassword;//每个人持有的密码 intnum;//人员的编号 structNode*next;//指向下一个节点 }Node,*Link; 能够完成这次课程设计必须感谢C语言课程老师江家宝 9、参考文献 [1]贾宗璞、许合利,C语言程序设计,江苏: 中国矿业大学出版社,2007.6 [2]谭浩强,C程序设计(第二版),北京: 清华大学出版社,2001.1 [3]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计 数据结构 课程设计