数据结构约瑟夫环实验报告(2020年7月整理).pdf

上传人:摩西的****12 文档编号:141865516 上传时间:2020-08-13 格式:PDF 页数:10 大小:245.65KB
返回 下载 相关 举报
数据结构约瑟夫环实验报告(2020年7月整理).pdf_第1页
第1页 / 共10页
数据结构约瑟夫环实验报告(2020年7月整理).pdf_第2页
第2页 / 共10页
数据结构约瑟夫环实验报告(2020年7月整理).pdf_第3页
第3页 / 共10页
数据结构约瑟夫环实验报告(2020年7月整理).pdf_第4页
第4页 / 共10页
数据结构约瑟夫环实验报告(2020年7月整理).pdf_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《数据结构约瑟夫环实验报告(2020年7月整理).pdf》由会员分享,可在线阅读,更多相关《数据结构约瑟夫环实验报告(2020年7月整理).pdf(10页珍藏版)》请在金锄头文库上搜索。

1、 1 数据结构数据结构与算法设计与算法设计 约瑟夫环约瑟夫环实验报告实验报告 实验实验一一 专业专业:物联网工程物联网工程 班级:班级:物联网物联网 1 班班 学号:学号:15180118 姓名:姓名:刘沛航刘沛航 一、一、 实验目的实验目的 1、熟悉 VC 环境,学习使用 C 语言利用链表的存储结构解决实际 的问题。 2、在编程、上机调试的过程中,加深对线性链表这种数据结构的 基本概念理解。 3、锻炼较强的思维和动手能力和更加了解编程思想和编程技 巧。 二、实验内容二、实验内容 1、 采用单向环表实现约瑟夫环。 请按以下要求编程实现: 从键盘输入整数 m, 通过 create 函数生成一个具

2、有 m 个结点的 2 单向环表。环表中的结点编号依次为 1,2,m。 从键盘输入整数 s(1=s0,n0,s环表 结点数。 操作结果:返回约瑟夫环的计算结果。 ADT Joh (2)宏定义 #define NULL 0 #define OK 1 #define ERROR -1 (3)主程序流程 开始 输入数据(m,s,n) 创建环表 输出建立好的环 计算处理 输出结果 4 (4) 模块调用关系 程序分为下述模块: 1)主函数模块执行输入调用其他的功能函数 2)创建环表模块创建单向环表 3)计算处理模块计算出要出列的标号并输出 4)显示模块输出建立好的环表 调用关系如下: 主函数模块 创建环表

3、模块 显示模块 计算处理模块 2、详细设计 (1)数据类型设计 typedef int ElemType; /元素类型 typedef struct ElemType data; struct Joh *next; Joh, *LinkList,*p; /结点类型,指针类型 (2)操作算法 Status create(LinkList /ndata=1; J-next=J;/建立第一个结点 for(int i=n;i1;-i) p=(LinkList)malloc(sizeof(J); p-data=i; p-next=J-next;J-next=p;/插入到表头 return OK; /cr

4、eate void show(LinkList J)/主要的操作函数 /顺序输出环表 J 的结点 p=J; printf(%d ,p-data); p=p-next; while(p!=J) /循环终止条件 printf(%d ,p-data); p=p-next; /show 6 void calculate(LinkList J,int s,int n) p=J; Joh *head=p; /声明结点 while(p-data!=s) p=p-next; head=p; /寻找起始结点 while(p-next!=p) /终止条件 for(int i=0;inext; printf(%d

5、,p-data); head-next=p-next; /删除已输出结点 p=head-next; if(n!=1) printf(%dn,p-data); else printf(n); /calculate (3)主函数代码 7 int main()/主函数 Joh *J;int m,s,n; printf(The num of node is:); scanf(%d, create(J,m); /创建单向环表 J show(J); /输出 J 的数据 printf(n); printf(The first node which you want is:); scanf(%d, print

6、f(The internal which you want is:); scanf(%d, calculate(J,s,n); /计算并输出结果 return 0; /main 四、四、程序调试分析程序调试分析 1、细节决定成败,编程最需要的是严谨,如何的严谨都不过 分,往往检查了半天发现错误发生在某个括号,分号,引号,或者数 据类型上。在写主要操作函数 caculate()时,在终止条件的书写处 不是很清楚,导致我浪费了很多时间。 2、还有一点很大的感触就是,在自己绞尽脑汁都解决不了 遇到的问题时,一个很好的手段就是询问同学,寻求其帮助,就 比如我在想函数终止条件时, 同学一句简单的话语就让

7、我如梦初 8 醒。这不是什么丢脸的事情,相反的,在快速解决问题的同时, 还会收获友谊,不是一举两得吗。我想,这也是合作学习的真谛 吧。 五、用户使用说明五、用户使用说明 1、本程序的运行环境为 Windows 操作系统下的 Microsoft Visual C+ 6.0。 2、在 VC 环境下打开程序后,按要求键入要求的数字,以等号或 空格断开,敲击“回车符” ,即可以显示要求的结果。 3、按下任意键以继续。 六、六、程序运行程序运行结果结果 程序测试 1: 程序测试 2: 9 七七、程序清单程序清单 #include #include /引用函数库 struct LNode int num;

8、 struct LNode *next; ; /定义链表 typedef struct LNode NODE; NODE *createlinklist(int n) /初始化循环链表,并返回头指针 NODE *head,*p,*q; int i=1; head=p=(struct LNode*)malloc(sizeof(struct LNode); p-num=i; for(i=2;inext=q; p=q; p-num=i; p-next=head; /使链表尾指向链表头,形成循环链表 return head; 10 void joseph(NODE *p,int n,int m) /约

9、瑟夫函数,用于输出约瑟夫环 int i,j; NODE *q; for(i=1;i=n;i+) for(j=1;jnext; /计算出列者序号 q=p-next; p-next=q-next; printf(%d ,q-num); free(q); p-next=NULL; void main() NODE *head; int n,s,m; int i; /确定计算系数 printf(*物理网1班-15180118-刘沛航 *n); printf(围绕圆桌的人数为?n); scanf(%d, printf(从第几人开始?n); scanf(%d, printf(数到几的人出列?n); scanf(%d, /确定头指针 head=createlinklist(n); if(s=1) for(i=1;inext; else for(i=1;inext; /输出约瑟夫环出列顺序 printf(出列的顺序如下:n); joseph(head,n,m); printf(n);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号