敢死队问题课程设计报告.doc_第1页
敢死队问题课程设计报告.doc_第2页
敢死队问题课程设计报告.doc_第3页
敢死队问题课程设计报告.doc_第4页
敢死队问题课程设计报告.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计题 目: 敢死队问题 作 者: * 院 (系): 信息工程学院 专 业: 信息管理与信息系统 指导教师: * 日 期: 2013年11月26日 目录第一章 绪论3第二章 需求分析4第三章 详细设计4第四章 调试分析7第五章 测试结果8第六章 源程序代码8第七章 实验总结10第八章 参考文献11第一章 绪论课程设计时实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个发面,是一门独立于课程之外的独立课程。课程设计时让同学们对所学的课程更全面的学习和应用,可以理解和掌握课程的相关知识。数据结构是一门重要的专业基础课,是计算机理论和应用的核心基础课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风等方面受到比较系统和严格的训练。在这次的课程设计中我选择的题目是敢死队问题。加强版的约瑟夫环问题(用户输入N,M值,从1至N开始顺序循环数数,每数到M输出该值,直到全部输出,最后输出的一个获胜),增加了保证1号安全这一条件限制。并且模拟各个开始位置,队员死亡的顺序,以及最后的获胜者。课程设计的目的的意义:加深对循环队列和数组的理解,以及对循环队列和数组的实际应用,加强自己的动手操作能力,增加对课程的兴趣,而不是枯燥的看课本。课程设计敢死队问题描述有n个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。第二章 需求分析 1.本程序任务是通过输入任意队伍人数n和报数上限m,输出使排长最后一个执行任务而开始记数的初始位置。首先输入队伍人数n,然后输入报数上限m(m1?队员报数报数值=死亡数?队员出列输出结果否是否3.结点类型和指针类型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 (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)删除结点模块: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 the 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;在程序设计前,如果按原题所设,则需设队长为第一位,再分别测试从第几个开始才能符合条件。现在改变思想,通过数学思想:单循环链表本身是一个循环体,可先求出当从第一个出发的话,求出每隔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 *)malloc(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 (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 excursion:); /*输入偏移数*/ 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); /* 通过数学思想求得实验要求情况下的数值 */ printf(Exit please input 0 Or Go on.nPlease input the tatal of the team:); scanf(%d,&n); /*输入敢死队员总数*/ 第七章 实验总结通过这次课程设计我又学到了很多东西,如程序的模块化设计思想,同时也加深了对数据结构这门课程的理解和学会了如何在实际中应用数据结构。在做程序之前,觉得敢死队这个问题,很难解决。在通过自己一次次的画图,推算结果时,明白了该程序的主要思路。本程序其实质是约瑟夫环问题,在明白程序的实质后开始,选择数据的存储结构类型,最开始想到的是循环队列,但是队列是在队头进行出队列操作,队尾入队列,不能进行任意删除元素的操作,没有多想就放弃了。最后选择了运用循环单链表来实现问题的解决。以前总是不清楚数据结构它有什么用途。通过这此课程设计,明白我们所学的虽然只是课本知识,但很多时候,我们可以利用所学的来解决生活中碰到的一些问题。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论