版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录1需求分析说明1.Joseph环的总体功能要求2. 各功能模块的功能描述3. 需要测试的数据2概要设计说明1. 程序流程图2. 模块调用图3详细设计说明1. 主函数模块2. 节点数据结构体定义模块3单向循环链表创建模块4结点删除模块5输入子模块4调试分析5用户使用说明6课程设计总结7测试结果8参考书目一、需求分析说明1. Joseph环的总体功能要求:Joseph环的总体目标:在Microsoft Visual C+ 6.0 的开发环境下,利用所学C语言和数据结构的相关知识,编写约瑟夫环(Joseph)问题的程序,要求如下:编号是1,2,,n的n个人按照顺时针方向围坐一圈,每个人只有一个
2、密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。其中的功能主要分为四项:(1)界面友好,易与操作。(2)要求使用单向循环链表模拟过程(3)输入报数上限值m和人数上限n,密码值,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。(4)演示程序以人机对话的形式进行,提供用户从键盘输入,Joseph约瑟夫环的必要
3、数据,并显示出列顺序2. 各功能模块的功能描述:(1)主函数模块本模块的主要功能是初始化图形界面,调用各模块,实现软件功能。(2)节点数据结构体定义模块本模块的主要功能是进行数据对象及数据关系的创建(3)单向循环链表创建模块本模块的主要功能是用一个循环链表表示joseph环,结构中有两个成员,其一为指向下一个人的指针,已构成joseph环的链,其二为该人的标记。(4)结点删除模块本模块的主要功能是将结点的下一结点复制到该结点后后将其释放(5)输入子模块本模块的主要功能是进行光标定位,输出提示文字,并对用户输入数据进行处理。 3. 需要测试的数据:1、总成员数n:7各成员密码:3 1 7 2 4
4、 7 4初始值m:202、总成员数n:7各成员密码:3 1 7 2 4 7 4初始值m:6二、概要设计说明1. 程序流程图输入m、nm>0且n>0的整数建立含n个结点的链表且用head指向第一个元素,结点数据域包含password、No、以及指向下一结点的指针head=>pn2(m%n)=0?n:m%n=>m1=>ii<mpnext=>p i+输出pNoppassword=>m删除p所指向结点n-输出pNo结束开始2. 模块调用图:主函数模块节点数据结构体定义模块单向循环链表创建模块结点删除 模块输入子模 块抽象数据类型的定义为:ADT Link
5、List数据对象:D= ai | ai termset,i=1,2,n,n>=0,termset中每个元素包含编号,密码,和一个指向下一节点的指针数据关系:R1=<ai-1,ai> | ai-1, ai D , i=2,n基本操作:status CreateList_Circle(member *,int);创建循环链表status DeleteNode(member *);删除链表结点此抽象数据类型中的一些常量如下:typedef int status;#define OVERFLOW -2 #define OK 1 #define ERROR 0三、详细设计说明1、主函数
6、模块调用各功能模块,实现单向链表循环、输入、输出等功能。2节点数据结构体定义模块joseph环的组成成员由密码(password)和序号(No)组成,循环链表的存储结构如下:typedef struct LNode int password; /密码 int No; /序号 struct LNode *next; /下一成员指针member; /组成成员结构体3单向循环链表创建模块实现任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。st
7、atus CreateList_Circle(member *p_head,int n) int i; member *tail,*p; *p_head=(member *)malloc(sizeof(member); if (!(*p_head) return OVERFLOW; (*p_head)->No=1; /储存成员一序号 printf ("请输入成员1的密码:n"); scanf ("%d",&(*p_head)->password); /储存成员一密码 while(*p_head)->password<=0)
8、 printf("请输入正值:"); scanf ("%d",&(*p_head)->password); tail=*p_head; tail->next=NULL; for (i=2;i<n+1;i+) p=(member *)malloc(sizeof(member); if (!p) return OVERFLOW; p->No=i; /储存成员序号 printf ("请输入成员%d的密码:n",i); scanf("%d",&(p->password); /储
9、存成员密码 while(p->password<=0) printf("请输入正值"); scanf("%d",&(p->password); tail->next=p; tail=p; tail->next=*p_head; return OK;4结点删除模块 此算法删除链表中的结点*pp,操作实质是将*pp下一结点复制到*pp后将其释放。 status DeleteNode(member *pp)member *temp; (*pp)->password=(*pp)->next)->passwo
10、rd; (*pp)->No=(*pp)->next)->No; temp=(*pp)->next; (*pp)->next=(*pp)->next->next; free(temp); return OK;5输入子模块 当选择好功能后,进行人工输入。先进行光标定位,然后输入正确的值,进行测试。四、调试分析1.此程序的时间复杂度是O(m*n)。2.本次设计主要用到了循环链表的相关知识,求joseph环的问题。调试过程中,一开始没有想到“指向指针数据的指针变量”,使得问题一直没有明朗。3.是否需要化简m值的语句:m=(m%n=0)?n:m%n;可根据m与总
11、成员数的值的大小来判断。当m=n时,则此步是可以删除的;当m>n时,则此步最好不删除,特别是当输入的m值很大,则化简m值的操作是很必要。 4.当m值为小于等于0时,系统提示“请输入正值:” 5.遇到的问题主要是:指针的指向的边界问题,但根据运行程序时的出错提示,很快也就解决了。 6.编写程序是没有设置编写保存数据,因此不能查找读取。五、用户使用说明利用单向循环链表存储结构模拟joseph环,因为循环链表最后一个结点的指针域指向头结点,整个链表形成一人环,刚好和题中的“n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)”内容要求一致,而且,循环链表中任一结点出发均可找到表中其他结点
12、,利用这一优点可较容易地找出报数的人及下一个报数的人,最后按照出列的顺序用一个for语句实现。本系统菜单如下:(1)界面友好,易与操作。(2)要求使用单向循环链表模拟过程(3)输入报数上限值m和人数上限n,密码值,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。(4)演示程序以人机对话的形式进行,提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序六、测试结果七、课程设计总结在完成设计的过程中,我遇到了一系列的问题,能明显感觉到自己在很多方面的不足,但另一方面,问题是要分析解决的,找出问题以便为完善学习计划,改变学习内容与方法提供实践依据。所以在整个过程中,我不断
13、加深了对数据结构的理解与一些程序写书时要注意的事项,体会了数据结构这门课程在解决现实生活问题上的可行性,也更进一步地激发了我的学习热情。 通过学习和实践,使我明白在进行面向过程的程序设计时,一般首先考虑程序所要实现的功能,然后设计为实现这些功能所必须采取的步骤,这些步骤就是过程。如果一个过程比较复杂而不能直接使用已有的抽象进行实现,则对这个过程进行分解,使分解之后的每一步(更低级的过程)能够直接对应着一条语句。通过将分解之后的一系列过程封装在一个函数抽象中,程序员在特定的时刻只关心有限的细节,这个新的函数抽象比其较低级的抽象更接近问题求解的过程,因而,能够很好地映射问题求解中的过程。如果这个过
14、程出现在许多问题求解中,那么,这个函数抽象就可能被重复利用。由于是第一次用“以数据结构为中心”的思想编程,所以并不是很习惯,在主函数中还是充斥着很多基本语句,以后仍要多多练习。 做一个课程设计要注意很多方面,无论是格式,还是书写的内容和要表达的思想都得严格要求自己,所以做起来真的不算容易。本次课程设计涉及了很多知识,由于往日没有学得很扎实,对某些问题仍然比较疑惑,所以要进行充足的补习。期间,我翻阅了很多书籍,知识总是联系很紧密的,解决完这个问题又发现了新的问题,之后,为了解决新问题又发现了更多的问题,就这样,我得等到一个一个把问题处理完。问题越多,明白的也就会越来越多,做一次课程设计就像从头到尾做了一次系统的复习,从基础到难点,从轮廓到每个知识点,数据结构的研究内容在我的脑海里就再也不像以前那么模糊了。设计程序来解决现在存在的问题,把理论知识付诸于实践,对于我们这些计算机专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践,这也是我们学习的目的。做完设计,我已深刻
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 村级冬季安全须知讲解
- 2024加拿大泌尿外科学会男性下尿路症状良性前列腺增生指南更新解读
- 2023年下半年天津中西医助理医师针灸学:太渊模拟试题
- 2021年新高考普通高等学校招生全国统一考试英语模拟试题(二)解析版
- 2023年高中数学知识点总结
- 2023年中职教师国培心得体会四篇
- 2023年茂名信宜市纪委监委招聘后勤服务人员考试真题
- 2022年冬奥会竞赛相关知识题库及答案(600题)
- 社会基础工作及其实务 15
- 浙江省2026年九年级下学期语文期中学力检测试卷附答案
- 特殊健康状态儿童运动前健康风险筛查指南编制说明-(征求意见)
- 内蒙古自治区矿山地质环境治理工程预算定额标准
- 沈阳地铁6号线一期工程环评报告
- GB/T 25085.3-2020道路车辆汽车电缆第3部分:交流30 V或直流60 V单芯铜导体电缆的尺寸和要求
- GB/T 21776-2008粉末涂料及其涂层的检测标准指南
- 2020中国大学慕课超星尔雅工程伦理2020章节测验答案
- 《三年级》数学全集举一反三课件奥数
- 青山处处埋忠骨 一等奖-完整版课件
- 文明工地创建方案(3篇)
- 小沟小学合同管理内部控制流程图
- XX医院juniper无线方案v4
评论
0/150
提交评论