- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法——joseph环
数据结构与算法课程设计
joseph环
152208100066
张小莲
目录
需求分析-------------------------------------------------------03
算法分析-------------------------------------------------------04
该单循环链表的逻辑结构------------------------------------------04
删除出列的结点-------------------------------------------------04
判断是否所有人全部出列------------------------------------------04
算法设计-------------------------------------------------------05
PersonList结构体-----------------------------------------------05
CreateList函数-------------------------------------------------05
Exports函数---------------------------------------------------05
完整代码-------------------------------------------------------07
结果说明-------------------------------------------------------09
总结------------------------------------------------------------10
需求分析
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。
算法分析
从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去
2. 删除出列的结点
某结点出列后,应将该结点从单循环链表里删除,则需要找到该结点的前一个结点,并由p指向它,通过修改指针域使结点p的直接后继为s的直接后继,即p-next=s-next。当m=1时,即将出列的结点的前一个结点就是还未进行移动的当前的s指针指向的结点。当要删除的结点恰好为head指向的结点时,删除前应修改head指向的结点为s-next。
判断是否所有人全部出列
由于结点出列后的删除操作,整个单循环链表的表长是逐渐缩短的,直至单链表只剩下头结点和首结点:
此时已经无法在进行删除结点操作,因为该结点的直接后继就是自己。但实际上,当只剩下一个人时无论m为何值此人直接出列就可以了。也就是说,当链表里只剩下最后一个结点时已经不必进行删除操作,直接输出该结点的编号即可。
于是问题就转化成如何判断链表里只剩最后一个结点,判断head-next是否与head相等可以解决问题。
算法设计
PersonList结构体
每个结点包含编号,密码以及指向下一个结点的指针域三个数据。
typedef struct node
{
int password; //密码
int number; //编号
struct node *next; //指针域
} PersonList;
CreateList函数
该函数的功能是建立单循环链表,并从键盘读入每个编号的密码,入口参数n为单循环链表所包含的结点的个数,函数返回一个PersonList类型的指针。
PersonList *CreateList(int n)
{
PersonList *head,*s,*r;
head=(PersonList *) malloc(sizeof(PersonList));
head-next=NULL;
head-number=1;
printf(请输入编号为1的人的密码:);
scanf(%d,head-password); //从键盘中读取编号为1的人的密码
getchar(); //接收回车
r=head;
for(int i=2;i=
您可能关注的文档
最近下载
- 第三单元 物质构成的奥秘跨学科实践活动2制作模型并展示科学家探索物质组成与结构的历程》课件-人教版2024九年级化学上册.pptx VIP
- 2024年四川广安爱众股份有限公司人员招聘考试题库及答案解析.docx VIP
- 英格索兰空压机.ppt VIP
- NBT 47015 2011 压力容器焊接规程.pdf VIP
- 地铁车站大客流应急组织.pptx VIP
- 人教版六年级数学上册第三单元《分数除法》单元测试卷 (含答案).pdf VIP
- 2023年四川广安爱众股份有限公司招聘笔试题库及答案解析.docx VIP
- 2023四川广安爱众股份有限公司招聘见习人员2人笔试备考试题及答案解析.docx VIP
- 2023四川广安爱众股份有限公司对外招聘笔试备考题库及答案解析.docx VIP
- 能源管理体系钢铁企业认证要求.pptx VIP
文档评论(0)