
沈阳航空航天大学课程设计报告课程设计名称:数据构架课程设计课程设计题目:约瑟夫环院(系)::班级:学号:姓名:指导学生:目录课程设计介绍课程设计内容课程设计规定课程设计原理课设题目仔细剖析原理图介绍功能模块图(如图)流程图分析数据结构分析内存构架算法描述调试与探讨调试过程程序执行过程参考文献附录(关键部分程序清单)课程设计介绍课程设计内容编号为,……n的n个人按顺时针方向围坐一圈每人持有一个密码(正小数)。一开始任选一个正整数作为报数的上限值m从第一个人开始按顺时针方向自起初顺序报数报到m时中止报数报m的人出列将他的密码作为新的m值从他的顺时针方向上的下一个开始从新从报数如此下去直到所有人全部出列为止设计一个程序求出出列顺序。使用单循环递归作为存储结构预测:由题意可以将每个人看做链表上的一个节点每个人持有的密钥即为每个结点所储存的数据相邻的人之间存在连接关系即数组的两个相邻结点之间由指针来进行关联最后一个人和第一个人也存在连接关系即数组的末尾节点和头结点相连构成了单循环链表储存结构。执行报数过程可以看做一个单独指针依次指向每一个节点有人出列即删除掉泛型中相应的节点。课程设计规定参考相应的资料独立完成课程设计任务。

交规范课程设计报告和工具代码。课程设计原理课设题目仔细剖析根据课设题目规定程序需要分为两大部分:、单循环链表存储结构的构建:建立所需的单循环链表数据传输结构对每个结点输入所需的密钥、序号数据并通过指针连接成单循环递归。、实现约瑟夫环数据出列顺序的算法:依照题目规定依据报数上限对节点进行查找和删除操作按次序输出出列的节点序号依照每次出列的结点储存的密钥设置报数上限循环操作直至全部结点出列完毕程序运行结束。原理图介绍功能模块图(如图)约瑟夫环输出出列顺序创建单循环递归图功能组件图流程图分析主程序图如图:首先创建单循环递归作为数据传输结构并储存数据之后如果执行报数。如果数组中剩余节点数小于执行报数操作得到节点的序号数据并输出若链表中只剩一个节点输出结点的序号数据程序运行结束。开始建立单循环链表指定报数上限m链表中结点数小于是报数并储存数据删除节点否选定新的报数上限m为删除节点存储的密钥输出结果结束图主程序图形成单循环链表流程图如图:首先为数组内存空间之后判定节点数能否超过上限若没有到达上限构建新结点若已到达上限将末尾节点的指针指向头结点形成单循环链表并结束创建数组操作。开始分配内存空间结点数达到最大否建立新节点是末尾节点指向表头结束图形成单循环链表流程图数据结构分析内存构架typedefstructLNode{intdata每个人持有的密钥intnum每个人的编号structLNode*next指向下一个节点的指针}LNode,*LinkList定义一个结构体为一个持有密码的人算法描述形成单循环递归:首先定义结构体节点指针结点p数组L头指针head。

使head指向L的头节点p指向L。对结构体p的数据部分进行输入数组作为L的一个节点之后向后移一位。循环此步操作构建单链表。最后将末尾节点的指针指向头结点形成单循环链表。约瑟夫环出列操作:首先定义指针J和K指针J指向单循环链表的第一个节点随机生成一个报数上限m值。将指针p向后拨m次此刻p所对准节点的下一个节点即为要出列的结点使指针K指向该节点将这个节点从数组中删除之后调用其中内存的序号数据输出写入其中储存的密钥作为新的m值。然后继续反复执行拨指针p出列节点写入数据操作直到数组中只剩下一个节点停止循环操作此时输出最后一个节点中的序号数据完成全部出列操作。调试与预测调试过程调试过程中出现errorC:’rand’:undeclaredidentifier报错在添加预处理命令#includes“timeh”后正常执行在执行过程中发生极大数据看到形成循环递归时将末尾指针指向了头结点改为指向头结点的下一个节点以后正常运行程序执行过程如图所示当输入数量为每个人所持有的密码依次为、、、、时输出结果:出列顺序为:>>>>程序运行正确。图当数量为时的程序运行结果如图所示当输入数量为每个人所持有的密码依次为、、、、、、、、、时输出结果:出列顺序为:>>>>>>>>>程序运行正确。

图当数量为时的程序运行结果参考文献严蔚敏吴伟民数据结构M北京:清华大学出版社张长海陈娟C程序设计M北京:高等教育出版社谭浩强C程序设计M北京:清华大学出版社苏士华黄学俊数据结构解析习题课程设计M合肥:中国科学技术大学出版社张瑞军数据结构M北京:清华大学出版社刘怀亮数据结构习题解析与实验指导M北京:冶金出版社王敬华林萍张清国C语言程序设计教程(第二版)M背景:清华大学出版社附录(关键部分程序清单)#include#include#include"stdlibh"#include#include#include#include"timeh"typedefstructLNode{intdataintnumstructLNode*next}LNode,*LinkListvoidcreatelist(LinkListL约瑟夫环设计过程,intn){LinkListp,headinti,aL=(LinkList)malloc(sizeof(LNode))head=Lfor(i=idata=ap>num=iL>next=pp>next=L=p}p>next=head>next}voidmain(){intn,m,x,k约瑟夫环设计过程,lLinkListJ,L,Kprintf("请键入人数:n")scanf("d",n)createlist(L,n)J=Lsrand((unsigned)time())m=rand()nprintf("出列顺序为:")for(l=lnext}K=J>nextJ>next=K>nextx=K>numprintf("d>",x)m=K>datafree(K)}x=J>numprintf("dn",x)}课程设计小结:在教师让我们在课设题目中选取一道时我看见这道题的条件显然很有反思的价值有点类似于ACM比赛题目便选择了这道题目。

在完成了课程设计的过程中我并没有遇到太大的妨碍一开始就对考题的理解十分浅显有很清晰的审题思路编写代码以及调试程序的过程也十分顺利仅仅遇到了几个小的难题经过认真的推敲就得以成功缓解。整个过程几乎不需要借助参考和帮助就轻松独立完成。这次课程设计对我的数据构架以及C语言学习掌握有很大帮助它让我对链表这一存储结构更为熟悉就能轻松把握这种数据结构并且在自己查询资料完成设计的过程中我对srand及rand这两个随机数函数的用法有了清晰深刻的理解使得无法熟练的把它们利用在我的编程学习中。同时我还对单循环链表这一链表的特殊差异方式有了更深切的理解在当时极少接触这种方式的状况下我能顺利的利用这种方式缓解课程设计的难题也从另一个方面体现出了我借助现在课程设计又有了一定的进步。指导学生评语:指导老师(签字):年月日课程设计成绩
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-120406-1.html
吃吃喝喝打打几十块输赢的小麻将
自由航行是指商船而不是军舰