班级:网络工程08(x)班。
姓名: xxx
学号: 08200xxxxxxx
2024年12月18日。
目录。1需求分析 2
1.1问题描述 2
1.2基本要求 2
2概要设计 2
2.1数据结构 2
2.2程序模块 3
2.3各模块之间的调用关系以及算法设计 4
3详细设计 4
4测试与分析 9
5总结 12
6附录 12
本设计需要解决的问题叫做猴子选大王问题,此问题在数据结构的学习过程中属于一个经典问题,具体的,是一堆猴子都有编号,编号是1,2,3 ..m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
(1)输入数据:输入m,n两个数, m,n 均为整数。
(2)输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能。
3)本程序是通过具体宏定义,把一群具有编号的猴子选出最后留下的猴子,也就是猴子的编号,即猴子大王的编号。
本程序运用了结构体,来分配猴子的所占内存,存储猴子的编号,并用link表示结构体的指针;采用了动态循环链表,并且定义了p,head,p2三个猴子结构的指针,运用循环链表的特点,使其成一个圆,解决选大王的过程;在存储结构循环链表的组成上,每个节点都有两个域,一个是用来存储int型数据元素的数据域,另一个是指向下一个节点的指针域。
ads list monkey,*link; /设计一个猴子的结构体,该结构体用monkeylink
typedef elemtype *triplet
status destroytriplet();
status gettriplet();
intlist(&l)}adt list
1.生成了个猴子结构的循环链表,也就是说链表到了结尾它的下个地址就是链表头了如此不停循环下去。
link p,head,p2)
p2->next=head; p=head;}
2.将猴子淘汰又将p指向了链表的头指针将猴子淘汰指向下一个猴子。
p=head;
while(1) }p=p2->next;
3.最后胜出大王猴子。
if(i==m-1) p2=p; p=p->next;
图2.3—1模块之间调用关系图)
1.课程设计的伪码如下:
typedef struct monkey //设计一个猴子的结构体,该结构体用monke,link表示该结构体的指针。
struct monkey *next; /下个猴子的地址指针。
monkey,*link;
void main()
定义了三个猴子结构的指针link p,head,p2
head=p=p2=(link)malloc(sizeof(monkey));开辟空间用来存储猴子结构。
for(i=1;i
p2->next=head;//链表变成循环链表了,也就是说链表到了结尾它的下个地址就是链表头了如此不停循环下去,就是个圆。
p=head;
printf("对猴子进行编号!");
for(i=1;i<=n;i++)
p->num=i; /对猴子编号。
p=p->next; /指针指向下个猴子。
//所有猴子编号结束。
i=0; p=head; /又将p指向了链表的头。
while(1)
i++;if(p->next==p)//结束条件,说明只剩下自己了,也就是大王了。
break;
if(i==m) /如果这一个报到了数m
i=0; /再次从1开始报数,因为以后要执行i++语句。
printf("%d号猴被淘汰",p->num); 这个号码的猴子要被淘汰。
p2->next=p->next;//将该猴子从链表中拿下
p=p2->next;//指针指向下一个猴子
else //没有报到m的继续报数。
if(i==m-1) p2=p;
p=p->next; }
printf("胜出:%d",p->num); 最后留下的猴子胜出。
2.源程序流程图。
图3—2—1源程序流程图)
首先,本程序对猴子的数目及每次的报数都事先进行了宏定义,程序中表现出来的是猴子数目是19,每次的最大报数是4,分别用宏定义表示成#define n 19和#define m 4。以下就是根据这两个数得到的运行结果:
对猴子进行编号!
1号猴子:1
2号猴子:2
3号猴子:3
4号猴子:4
5号猴子:5
6号猴子:6
7号猴子:7
8号猴子:8
9号猴子:9
10号猴子:10
11号猴子:11
12号猴子:12
13号猴子:13
14号猴子:14
15号猴子:15
16号猴子:16
17号猴子:17
18号猴子:18
19号猴子:19
1号猴子报:1
2号猴子报:2
3号猴子报:3
4号猴子报:4
4号猴被淘汰。
5号猴子报:1
6号猴子报:2
7号猴子报:3
8号猴子报:4
8号猴被淘汰。
5号猴子报:1
13号猴子报:2
14号猴子报:3
19号猴子报:4
19号猴被淘汰。
5号猴子报:1
13号猴子报:2
14号猴子报:3
5号猴子报:4
5号猴被淘汰。
13号猴子报:1
14号猴子报:2
13号猴子报:3
14号猴子报:4
14号猴被淘汰。
13号猴子报:1
胜出:13运行结果分析:按照程序,首先是运用了结构体,给猴子分配内存,将猴子编号,然后,生成猴子结构的链表,通过p2->next=p; p2=p; p2->next=head; p=head;几步,使链表变成循环链表,也就是说链表到了结尾它的下个地址就是链表头了如此不停循环下去,就是个圆,这样循环下去。
当p->next==p时,说明只剩该猴自己了,也就是大王出现了,否则继续循环,这样,最后就能产生大王猴子。在本程序中,猴子的总数是19,每次的报数最大是4,产生的猴子的大王是编号为13的猴子。
通过本次课程设计的实践,我在其中学到了平时在上课时候体会不到的东西。首先就是动手能力的提高需要靠实践的过程,任何一件事情不是一蹴而就的,都要经过一定的过程。本次经过对数据结构课程的设计,基本掌握了编程开发的思想,知道了模块化设计的重要性。
同时,在开发的过程中,一定要学会用算法的思想去解决问题是十分重要的。再次,我也体会到了编程开发的乐趣,对自己掌握开发环境的能力以及对开发环境的认识,更深一步的学会了开发的技巧。
通过本次的设计和学习,自身对学习的方法也有了深入的理解,学会了递归的思想还有其他的一些解决问题的主要方法,同时也对计算机的操作有了更好的提高。
猴子选大王源程序清单:
#include <>
#include <>
#define n 19
#define m 4
typedef struct monkey
int num;
struct monkey *next;
monkey,*link;
void main()
link p,head,p2;
int i;
head=p=p2=(link)malloc(sizeof(monkey));
for(i=1;i
p2->next=head;
p=head;
printf("对猴子进行编号!");
for(i=1;i<=n;i++)
i=0;p=head;
while(1)else
printf("胜出:%d",p->num);
数据结构课程设计报告书
2010 年 12 月 28 日。设计实现稀疏矩阵的基本功能,例如稀疏矩阵的相加,相减,相乘,转置等。采取的方法有三元组和十字链表来进行实现。要求运行无误,基本功能实现良好。简要说明设计方案 需要设计哪些类,以及类和类之间的关系 利用三元组实现 主要需要设计一个矩阵类和一个三元组类。将三元组做为矩阵...
《数据结构》课程设计报告书
数据结构 课程设计报告。报告 题目1.迷宫问题。2.哈夫曼编码。作者所在系部 计算机科学与工程系。作者所在专业网络工程。作者所在班级b08522 作者姓名马洪彪。作者学号20084052227 指导教师姓名贾振华。完成时间2009年12月31日。北华航天工业学院教务处制。课程设计任务书。摘要。本次课...
数据结构课程设计报告书
课程设计说明书。设计名称 数据结构课程设计 题目 用迷宫算法对数组中的聚点数进行统计学生姓名 专业 10网络工程。班级 2班。学号 2010394201 指导教师 日期 2012年3月3日。课程设计任务书。目录。一 设计题目1 二 主要内容1 2.1设计思想1 2.2程序截图1 2.3算法流程图4 ...