




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖南商学院数据结构与算法课程设计约瑟夫双向生死游戏学生姓名梁子嫣140920043计算机工程与信息学院专业班级计科1402指导教师蒋伟进教授2016年 6月26日目录第一章需求分析1.1课程设计要求 1.2课程设计目标与总体方案错误!未定义书签。1.3程序执行的命令第二章算法描述2.1算法描述错误!未定义书签。2.2系统图形说明第三章系统的设计3.1创建双向链表3.2约瑟夫算法3.4主函数第四章 程序的运行结果图附录约瑟夫生死游戏章需求分析1.1项目简介约瑟夫双向生死游戏是在约瑟夫生者死者游戏的基础上,正向计数后反向计 数,然后再正向计数。具体描述如下:30个旅客同乘一条船,因为严重超载, 加
2、上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中, 其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定30个人围成一圈, 由第一个人开始,顺时针依次报数,数到第 9人,便把他投入大海中,然后从他的下一个人数起,逆时针数到第5人,将他投入大海,然后从他逆时针的下一个人数起,顺时针数到第9人,再将他投入大海,如此循环,直到剩下 15个乘客为止。问哪些位置是将被扔下大海的位置。1.2设计思路本游戏的数学建模如下:假设n个旅客排成一个环形,依次顺序编号1,2,-,n。从某个指定的第1号开始,沿环计数,数到第 m个人就让其出列,然后从第 m+1个人反向计数到m-k+1个人,让其出
3、列,然后从m-k个人开始重新正向沿环计数,再数m个人后让其出列,然后再反向数 k个人后让其出列。这个过程一 直进行到剩下q个旅客为止。本游戏的要求用户输入的内容包括:1. 旅客的个数,也就是n的值;2. 正向离开旅客的间隔数,也就是 m的值;3. 反向离开旅客的间隔数,也就是 k的值;4.所有旅客的序号作为一组数据要求存放在某种数据结构中。本游戏要求输出的内容是包括1. 离开旅客的序号;2. 剩余旅客的序号;所以,根据上面的模型分析及输入输出参数分析,可以定义一种数据结构后进行 算法实现。第二章系统的功能2.1系统文字描述(1)创建含有n个结点的双向循环链表;生着与死者的选择:P指向链表的第一
4、个结点,初始i置为1;while(iv=n/2) /删除一半的结点从P指向的结点沿链前进m-1步; 删除第m个结点(q所指向的结点); P指向q的下一个结点;输出其位置q->data;i自增1;从P指向的结点沿链后退k-1步; 删除第k个结点(q所指向的结点);P指向q的上一个结点;输出其位置q->data;i自增1;(3)输出所有生者的位置。2.2系统图形说明第三章系统的设计3.1创建双向循环链表;no de* createList(i nt num)no de* head = (no de*)malloc(sizeof( no de);head->value = 1;no
5、 de* p = head;for(i nt i = 1;i vnu m;i+)no de* p Next = (no de*)malloc(sizeof( no de);p Next->value = i+1;p->n ext = p Next;p Next->left = p;p = p Next;p->n ext = head;head->left = p;retu rn head;3.2生者与死者的选择int deleteList (no de* head, int nu m1,i nt nu m2,i nt tota IPeop le,i nt aliv
6、e Pep ole)/num1 代表顺时针数num2代表逆时针数no de* p = head;int peop leOfNow = tota IPeople;while( peop leOfNow>alive Pepole)/ 找到顺时针要删除节点的前一节点 Pfor(i nt i =1; ivnumi - 1;i+)p = p->n ext;/ 删除顺时针时的节点no de* toBeDeleted = p->n ext;prin tf("deadma n = %dn ",toBeDeleted->value);no de* n extToDel
7、eted = toBeDeleted->n ext;p->n ext = n extToDeleted;n extToDeleted->left = p;free(toBeDeleted);peopi eOfNow-;if(peop leOfNow>alive Pep ole) /防止不需要再删除节点了,所以要先判断/找到逆时针时要删除节点的前一节点no de* s = n extToDeleted;for(i nt i =1; ivnum2 -1;i+)s = s->left;/删除逆时针时的节点no de* tobeDeleted = s->left;p
8、rin tf("deadma n = %dn ",tobeDeleted->value);node* leftToBeDeleted = tobeDeleted->left;s->left = leftToBeDeleted;leftToBeDeleted->n ext = s;free(tobeDeleted);peop leOfNow-;p = leftToBeDeleted;return 0;3.3主函数int main()no de* head = createList(30);deleteList( head, 9,5,30,15);ret
9、urn 0;g514101915242029254301221any key to continue第四章程序运行结果i匚 *GMicrosoft Visual StudioXCommonMSDew9£EinTDebLjgyLifu.FJCEde adman deadman de adman deadnian ds adman deadnian deadman de adman deadnian ds adman deadnian deadman deadman de adman de Sidman Press附录源代码#i nclude "stdio.h" #i
10、 nclude "stdlib.h" struct nodeint value;no de* left;no de* n ext;Node;/创建双向的循环链表 no de* createList(i nt num)no de* head = (no de*)malloc(sizeof( no de);head->value = 1;no de* p = head;for(i nt i = 1;i vnu m;i+)no de* p Next = (no de*)malloc(sizeof( no de);p Next->value = i+1;p->n
11、ext = p Next;p Next->left = p;p = p Next;p->n ext = head;head->left = p;retu rn head;int deleteList (no de* head, int nu m1,i nt nu m2,i nt tota IPeop le,i nt alive Pep ole)/num1 代表顺时针数num2代表逆时针数no de* p = head;int peop leOfNow = tota IPeople;while( peop leOfNow>alive Pepole)/ 找到顺时针要删除节点
12、的前一节点 Pfor(i nt i =1; ivnum1 - 1;i+)p = p->n ext;/ 删除顺时针时的节点no de* toBeDeleted = p->n ext;prin tf("deadma n = %dn ",toBeDeleted->value);no de* n extToDeleted = toBeDeleted->n ext;p->n ext = n extToDeleted;n extToDeleted->left = p;free(toBeDeleted);peopi eOfNow-;if(peop leOfNow>alive Pep ole) /防止不需要再删除节点了,所以要先判断/找到逆时针时要删除节点的前一节点no de* s = n extToDeleted;for(i nt i =1; ivnum2 -1;i+)s = s->left;/删除逆时针时的节点no de* tobeDeleted = s->left;prin tf("deadma n = %dn ",tobeDeleted->value);node* leftToBeDeleted = tobeDeleted->
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新能源电动汽车充电设施建设与运营合同
- 民办学校联合运营合同书
- 2025年石材制品加工业务承包合同
- 2025年共建项目合同范文
- 2025年农庄租赁合同范本
- 2025年和谐离婚合同标准版
- 2025年公共建筑水电设施维修与更新合同
- 2025年许可独家授权销售合同
- 2025年区域分销商合作合同范文
- 国外合同补充协议范本6篇
- 磁共振的安全管理知识讲解(医院医学影像中心学习培训课件)
- 7-8宝钢湛江钢铁三高炉系统项目全厂供配电工程-测量方案-2019.7.5
- 花钱托人找工作协议书模板
- 单个军人队列动作教案
- JT-T 1498-2024 公路工程施工安全监测与预警系统技术要求
- 吉林省地方教材家乡小学一年级下册家乡教案
- 实验经济学实验设计案例
- 2024年呼伦贝尔职业技术学院单招职业技能测试题库及答案解析
- 幼升小房屋租赁合同
- 任务2 聚酯合成的浆料配制-聚酯浆料配制的生产操作
- 智能修鞋设备的研发与应用
评论
0/150
提交评论