- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验六约瑟夫环的实现3
浙江大学城市学院实验报告
课程名称 数据结构基础
实验项目名称 实验六 约瑟夫环的实现
学生姓名 专业班级 学号
实验成绩 指导老师(签名 ) 日期
实验目的和要求
1、学会通过对问题的分析,设计一种合理的数据结构,并进行定义及操作的实现。
2、掌握利用线性表的各种操作来进行具体的实际应用。
3、加强程序设计的能力。
实验内容
1、编写程序,模拟约瑟夫环(josephus)问题: n个人(编号为1,2,3,……,n (n0) )按顺时针方向围坐一圈,每人持有一个正整数密码。开始时任意给出两个值:一个为首先报数的人的编号i (0i=n),另一个为起始报数上限值m。接着从编号为i的人开始按顺时针方向自1起顺序报数,报到m时停止报数,且报到m的人出列,并将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1报数,……,如此下去,直到所有人全部出列为止。要求设计一个程序模拟此过程,给出出列人的编号序列。
基本要求:
人数n、每人的正整数密码、首次报数人编号i、初始报数上限值m均由键盘输入。
参照线性表的抽象数据类型定义,设计本实验的抽象数据类型。
根据你设计的抽象数据类型,分别用顺序存储结构和链式存储结构实现约瑟夫环问题。并请分别将顺序存储结构的程序存放在文件test6_Seq.h(基本操作函数)、test6_Seq.cpp(主函数)中,链式存储结构的程序存放在文件test6_Link.h(基本操作函数)、test6_Link.cpp(主函数)中。
设计测试数据,并调试程序,直到正确运行。
2、、test6_Seq.h、test6_Seq.cpp、test6_Link.h、test6_Link.cpp到Ftp服务器( 40:5000 )void InitList(SeqList L):初始化线性表
bool InsertList(SeqList L, ElemType item):插入数据使线性表中有数据
bool DeleteList (SeqList L, ElemType item,int pos):删除数据模拟人离开
int LengthList(SeqList L):求线性表的长度,判断人是否为空
ElemType GetList(SeqList L, int pos):根据密码查找下个离开的人
四. 两种类型(顺序和链式)的存储结构定义及算法思路
(包括两种存储结构定义及一些重要函数的算法实现思路)
数据类型定义:
typedef struct m
{
int num,password;
}ElemType;
顺序表:
typedef struct List
{
ElemType *list;
int size;
int MaxSize;
}SeqList;
void InitList(SeqList L):开辟空间,为size、MaxSize赋初值
bool InsertList(SeqList L, ElemType item):在顺序表的最后插入item
bool DeleteList (SeqList L, ElemType item,int pos) :删除在顺序表中第pos的值
int LengthList(SeqList L):返回顺序表的长度
ElemType GetList(SeqList L, int pos):返回第pos位的值
单链表:typedef struct LNode
{ // 定义单链表节点类型
ElemType data; // 存放结点中的数据信息
LNode *next; // 指示下一个结点地址的指针
};
void InitList(LNode *H):初始化单链表,建立带表头附加节点的单链表
bool InsertList ( LNode *H, ElemType item):在单链表末尾增加数据
bool DeleteList ( LNode *H, ElemType item):删除与item相同的节点
int LengthList (LNode *H):通过遍历单链表算出长度
ElemType GetList (LNode *H, int pos):取第pos为上的节点数据
五. 实验结果与分析
(包括运行结果截图、结果分析等)
六. 心得体会
(记录
文档评论(0)