




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2010年双学士软件开发环境约瑟夫生死游戏 -之链表解决(必做)一、 问题背景有30个乘客同乘一艘船,因为严重超载,加上风高浪大,危险万分,因此船长告诉乘客,只有将全船一半乘客投入海中,其余人才能幸免于难。无奈,大家只得同意这种办法,并议定给30个人进行编号,30个人按编号围成一圈,由第i个人数起,依次报数,数到第9人,便把他投入大海中,然后再从他的下一个人数起,数到第9人,再将他扔到大海中,如此循环地进行,直到剩下15个乘客为止。问哪些位置是将被扔下大海的位置。二、 解决方案利用循环链表,每次将一个元素从链表中删除,继续按条件查询剩下的元素。首先定义链表节点。数据域用整数表示人员编号。然后将节点组成为30个节点的单循环链表。删除计数器置0 。从指定位置开始计数,移动计数器置1,移动指针到下一个节点,移动计数器加1 。计数器置8时,将下一节点删除。删除计数器加1 。删除计数器小于人数的一半否?是则从删除节点的下一个节点开始作为起始位置,跳至C。否则结束循环。三、 流程图主函数的流程如下:Out函数的流程图为:四、详细设计1、 结构体typedef struct Jonse /* 定义结构体*/int data;struct Jonse * next; /* 编号(分配位置) */Jonse;2、 链表的构造函数Jonse * Create(int n) /* 建立n个结点的单向循环链表函数 */Jonse *p,*h,*q;int i;h=(Jonse *)malloc(sizeof(Jonse); /* 为头结点分配空间 */p=h;for(i=1;idata=i; /编号if(inext=q;p=q;p-next=h; /* 最后返回头结点 ,完成单向循环链表的建立*/return h;3、 输出链表的函数void ShowList(Jonse *h) /*打印链表函数*/Jonse *p;p=h;doprintf(%4d,p-data);p=p-next;while(p!=h);printf(n);4、 实现将人剔除的函数void Out(Jonse *h,int m,int n) /*出队函数*/ int i,j;Jonse *p,*q;p=h;for(i=1;inext; while(num-flognum/2)for(j=i;jnext;q=p-next; /保留将要删除的顶点p-next=q-next; /删除该顶点p=q-next;printf(%4d,q-data); /打印删除顶点的数据域的信息free(q); /释放删除的顶点i=j+1;flog+;printf(n);五、 运行测试1、要求输入参与者的总人数:2、 打印出创建好的链表,并提出输入开始报数的位置:3、 输入报数人所在的位置,并提示输入报数的最大值4、 输入报数的最大值,计算显示结果:结果为删除的人所在的位置调试分析程序的编写和调试基本正常。遇到的问题主要是:链表的指向的边界问题。本实验采用数据抽象的与模块化程序设计方法。思路清晰,实现时调试顺利,各模块具有很好的可重用性,得到了一次良好的程序设计训练。6 测试结果测试结果,输入输出。完整严格。7 附件(全部源代码)#include#includetypedef struct Jonse /* 定义结构体*/ int code; /* 编号(分配位置) */ struct Jonse *next;Jonse;Jonse * Create(int n);void ShowList(Jonse *);void Out(Jonse *,int,int);int flag,num;/* 集合各个接口的主函数,结构很清晰*/void main() Jonse *head;int val,beg;flag=0;printf(n请输入参与者总人数 :n);scanf_s(%d,&num);head=Create(num);ShowList(head);printf(n请输入报数的人所在位置 :n);scanf_s(%d,&beg);printf(n请输入参与者报数最大值 :n);scanf_s(%d,&val);printf(将被扔下大海的参与者的编号,即其所在位置 :n);Out(head,beg,val);getchar();getchar();Jonse * Create(int n) /* 建立n个结点的单向循环链表函数 */ Jonse *h,*p;int i; h=(Jonse *)malloc(sizeof(Jonse); /* 为头结点分配空间 */ p=h; for(i=1;icode=i; if(inext=(Jonse *)malloc(sizeof(Jonse); /* 创建新的结点 */ p=p-next; p-next=h; /* 最后返回头结点 ,完成单向循环链表的建立*/ return h;void ShowList(Jonse *h) /*打印链表函数*/ Jonse *p; p=h; do printf(%dt,p-code); p=p-next; while(p!=h);void Out(Jonse *h,int i,int d) /*出队函数*/ Jonse *p,*q; int k; p=h; for(q=h;q-next!=h;q=q-next); /* 初始化链表 */ for(k=1;knext; /*循环地删除队列结点*/ while(p!=p-next) for(k=1;knext; printf(%dt,p-code); /* 输出被踢结点的位置 */ q-next=p-next; free(p); /* 释放被踢出的结点 */ p=NULL; /* 让p指针赋值为空指针(即让其失效) */ p=q-next; flag+; /* 标志位每次循环被踢出人数加1 */ if(flag=(nu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 航空物流企业的战略规划与执行考核试卷
- 船舶改装项目施工过程中的质量控制信息化考核试卷
- 现代林业机械发展趋势与挑战考核试卷
- 红外测温仪的制造与优化考核试卷
- 玻璃制品表面涂层技术考核试卷
- 墨水生产过程中的自动化设备操作考核试卷
- 眼镜制造业的质量控制体系考核试卷
- 租书服务创新案例考核试卷
- 煤炭加工企业的效益分析与财务评估考核试卷
- 抖音直播带货火花支付佣金结算服务协议
- 2025年高三高考冲刺主题教育班会:《高三考前心理调适指南:减压赋能 轻松备考》-2024-2025学年高中主题班会课件
- 2025年安全生产考试题库(消防安全应急处置)消防设施运行维护试题
- 鄂尔多斯市水发燃气有限公司招聘笔试真题2024
- 2025年临海市纪委市监委下属事业单位公开选聘工作人员1人笔试备考题库及答案解析
- 河北省唐山市、廊坊市2025年高三高考第二次模拟演练思想政治试卷(含答案)
- 湖北武汉市华中师大一附中2025届高三3月押轴试题物理试题试卷含解析
- 司法雇员考试题目及答案
- 国家金融监督管理总局所属事业单位招聘真题2024
- 小学一年级数学20以内进位、退位加减法口算
- 2024年全国高中数学联赛(浙江预赛)试题含参考答案
- 人教PEP版(2024)三年级下册英语Unit5 Old toys单元整体教学设计(共6课时)
评论
0/150
提交评论