欢迎来到天天文库
浏览记录
ID:38816494
大小:419.00 KB
页数:47页
时间:2019-06-19
《《课程设计说明书》模版》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、山东科技大学学生课程设计1.设计1约瑟夫环问题一、需求分析1、利用单向循环链表存储结构模拟此过程,按照出列的顺序印出个人的编号,只适用于一个案例。具体目标包括:(1)实现单循环链表的初始化;(2)理解约瑟夫环的定义,用循环找到每次报数人的序号;(3)从单循环链表中删除节点,并判断链表空与非空的临界条件。2、构造一个含有n个元素的单向循环链表ADTCircleList{数据对象:D{ai
2、ai∈Elemset,i=1,2,…,n,n≥0}数据关系:R={,
3、ai-1,ai∈D,i=2,…n}基本操作:LinkInitList(intn)操
4、作结果:构造一个含有n个元素的单向循环链表。3、程序中,先输入总人数PN与初始密码SN,再输入输入n个正整数,作为这n个人的密码,接下来初始密码m。4、测试数据PN=5SN=2,N个人的密码依次=14648。出列为:21354。第47页山东科技大学学生课程设计二、概要设计1、函数功能在main函数中实现voidmain(void){intPN,SN,i;LinkListL;printf("请输入总人数PN,和出示密码SN:");scanf("%d%d",&PN,&SN);inta[N];a[0]=SN;//将a[0]保存为初始密码printf("请输入%d个人各自所持
5、的密码:",PN);for(i=1;i6、idCreatLinkList(LinkList*L,intPN){Node*p,*q;inti;(*L)=(LinkList)malloc(sizeof(Node));p=(*L);p->data=1;for(i=2;i<=PN;i++){q=(LinkList)malloc(sizeof(Node));q->data=i;p->next=q;p=q;}p->next=(*L);}第47页山东科技大学学生课程设计流程图1结束p->next=headp=qP->next=p2head=qi==1q指向申请空间i<=np指向申请空间2、程序主模块实现算法从头结点开始,根7、据报数上限找到下一个出列人的序号,并读出该人的密码作为新的报数上限,从此节点的下一个节点开始进行新的查找。取每次将要删除的人的密码,用于下次报数的上限.通过指针依次删除出列人相应的节点,直到该链表中无节点,退出循环。第47页山东科技大学学生课程设计输入总人数与初始密码jnexei=i+1=1q=head->next输出q的numberm<0结束m=q->next->number删除q节点初始化一个单循环链表四、运行结果及分析1.调试分析(1)进入第47页山东科技大学学生课程设计程序后按提示输入程序初始数据回车后即可得到结果,输8、出结果表示依次出列人的序号,程序结束。若输入过程中输入有误,程序直接结束。算法时间复杂度正比于2n加上所有人的密码和。(2)结果分析:对一般数据与边界数据能输出正确结果;对错误数据能做出合适的反应。2.测试结果输入值不符合条件是:五、总结第47页山东科技大学学生课程设计1.本程序比较简单,只有一个main函数,功能在main函数中实现,程序有待优化。本次实验主要考察了对单循环链表的应用。2.调试过程中,由于指针使用不当多次出现错误,对指针的设计还需要熟练掌握。附:主要源代码#include#include#defineN100ty9、pedefstructNode{intdata;//将这一圈人按从1~PN贴上序号structNode*next;}Node,*LinkList;voidCreatLinkList(LinkList*L,intPN){Node*p,*q;inti;(*L)=(LinkList)malloc(sizeof(Node));p=(*L);p->data=1;for(i=2;i<=PN;i++){q=(LinkList)malloc(sizeof(Node));q->data=i;第47页山东科技大学学生课程设计p->next=q;p=q;}p->next=
6、idCreatLinkList(LinkList*L,intPN){Node*p,*q;inti;(*L)=(LinkList)malloc(sizeof(Node));p=(*L);p->data=1;for(i=2;i<=PN;i++){q=(LinkList)malloc(sizeof(Node));q->data=i;p->next=q;p=q;}p->next=(*L);}第47页山东科技大学学生课程设计流程图1结束p->next=headp=qP->next=p2head=qi==1q指向申请空间i<=np指向申请空间2、程序主模块实现算法从头结点开始,根
7、据报数上限找到下一个出列人的序号,并读出该人的密码作为新的报数上限,从此节点的下一个节点开始进行新的查找。取每次将要删除的人的密码,用于下次报数的上限.通过指针依次删除出列人相应的节点,直到该链表中无节点,退出循环。第47页山东科技大学学生课程设计输入总人数与初始密码jnexei=i+1=1q=head->next输出q的numberm<0结束m=q->next->number删除q节点初始化一个单循环链表四、运行结果及分析1.调试分析(1)进入第47页山东科技大学学生课程设计程序后按提示输入程序初始数据回车后即可得到结果,输
8、出结果表示依次出列人的序号,程序结束。若输入过程中输入有误,程序直接结束。算法时间复杂度正比于2n加上所有人的密码和。(2)结果分析:对一般数据与边界数据能输出正确结果;对错误数据能做出合适的反应。2.测试结果输入值不符合条件是:五、总结第47页山东科技大学学生课程设计1.本程序比较简单,只有一个main函数,功能在main函数中实现,程序有待优化。本次实验主要考察了对单循环链表的应用。2.调试过程中,由于指针使用不当多次出现错误,对指针的设计还需要熟练掌握。附:主要源代码#include#include#defineN100ty
9、pedefstructNode{intdata;//将这一圈人按从1~PN贴上序号structNode*next;}Node,*LinkList;voidCreatLinkList(LinkList*L,intPN){Node*p,*q;inti;(*L)=(LinkList)malloc(sizeof(Node));p=(*L);p->data=1;for(i=2;i<=PN;i++){q=(LinkList)malloc(sizeof(Node));q->data=i;第47页山东科技大学学生课程设计p->next=q;p=q;}p->next=
此文档下载收益归作者所有