数据结构课程设计告—敢死队的问题.docVIP

数据结构课程设计告—敢死队的问题.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计告—敢死队的问题

数据结构课程设计 系 别 专 业 计算机科学与技术 班级学号 姓 名 指导教师 成 绩 年 月 日 敢死队问题 问题描述 有M个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。 1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。typedef struct node int data; struct node *next; LNode;/* 定义结点类型 */ LNode *p; 4.每个模块的分析 (1)主程序模块: main LNode *p; int m,n,z,y; do printf Please input the people number:\n ; scanf %d,n ; while n 0 ; do printf Please input the excursion:\n ; scanf %d,m ; while m 0 ; if n 1 printf the position is: 1 ; else p CREAT n ; y DELETE p,m ; z n-y+2; if z%n 0 /* 排除特殊情况 */ printf the position is:\n%d\n,z ; else printf the position is:\n%d\n, n-y+2 %n ; /* 通过数学思想求得实验要求情况下的数值 */ (2)构造单循环链表并初始化模块: LNode* CREAT int n /* 创建循环链表 */ LNode *s,*q,*t; int i; if n! 0 t q LNode * malloc sizeof LNode ; q- data 1;/* 生成第一个结点并使其data值为1 */ for i 2;i n;i++ s LNode * malloc sizeof LNode ;/*自动生成结点*/ q- next s; q- next- data i;/*给第i个结点赋值i*/ q q- next; q- next t; /* 生成后续结点,并使其data值即为它所在链表(队伍)中的位置 */ return t; (3)删除结点模块: DELETE LNode* t,int m /* 链表的删除 */ LNode *a;int i; while t- next! t for i 1;i m-1;i++ /*查找要删除结点的前一结点*/ t t- next; a t- next; t- next a- next; free a ;/*释放结点*/ t t- next; /* while循环依次删除被点到的士兵 */ printf \n ; return t- data ; 三 调试分析: 1.本程序运行后的结果应是如下提示: Exit please input 0 Or Go on Please input the tatal of the team: 输入队伍总人数 Please input the excursion: 输入间隔人数 结果显示:The wanted position is 选择的位置 2.在程序调试运行的过程中产生了各种各样的问题,有的是多了空格,有的是拼写错误,还有的是少了括号,类似的问题有很多。解决的办法是一遍遍尝试,不断逐行逐句进行修改。 例如程序调试过程中遇到警告:发现错误为 if m 1 后改正为 if m 1 程序运行正确了,运行如下: 显示输出如图: 3.由程序分析可得:本程序时间复杂度为O(nm)! 4.①在设计生成循环单链表时,考虑到程序结果需要士兵的位序,故将每个结点的data值设置为他们在队列中的位置,方便返回。 ②在删除单链表时,如果在报数时直接数到出列士兵则不方便链表的删除,可设置i m-1找到出列士兵的前一位执行如下: for i 1;i m-1;i++ /*查找要删除结点的前一结点*/ t t- next; a t- next; t- next a- next; free a ;/*释放结点*/ t t- next; ③.在程序设计前,如果按原题所设,则需设队长为第一位,再分别测试从第几个开始才能符合条件。现在改变思想,通过数学思想

文档评论(0)

yasou511137 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档