




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构与算法设计实验报告实验一学院: 班级:学号:姓名: 1、 实验目的 1. 熟悉VC+6.0环境,学习使用C+实现链表的存储结构;2. 通过编程,上机调试,进一步理解线性表、链表、环表的基本概念,并利用单向环实现约瑟夫环。二、实验内容 1、 采用单向环表实现约瑟夫环。请按以下要求编程实现: 从键盘输入整数m,通过create函数生成一个具有m个结点的单向环表。环表中的结点编号依次为1,2,m。 从键盘输入整数s(1=s=m)和n,从环表的第s个结点开始计数为1,当计数到第n个结点时,输出该第n结点对应的编号,将该结点从环表中消除,从输出结点的下一个结点开始重新计数到n,这样,不断进行计数,不断进行输出,直到输出了这个环表的全部结点为止。例如,m=10,s=3,n=4。则输出序列为:6,10,4,9,5,2,1,3,8,7。 三、程序设计 1、概要设计应用单向环寄存数字序列。(1) 单向环表的抽象数据类型线性表定义如下:ADT List 数据对象:D=ai|aiElemSet,i=1,2,n,n0 数据关系:R1=ai-1,aiD,i=2,n 基本操作: Creat(LinkList&L,int m) 操作结果:构造一个有m个节点的单向环表L。 YSF(int m,int s,int n,LNode *L) 初始条件:单向环表L已经存在。 操作结果: 找到单向环表L的第s个结点,并进行约瑟夫环的计算,并输出相应值。ADT List(2) 主程序流程 主程序首先调用Creat(LinkList&L,int m)函数,创建含有m个结点的单向环表L;再调用YSF(int m,int s,int n,LNode *L)函数,找到第s个结点,并进行约瑟夫环的计算,在屏幕上显示计算结果。(3) 模板调用关系由主函数模板调用创建模块和运算模块。由运算模块将结果输出。 (4) 流程图开始输入数据(m,s,n)创建环表计算处理 输出环表结束 2、详细设计(1)数据类型设计typedef struct LNode /定义结构体int data;struct LNode *next;LNODE; (2)操作算法设计void Create(LNode *L,int m) /创建单向环表int i; LNode *p;if(m1)p=(LNode*)malloc(sizeof(LNode);p-data=m;p-next=L;L-next=p; m=m-1; for(i=m;i1;i-) /插入到表头p=(LNode*)malloc(sizeof(LNode);p-data=i;p-next=L-next;L-next=p; m=m-1 void YSF(int m,int s,int n,LNode *L) /找到第s个结点并进行约瑟夫计算int a=1,b=0;LNode *p,*head;p=L;head=p-next;while(head-next!=p)head=head-next;while(p-data!=s) /寻找起始结点p=p-next;head=head-next;for(b=m;b0;b-) for(a=1;anext;head=head-next;printf(%dn,p-data);head-next=p-next;free(p);p=head-next;(3) 主函数设计void main() /主函数int m,s,n;LNode *L=NULL;scanf(%d %d %d,&m,&s,&n);L=(LNode*)malloc(sizeof(LNode); /建立第一个结点L-data=1;L-next=NULL;Create(L,m);YSF(m,s,n,L); /计算并输出结果四、程序调试分析 (1)在第二步即环表建立的步骤时候,YSF函数的编写总是出error,在反复研究和调试之后依旧没有解决问题,最后在同学帮助下终于找到了的原因编写时未将结点退回原来结点处。所以说,调试一定要一步一步来,不能心急,仔细才能正确。 (2)构造数据类型时,未写typedef,导致编译无法通过。这是概念上的疏忽,要重视。五、用户使用说明 1、本程序的运行环境为Windows操作系统下的Microsoft Visual C+ 6.0。2、在VC环境下打开程序后,按要求键入m,s,n的值,敲击“回车符”,即可以显示要求的结果。六、程序运行结果测试用例1:输入:m=10,s=3,n=4 输出:6,10,4,9,5,2,1,3,8,7测试用例2: 输入:m=8,s=2,n=5 输出:6,3,1,8 ,2,5 ,7, 4 七、程序清单#include #include typedef struct LNode /定义结构体int data;struct LNode *next;LNODE;void Create(LNode *L,int m) /创建单向环表int i;LNode *p;if(m1)p=(LNode*)malloc(sizeof(LNode);p-data=m;p-next=L;L-next=p;m=m-1;for(i=m;i1;i-) /插入到表头p=(LNode*)malloc(sizeof(LNode);p-data=m;p-next=L-next;L-next=p;m-;void YSF(int m,int s,int n,LNode *L) /主要的操作函数int a=1,b=0;LNode *p,*head;p=L;head=p-next;while(head-next!=p)head=head-next;while(p-data!=s) /寻找起始结点p=p-next;head=head-next;for(b=m;b0;b-)for(a=1;anext;head=head-next;printf(%dn,p-data);head-next=p-next;free(p);p=head-next;void main() /主函数int m,s,n;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁夏教育数学试卷
- 淘宝店铺直播活动策划方案(3篇)
- 河道栏杆基础施工方案(3篇)
- 澳门废气处理施工方案(3篇)
- 临时保安考试题库及答案
- 北京市门头沟区2023-2024学年八年级下学期第一次月考语文考点及答案
- 安徽省宿州市灵璧县2024-2025学年高一上学期期末考试历史试卷及答案
- 放鞭炮初一作文700字14篇
- 客户服务热线接听规范及问题解决流程模板
- 时政知识培训方案策划课件
- 绿色简历封面小升初通用学生个人简历自荐信Word模板
- 临床实践指南的制定与应用
- 米线加工坊管理制度
- 文化长廊、荣誉墙施工方案(技术方案)
- (新版)职业健康综合知识竞赛题库附答案
- 【人教部编版语文五年级下册】全册课内阅读(附答案)共计30篇
- 自动喷水灭火系统调试记录
- 更换双电源更换施工方案
- 煤化工气化工艺系统知识课件
- Android移动应用开发教程(微课版) 课件 单元一 开发第一个Android程序
- 防煤矿冲击地压培训教案
评论
0/150
提交评论