ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:58.33KB ,
资源ID:8918905      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8918905.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(敢死队问题课程设计报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

敢死队问题课程设计报告.docx

1、敢死队问题课程设计报告数据结构课程设计题 目: 敢死队问题 作 者: * 院 (系): 信息工程学院 专 业: 信息管理与信息系统 指导教师: * 日 期: 2013年11月26日 第一章 绪论3第二章 需求分析4第三章 详细设计4第四章 调试分析7第五章 测试结果8第六章 源程序代码8第七章 实验总结10第八章 参考文献11第一章 绪论课程设计时实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个发面,是一门独立于课程之外的独立课程。课程设计时让同学们对所学的课程更全面的学习和应用,可以理解和掌握课程的相关知识。数据结构是一门重要的专业基础课,是计算机理论和应用的核心基础

2、课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风等方面受到比较系统和严格的训练。在这次的课程设计中我选择的题目是敢死队问题。加强版的约瑟夫环问题(用户输入N,M值,从1至N开始顺序循环数数,每数到M输出该值,直到全部输出,最后输出的一个获胜),增加了保证1号安全这一条件限制。并且模拟各个开始位置,队员死亡的顺序,以及最后的获胜者。课程设计的目的的意义:加深对循环队列和数组的理解,以及对循环队列和数组的实际应用,加强自己的动手操作能力,增加对课程的兴趣,而

3、不是枯燥的看课本。课程设计敢死队问题描述有n个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。第二章 需求分析 1.本程序任务是通过输入任意队伍人数n和报数上

4、限m,输出使排长最后一个执行任务而开始记数的初始位置。首先输入队伍人数n,然后输入报数上限m(m=n)。比如从1号开始报数,当达到报数上限时,那名士兵出列执行任务,从下个人开始记数,再次循环,直到只剩一人,得到其在队伍中的位置,记下该位置视为排长位置,则1号即可视为最先报数的人,通过数学计算即可获得所求。2.功能模块和流程: 1)功能模块该程序功能比较单一,主要是为解决敢死队问题而设计。通过输入队伍人数和报数上限即可获得开始报数的位置。2)程序流程 (1)构造链表(2)数据输入(3)执行删除(4)输出要求数值(5)结束3.数据测试:当 n=10,m=5, 输出结果为:要求的位置是:9。第三章

5、详细设计1.算法设计:本程序其实质是约瑟夫环问题。从排长位置即1号开始报数,共有n个人,达到报数上限m=5的战士出列,继续进行报数,直到剩余最后一人,记下该位置为k。若将该位置视为排长位置,则原先的1号位置即位所有的开始报数的位置z。则z=n-k+2。2.以单循环链表为存储结构,包含三个模块: (1)主程序模块 (2)构造链表并初始化(3)删除结点 3.结点类型和指针类型typedef struct node int data; struct node *next;LNode;/* 定义结点类型 */LNode *p;4.每个模块的分析(1)主程序模块:main() LNode *p; int

6、 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 (mdata=1;/* 生成第一个结点并使其data值为1 */ for(i=2;inext=s; q-next-data=i;/*给第i个结点赋值i*/ q=q-next; q-next=t; /* 生成后续结点,并使其data值即为它所在链表(队伍)中的位置 */ return t;(3)删除结点模块:

7、DELETE (LNode* t,int m)/* 链表的删除 */ LNode *a;int i; while (t-next!=t) for (i=1;inext; 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 th

8、e excursion:输入间隔人数结果显示:The wanted position is 输出选择的位置2.在设计生成循环单链表时,考虑到程序结果需要士兵的位序,故将每个结点的data值设置为他们在队列中的位置,方便返回。 在删除单链表时,如果在报数时直接数到出列士兵则不方便链表的删除,可设置im-1找到出列士兵的前一位执行如下:for (i=1;inext; a=t-next; t-next=a-next; free(a);/*释放结点*/ t=t-next;在程序设计前,如果按原题所设,则需设队长为第一位,再分别测试从第几个开始才能符合条件。现在改变思想,通过数学思想:单循环链表本身是一

9、个循环体,可先求出当从第一个出发的话,求出每隔m个出去一个最后是谁未出列,然后再设置它为链头,求出当他为队首时从第几个开始方能使其不出列。(n-y+2)%n 即可实现这功能!第五章 测试结果第六章 源程序代码#include /头文件#include#include#includetypedef struct node /定义结构体 链表 int data; struct node *next;LNode; /* 定义结点类型 */LNode* CREAT(int n) /* 创建循环链表 */ LNode *s,*q,*t; int i; if(n!=0) t=q=(LNode *)mall

10、oc(sizeof(LNode); /生成第一个结点 q-data=1; /* 使其data值为1 */ for(i=2;inext=s; /把q的节点指向s q-next-data=i; /*给第i个结点赋值i*/ q=q-next; /q指向的结点向后移一位 q-next=t; /* 生成后续结点,并使其data值即为它所在链表(队伍)中的位置 */ return t; /返回头结点,形成循环链表int DELETE (LNode* t,int m) /* 链表的删除 */ LNode *a;int i; while (t-next!=t) /while循环依次删除被点到的士兵 for (

11、i=1;inext; a=t-next; t-next=a-next; /执行删除操作,删除数据 free(a); /*释放结点*/ t=t-next; printf(n); return (t-data); /返回t的值main() LNode *p; int m,n,z,y; printf(Exit please input 0 Or Go on.nPlease input the tatal of the team:); scanf (%d,&n); /*输入队员总数*/ while(n!=0) /*当队员总数等于0时退出*/ do printf(Please input the exc

12、ursion:); /*输入偏移数*/ scanf(%d,&m); while (m=0); if(m=1) printf(The wanted position is 1th.n); else p=CREAT(n); /创建循环链表p y=DELETE(p,m); /选出去炸碉堡的人 调用删除函数 z=n-y+2; if(z%n=0) /* 排除特殊情况 */ printf (The wanted position is %dth:n,z); else printf(The wanted position is %dth:n,(n-y+2)%n); /* 通过数学思想求得实验要求情况下的数值

13、 */ printf(Exit please input 0 Or Go on.nPlease input the tatal of the team:); scanf(%d,&n); /*输入敢死队员总数*/ 第七章 实验总结通过这次课程设计我又学到了很多东西,如程序的模块化设计思想,同时也加深了对数据结构这门课程的理解和学会了如何在实际中应用数据结构。在做程序之前,觉得敢死队这个问题,很难解决。在通过自己一次次的画图,推算结果时,明白了该程序的主要思路。本程序其实质是约瑟夫环问题,在明白程序的实质后开始,选择数据的存储结构类型,最开始想到的是循环队列,但是队列是在队头进行出队列操作,队尾入

14、队列,不能进行任意删除元素的操作,没有多想就放弃了。最后选择了运用循环单链表来实现问题的解决。以前总是不清楚数据结构它有什么用途。通过这此课程设计,明白我们所学的虽然只是课本知识,但很多时候,我们可以利用所学的来解决生活中碰到的一些问题。同一个问题往往可以用不同的方法来解决。通过实际操作,学会分析问题,解决问题,开发了自己的逻辑思维能力。深刻体会到“没有做不到的,只有想不到的”, “实践是检验真理的标准”。这次选取的题目比较简单,程序量也比较小,所以完成起来相对容易一些,通过一次一次的调试修正,感觉自己也进步了不少。第八章 参考文献1. 谭浩强c程序设计2.李业丽,郑良斌数据机构(c)实验教程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1