版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、约瑟夫环课程设计实验报告【约瑟夫环数据结构实验报告】数据结构实验报告实习1 线性表及其应用题目:编制一个演示约瑟夫环的程序班级:1403011班 姓名:付尧 学号:1* 完成日期:x.10.25一需求分析1本程序中,人数n为任意整数,首先输入一个报数上限值整数m,程序应能自动将出列的人所持的密码赋给m,再次作为报数上限,如此循环,直至所有人都出列为止。2演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入相应数据(即每个人所持的密码),每个人的序号由程序自动分配。3程序执行的命令包括:(1)构造线性表;(2)输入数据;(3)执行报数,删除出列人的信息以
2、及把出列人的密码赋给m;(4)结束。4测试数据(1)m初值为20,n7,7个人的密码依次为:3,1,7,2,4,8,4,首先m值为6,则正确的出列顺序为6,1,4,7,2,3,5。二概要设计为了实现程序上述功能,应以单向循环链表为存储结构。1. 基本操作:void createlist操作结果:构造单向循环链表,初始化每个人的密码并分配序号。void josephus初始条件:链表存在。操作结果:删除出列人的节点并重新报数。2 本程序包含三个模块:(1)主程序模块;(2)构造链表并输入信息模块;(3)执行约瑟夫环函数模块;三详细设计1.元素类型,结点类型和指针类型:struct nodeint
3、 num;int code;struct node *next;typedef struct node node;node *head,*tail;int m,n;2每个模块的分析:(1)主程序模块:int maincreatelist;josephus(head,m);return 0;(2)构造链表模块:void createlist申请头结点空间生成头结点printf(请输入m和nn);读取m,nprintf(请输入每个人的密码n);创建节点并写入密码分配相应序号。形成循环链表(3)约瑟夫环函数模块:void josephus(node *p,int m)node *q;int coun
4、t=0; 报数计数器q=tail; q为尾结点p=p-next; p为第一个数据while (p-next!=p)count+; 当循环链表所剩元素大于1时if (count=m)输出当前出列者的序号更新m为出列者的密码删除p节点令p指向下一个数据结点count=0;else 维护p和q到下一个结点打印最后剩下的人的序号四调试分析(1)设计过程中对函数结束的条件感到疑惑,经过考虑,采取 p=p-next来判断,非常简捷方便。(2)算法的时间复杂度为n2,空间复杂度为n,时间复杂度偏高,如果遇到数据过多可能会变得很慢。可以将m转化为m除以当前人数的余数,可以减少时间复杂度。(3)这道题第一眼看觉
5、得十分复杂,但编写中就会发现并不难。调试过程中我对链表的建立和插入删除操作更加熟练,也加深了对算法的认识。五用户使用说明(1)本程序的运行环境为vsx。(2)进入演示程序后即显示提示信息:请输入m和n:输入m和n请输入每个人的密码:输入密码输入完毕后就进行报数操作:六测试结果当输入m20,n7,每个人所持密码一次为:3,1,7,2,4,8,4时,则输出正确的出列顺序为:6,1,4,7,2,3,5。七附录#include#includestruct node建立链表数据类型int num;int code;struct node *next;typedef struct node node; 定
6、义node为链表数据类型node *head,*tail; 声明头指针,尾指针int m,n;void createlist建立链表函数node *p,*q;int i;p=new node; 申请头结点空间p-next=null;head=p; 生成头结点printf(请输入m和nn);scanf(%d %d,m,n);读取m,nprintf(请输入每个人的密码n);for (i=1;iq=new node; 申请结点空间q-num=i; 为节点排序scanf(%d,q-code); 记录该节点密码p-next=q; 插入节点pp=q;tail=p; 保存尾指针tail-next=head-next; 形成循环链表void josephus(node *p,int m)约瑟夫函数node *q;int count=0; 报数计数器q=tail; q为尾结点p=p-next; p为第一个数据while (p-next!=p)count+; 当循环链表所剩元素大于1时if (count=m)printf(%d ,p-num); 输出当前出列者的序号m=p-code; 更新m为出列者的密码q-next=p-next; 删除p节点delete(p);p=q-next; 令p指向下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2015年山东省济南市中考真题语文试题(解析版)
- 机应用自考课程设计
- 机床再制造课程设计
- 30MW分布式发电项目环境影响评估
- 机场英语课程设计
- 机器人语音课程设计
- 大规模在线考试突发事件应急预案
- 2024年公积金贷款重组协议样本
- 本科机电专业课程设计
- 2021年新专升本学生管理协议书
- GB/T 10822-2003一般用途织物芯阻燃输送带
- 学生辩论稿 强将手下无弱兵
- 微生物实验室管理培训考核试题含
- 家务劳动我能行-完整版课件
- 部编版二年级语文上册第9课-黄山奇石课件
- 招投标管理培训课件
- 社会责任程序
- SY∕T 7338-2016 石油天然气钻井工程 套管螺纹连接气密封现场检测作业规程
- 静脉治疗管理规范
- DB42T1319-2021绿色建筑设计与工程验收标准
- 市政给排水管道安装工程监理细则
评论
0/150
提交评论