数据结构约瑟夫环课程设计实验报告Word格式文档下载.docx

上传人:b****3 文档编号:15820705 上传时间:2022-11-16 格式:DOCX 页数:10 大小:97.46KB
下载 相关 举报
数据结构约瑟夫环课程设计实验报告Word格式文档下载.docx_第1页
第1页 / 共10页
数据结构约瑟夫环课程设计实验报告Word格式文档下载.docx_第2页
第2页 / 共10页
数据结构约瑟夫环课程设计实验报告Word格式文档下载.docx_第3页
第3页 / 共10页
数据结构约瑟夫环课程设计实验报告Word格式文档下载.docx_第4页
第4页 / 共10页
数据结构约瑟夫环课程设计实验报告Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

数据结构约瑟夫环课程设计实验报告Word格式文档下载.docx

《数据结构约瑟夫环课程设计实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构约瑟夫环课程设计实验报告Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

数据结构约瑟夫环课程设计实验报告Word格式文档下载.docx

2.课程设计的要求和内容:

编号为1,2…n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。

一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报数,如此下去,直至所有人全部出列为止。

该题目要求用单循环链表作为存储结构,进行一个带密码的约瑟夫环的运算问题。

而且从键盘输入总人数、初始报数上限值m及各人密码,然后输出出列的人员的编号顺序。

按照题目的要求,要采用单循环链表来作为存储结构,然后在循环链表的基础上去实现约瑟夫环的运行。

在主函数里,定义完各项之后,我先用一个while的循环语句来实现能够反复进行运算。

关于约瑟夫环的运算,先创建一个只有头结点的空链表,然后输入总人数N,和初始的上限值M,用总人数N去初始化循环链表,然后在循环链表里面从键盘输入对应的密码值。

3.主要参考文献:

1、《算法与数据额结构C语言版》机械工业出版社陈守孔孟佳娜武秀川

2、《C语言程序设计》(第二版)清华大学出版社谭浩强

3、《数据结构》(C语言)版清华大学出版社严蔚敏吴伟民

4.课程设计进度计划(以天为单位):

起止日期

工作内容

备注

2011年6月20号

2011年6月21号至2011年6月22号

2011年6月23号

2011年6月24号

系统分析与设计阶段

程序编制与调试阶段

答辩和考核

设计报告和书写说明书

约瑟夫环分析与设计

对约瑟夫环进行编程

一、题目设计与分析……………………………………………………4

1.1问题描述………………………………………………………4

1.3各模块的伪码算法……………………………………………4

二、流程图…………………………………………………………5

三、源程序清单………………………………………………………6

四、调试过程、运行结果………………………………………………9

五、程序有待改进的地方………………………………………………10

六、设计收获和建议…………………………………………………10

一、题目设计与分析

1.1问题描述

关于这次题目的设计,根据题目的要求,主要用了一个单循环链表作为存储结构。

首先是进行一系列的定义结点,其中就有包括每个人的密码和编号。

然后有空链表的创建和循环链表的初始化。

在这里,我们将输入每个人密码的步骤放在循环链表的初始化里,在初始化链表时从键盘输入密码和直接给每个人进行编号,而不是在主函数中进行。

然后在主函数里面主要就是实现约瑟夫环的运行,从第一个开始,找到对应上限值的的人,然后输出编号,将头指针指向下一个结点,将该编号人员的密码赋值为新上限值,然后清空该结点的数据,一直这样的运行,直到所有结点都被清空,就完成了约瑟夫环的运行。

在设计的前期,本是设计将密码输入的这一部分放在主函数之中去执行,而建立单循环链表是单独的一个函数,但是无法实现将数据从主函数键入切能被准确使用,于是后改成在初始化链表的时候键入密码,从而达到目标。

1.2采用类c语言定义相关的数据类型

typedefstructNode

{

intpassword;

//每个人持有的密码

intnum;

//人员的编号

structNode*next;

//指向下一个节点

}Node,*Link;

1.3各模块的伪码算法

InitList(Link&

L)

操作结果:

构造一个空的线性表L

(Node*)malloc(sizeof(Node)

动态分配内存存储空间

Creater(intn,Link&

初始化链表,初始化人员编号和输入每个人的密码

Creater(n,L)

建立一个循环列表,赋予初始编号和输入每个人的密码,构成一个约瑟夫环

三、源程序清单

#include<

stdio.h>

stdlib.h>

voidInitList(Link&

L)

L=(Node*)malloc(sizeof(Node));

if(!

L)exit

(1);

L->

password=0;

num=0;

next=L;

}

voidCreater(intn,Link&

Linkp,q;

q=L;

for(inti=1;

i<

=n;

i++)

{

p=(Node*)malloc(sizeof(Node));

if(!

p)exit

(1);

printf("

请输入第%d个人的密码:

"

i);

scanf("

%d"

&

p->

password);

p->

num=i;

L->

next=p;

L=p;

}

next=q->

next;

free(q);

voidmain()

printf("

*********************约瑟夫环*********************\n"

);

LinkL,p,q;

intn,m;

inta=1;

intb=1;

while(b==1)

L=NULL;

InitList(L);

printf("

请输入总人数N:

\n"

scanf("

n);

while(n<

=1)

{

printf("

输入的总人数有误,请重新输入大于1的总人数:

\n"

scanf("

}

请输入初始的上限值M(正整数):

\n"

m);

while(m<

0)

输入上限值有误,请重新输入:

Creater(n,L);

最终出列的顺序为:

p=L;

for(inti=1;

i++)

for(intj=1;

j<

m;

j++)

{

p=p->

}

q=p->

m=q->

password;

%d"

q->

num);

p->

free(q);

是否继续重新输入运算(1.继续0.退出):

b);

\n\n\n"

四、调试过程、运行结果

基本界面,关于各项值和密码的输入。

然后得到正确的结果。

同时进行询问判断,是否继续。

如果选择继续,则可以重复输入各项继续进行运算。

如果不选择继续,则输入0后退出。

如果一开始输入的数据有错,则会提示输入的数据有错,要求重新输入。

如果输入的初始上限值有错。

也会进行提醒然后要求重新输出。

经过测试,正确地输入数据。

就能得出想要的约瑟夫环运算的结果。

五、程序有待改进的地方

运行环境下有待加强,因为程序只能在MICROSOFTVISUALC++6.0里面运行,对于其他运行软件却不能运行。

六、设计的收获和建议

在这次数据结构的课程设计中,让我进一步地了解单循环链表的用法,也更清楚地明白关于约瑟夫环的一些内容。

在设计的过程中,重点的问题有两个,一个是约瑟夫环该怎么样去实现,还有就是每个人的密码应该如何输入。

起初,密码的输入是设计在主函数中去解决,最后在查阅资料和动手实践过之后,决定将密码的输入放在循环链表的初始化过程中,这样的话,能够更条理清晰。

总的来说,关于这次课程设计,我受益不浅。

自己动手实践设计关于约瑟夫环,让我对数据结构有进一步的了解,虽然这次的设计只用到链表,没有用到其他结构,但是也对它们有了更深的理解。

课程设计,锻炼的是我们的思维能力和动手能力,在今后,我会继续保持自主性的学习和实践,更深入地去学习和应用关于数据结构的知识。

指导教师签字:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1