约瑟夫环程序设计报告书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附件4:课程设计报告书
《数据结构》
课程设计报告
约瑟夫(Joseph)环
组别第七组
组长
组成员
成绩
指导教师
计算机科学与技术系
2014年6月11日
摘要
约瑟夫环问题是典型的线性表的应用实例,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。
经过分析,我们使用MICROSOFT公司的Microsoft Visual C++6.0开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操作数据库的智能化对象,首先在短时间内建立系统原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。
关键词:单循环链表;c语言;约瑟夫环;
序言
数据结构是研究数据元素之间的逻辑关系的一门课程,以及数据元素及其关系在计算机中的存储表示和对这些数据所施加的运算。该课程设计的目的是通过课程设计的综合训练,培养分析和编程等实际动手能力,系统掌握数据结构这门课程的主要内容。
本次课程设计的内容是用单循环链表模拟约瑟夫环问题,循环链表是一种首尾相接链表,其特点是无须增加存储容量,仅对表的链接方式稍作改变,使表处理更加灵活,约瑟夫环问题就是用单循环链表处理的一个实际应用。通过这个设计实例,了解单链表和单循环链表的相同与不同之处,进一步加深对链表结构类型及链表操作的理解。
通过该课程设计,能运用所学知识,能上机解决一些实际问题,了解并初步掌握设计、实现较大程序的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。
章节安排
摘要、序言 (1)
一、问题描述
1、课程设计目的.................. (4)
2、课程设计任务.................. (4)
二、设计过程
1、设计思想(数据结构).................. . (4)
2、设计表示(函数说明).................. . (5)
3、详细设计(主要算法).................. . (6)
4、用户手册(使用说明).................. . (6)
三、测试报告
1、测试用例.................. .... . (6)
2、测试结果.................. .... . (6)
3、分析探讨.................. .... . (7)
四、总结................ .... . (10)
五、附录(源程序)...... ...... ... ......... ..10
六、参考文献......... .... ......... ... . (16)
章节安排:
一、问题描述
1、课程设计目的
1.掌握单向循环链表的建立。
2.掌握单向循环链表的操作。
2、课程设计任务
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m 值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。请设计一个程序求出出列顺序。
1.利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
2.输入数据:建立输入函数处理输入的数据,输入m的初值n,输入每个人的密码,建立单向循环链表。
3.输出形式:建立一个输出函数,将正确的出列顺序输出。
二、设计过程
1、设计思想(数据结构)
首先,设计实现瑟夫环问题的存储结构。由于约瑟夫环本身具有循环性质,考虑采用循环链表,为了统一对表中任意节点的操作,循环链表不带头结点。
循环链表的结点定义为如下结构类型:
struct Lnode /*定义链表*/
{
int number;
int password;
struct Lnode *next;
}Lnode,*p,*q,*head;
其次,建立一个不带头结点的循环链表并由头指针first指示。最后,设计约瑟夫环问题的算法。
2、设计表示(函数说明)
《1》、循环链表抽象数据类型定义
struct Lnode /*定义链表*/
{
int number;
int password;
struct Lnode *next;
}Lnode,*p,*q,*head;
《2》、本程序包含一下几个模块
(1)创建单链表
for(i=1;i<=n;i++) /* 建立单链表*/
{
if(i==1)
{
head=p=(structLnode*)malloc(sizeof(struct Lnode));
}
else
{
q=(struct Lnode*)malloc(sizeof(struct Lnode));
p->next=q;
p=q;
}
(3) 形成循环链表
p->next=head; /*形成循环链表*/
(4)主函数模块 int main()