课程设计(约瑟夫环)[1]

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告

课程名称:数据结构课程设计课程设计题目:约瑟夫环问题

姓名:余明旭

系:计算机科学与技术专业:计算机科学与技术年级:2010级

学号:100310236

指导教师:陈老师

职称:学生

一、需求分析

1、输入的形式和输入值的范围:

本程序中,输入报数上限值n,初始报数者s,初始报数者携带的密码m1,n-2个人携带的密码m(最后一人携带的密码没用),均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。

2、输出的形式:

从屏幕显示出列顺序。

3、程序所能够达到的功能:

提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序。4、测试数据:

输入

8

1

4

4 4 4 4 4 4

输出

4 8

5 2 1 3 7 6

一、详细设计

以单向循环链表实现该结构:

1、抽象数据类型的定义为:

struct LNode

{

ElemType data;

LNode* next;

};

2、本程序包含以下模块:

主程序模块:

Void main()

{

初始化;

输入数据;

执行功能;

显示结果;

}

各功能模块:实现单链表的各项功能。

Void fun()

{

}

3、各模块的调用关系:

三、调试分析

程序的编写和调试基本正常,遇到的问题主要是:指针的指向的边界问题,如何每次正确找到出列的人的位置。 解决方法:

for(int j=1;j

{ ap=cp; cp=cp->next; if(cp==HL) { ap=HL; cp=HL->next; } }

a[i]中存储了每个人的密码,就可以准确知道每个人的位置。

通过约瑟夫环算法的课题设计让我理解了循环队列,不单单只是书本上文字的循环队列的概念,更多是自己能够通过实际的操作对循环队列有了更深的了解。上机的编程的过程是对数据结构的基础的进一步的巩固。学习过程体验到了学习的乐趣,实验课题使我认识到平时学习的漏洞和知识的缺乏,为以后的学习敲了一下警钟,数据结构是门基础,要学习扎实才行。

数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。 数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安 排。数据结构是数据存在的形式。

数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。数据结构课程的主要目的是介绍一些常用的数据结构,阐明数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种数据结构,讨论对它们实行的 各种运算的实现算法。很多算法实际上是对某种数据结构施行的一种变换,研究算法也就是研究在实施变换过程中数据结构的动态性质。

学习的过程需要合作,而且在合作中提到自己的编程水平,借鉴他人好的地方,改掉原先自己不足,书本知识的与实际的联系,使自己的编程不在局限于原来的纸上谈兵,更多的是积累了经验,培养了能力。 四、用户手册

如何使用,详细步骤,根据提示输入。 示例:

主程序

Void main() 模块 Viod fun()

五、测试结果

六、附录带注释的源程序

#include

typedef int ElemType;

#define N 100

struct LNode

{

ElemType data;

LNode* next;

};

void fun(int n,int s,int a[N])

{

LNode *HL=new LNode; //生成的结点带有头结点,此时循环单链表为空

HL->next=HL;

int i;

for(i=n;i>=1;i--) //生成带有n个结点的循环单链表

{

LNode *r=new LNode; //生成新的结点

r->data=i;

r->next=HL->next; //把新的结点插入到表头

HL->next=r;

}

LNode *ap=HL;

LNode *cp=HL->next;

for(i=1;i

{ //从表头开始顺序查找出第一个开始报数的人

ap=cp;

cp=cp->next;

if(cp==HL)

{

ap=HL;

cp=HL->next;

}

}

for(i=1;i

{ //顺序查找出待出列的人

for(int j=1;j

{

ap=cp;

cp=cp->next;

if(cp==HL)

{

ap=HL;

cp=HL->next;

}

}

cout<data<<" "; //输出出列的人

ap->next=cp->next;

delete cp;

相关文档
最新文档