数据结构课程设计报告(猴子选大王)
猴子选大王 数据结构课程设计
i am the king of monkeies
问题描述
一群猴子都有编号,编号是1,2,„„m,这群猴
子按照顺序围坐成一圈,从第一个开始数,每数到第
n个,该猴子就要离开此圈,这样依次数下来,直到 圈中只剩下最后一只猴子,则该猴子为大王。
我们选择用一个循环链表来完成
该设计,设计一个猴子的结构体,
直至剩下最 后一个链表
单链表的删除
为了删除第i个猴子Mi,必须找到猴子的存储地址。 该存储地址是在其直接前趋结点Mi-1的next域中,因 此,必须首先找到Mi-1的存储位置p,然后令p– 图解 >next指向Mi的直接后继结点,即把Mi从中赶出。
算法设计与实现
1. 对每一个猴子进行编号 2. 3. 每数到n便删除该猴子,当循环单链表只剩一个时, 主函数 r=q=(listnode *)malloc(sizeof(listnode)); int main() 输出该编号 for(i=1;i<=n-1;i++) for(i=1;i<n;i++){ { { p=(listnode*)malloc(sizeof(listnode)); linklist r; for(j=1;j<=k-1;j++) p=p->next; q->data=i; int n,k; q=p->next; q->next=p; linklist initring(int n,linklist r); p->next=q->next; q=p; linklist deletedeath(int n,int k,linklist r); if(i % 10==0) } free(q); void outring(int n,linklist r); } p->data=n; printf("请输入猴子总数m:"); printf("\n"); p->next=r; scanf("%d",&n); r=p;return r; } r=p; printf("请输入n:"); void outring(int n,linklist r) scanf("%d",&k); { int i; r=initring(n,r); listnode *p; r=deletedeath(n,k,r); p=r; printf("猴子大王:"); outring(n,r); printf("%4d\n",p->data);
猴子选大王数据结构课程设计报告内附详细注释
1.需求分析问题定义:一堆猴子都有编号,编号是1,2,3…n,这群猴子(n个)按照1-n的顺序围坐一圈,从第1个开始数,每数到第m个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
m,n键盘输入,且m<n,输出为大王的猴子的号数。
问题分析:根据任务描述可知,编号是1,2,3…n的一群猴子按照1-n的顺序围坐一圈,因此可以用指针指向数组的方法给数组赋值,输入n值和m值,为保证m<n,用一个while( )#include<stdio.h>#include<stdlib.h> //使用calloc()函数void FindKing_pointer(int,int,int*);//移动指针法找大王void Initialize(int,int*);//初始化数组整形和指针型int main(){int m,n,*ptr;printf("输入猴子数与出局时报的数\n");scanf("%d %d",&n,&m);while(n<m){printf("输入数据有误,请重新输入!\n"); printf("输入猴子数与出局时报的数\n"); scanf("%d %d",&n,&m);}ptr=(int *)calloc(n,sizeof(int));Initialize(n,ptr);FindKing_pointer(m,n,ptr);free(ptr);return 0;if(ptr2==ptr+n)ptr2=ptr;/*指针所指元素不为0时计数器加1.*/if(*ptr2!=0)i++;/*计数器数到m时将指针所指元素设为0*/ if(i==m){*ptr2=i=0;count--; //用于终止循环}}/*最后不为0的元素的值即为大王的编号*/for(ptr2=ptr;;ptr2++){if(*ptr2!=0){printf("第%d个猴子是大王\n",*ptr2);break;}}}/*思想是猴子围坐一圈,有N个猴子,开始数数,数到第M个猴子,该猴子就出列,然后再从该猴子的下一个猴子开始数到第M个猴子,直到只剩下一个猴子时。
猴子选大王课程设计说明书
数学与计算机学院课程设计说明书课程名称: 数据结构课程设计课程代码: 6014389题目: 猴子选大王年级/专业/班: 2010级软件工程2班学生姓名: 蒋童学号:开始时间: 2011 年11 月9 日完成时间: 2011 年12 月30 日课程设计成绩:指导教师签名:年月日数据结构课程设计任务书学院名称:数学与计算机学院课程代码:__ 6014389______ 专业:软件工程年级:2班一、设计题目猴子选大王二、主要内容一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
三、具体要求及应提交的材料要求:使用数组和循环链表等两种以上的存储方式来做输入数据:输入m,n m,n 为整数,n<m输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能用C/C++语言编程实现上述内容,对每个问题写出一个算法实现,并按数学与计算机学院对课程设计说明书规范化要求,写出课程设计说明书,并提交下列材料:1)课程设计说明书打印稿一份2)课程设计说明书电子稿一份;3)源程序电子文档一份。
四、主要技术路线提示可采用数组、链表数据结构实现。
在此基础上用C/C++实现其操作。
五、进度安排按教学计划规定,数据结构课程设计为2周,其进度及时间大致分配如下:六、推荐参考资料[1] 严蔚敏,吴伟民.数据结构.清华大学出版社出版。
[2] 严蔚敏,吴伟民. 数据结构题集(C语言版) .清华大学出版社.2003年5月。
[3] 唐策善,李龙澎.数据结构(作C语言描述) .高等教育出版社.2001年9月[4] 朱战立.数据结构(C++语言描述)(第二版本).高等出版社出版.2004年4月[5] 胡学钢.数据结构(C语言版) .高等教育出版社.2004年8月[6] 徐孝凯等著.数据结构(C语言描述).清华大学出版社.2004指导教师签名日期年月日系主任审核日期年月日目录摘要................................. 错误!未定义书签。
数据结构上机实验程序--猴子选大王
#include<stdio.h>#include<stdlib.h>struct Monkeyking{int data;struct Monkeyking *next;};void main(){struct Monkeyking *head, *s, *q, *t,*p,*h;int n, k, count=0, i,j;printf("输入猴子总数:");scanf("%d",&k);printf("\n");printf("输入报号起始猴子编号:");scanf("%d",&j);printf("\n");printf("输入报号间隔数:");scanf("%d",&n);printf("\n");for(i=0; i<k; i++){s=(struct Monkeyking *)malloc(sizeof(struct Monkeyking)); s->data=i+1;s->next=NULL;if(i==0){head=s;q=head;}else{q->next=s;q=q->next;}}//建立一个单链表q->next=head;//将单链表组成环状printf("输出猴子原始的编号:");q=head;while(q->next!=head){printf("%d ",q->data);q=q->next;}//依次输出节点的值printf("%d ",q->data);printf("\n");printf("\n");q=head;for (i=0;i<j;i++){p=q;q=q->next;}q=p;printf("输出被淘汰的猴子编号:");if (n==1){for (i=1;i<=k;i++){t=q;q=q->next;t->next=h;h=t;}for (i=1;i<=k;i++){printf("%d ",h->data);//倒序输出淘汰猴子的编号,第一个编号为大王h=h->next;}printf("\n");}else{do{count++;if(count==n-1){t=q->next;q->next=t->next;t->next=h;h=t;count=0;}q=q->next;}while(q->next!=q);q->next=h;h=q;}for(i=1;i<=k;i++){printf("%d ",h->data);//倒序输出淘汰猴子的编号,第一个编号为大王h=h->next;}}。
Res_猴子选大王2
5.4.8 实验项目5-14:猴子选大王1、实验名称:猴子选大王2、实验目的:(1)熟练使用循环控制。
(2)熟练理解和掌握二维数组存储结构的使用技巧。
3、实验任务(1)实验内容:一群猴子要选新猴王。
新猴王的选择方法是:让n只候选猴子围成一圈,从某位置起顺序编号为1~n号。
从第1号开始报数(从1到3),凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。
如此不断循环,最后剩下的一只猴子就选为猴王。
请问是原来第几号猴子当选猴王?(2)实验要求:输入一个正整数n(n<=100),写一个程序来模拟这个过程,输出猴王的序号。
测试用例:4、实验要点分析(1)问题分析:用循环的方法模拟选猴王的过程。
一种简单的方法是对n只猴子用1~n 编号,编号存放在大小为n的一维整数数组中,若某编号的猴子要退出圈子,则把其编号改为-1。
若数组中只剩一个非-1的编号时,该编号的猴子就是大王。
开始时数组中的元素是从1到n的整数,表示都在“圈子”中,凡报到3的猴子退出圈子,即置为-1。
再依次查找下一只在“圈子”中的猴子,并重新开始报数。
这个过程进行n-1次,就只剩下一只编号不是-1的猴子了。
这种方法在寻找“下一个在圈子中的猴子”时可能会遇到很多“-1”而浪费时间。
另一种改进的方法是把n只猴子用0~n-1编号,数组的下标表示猴子的编号,数组元素的值表示相邻下一只在圈子中的猴子编号。
比如,n=5时,初始的数组M的内容如下表: 下标:0 1 2 3 4当2号猴子(报数轮到3)退出圈子时,1号猴子的下一只相邻猴子就是3号猴子了,实现时只需一个赋值M[1]=M[2](即原来2号猴子的下一只相邻猴子成了1号猴子的下一只相邻猴子)。
数组M的内容变成了下表:下标:0 1 2 3 4这样做的好处有两个,一是第i号猴子的下一只相邻猴子就是M[i],不需要用一个循环去找了;二是不用当心数组M下标的访问会越界。
(2)实现要点:1)循环控制结构。
兰州大学数据结构课程设计1
return 0; } 题目2 :字符逆转(学时:3) 从键盘读入一个字符串,把它存入一个链表(每个结点存储1个字 符),并按相反的次序将字符串输出到显示屏。 /************ni xu shu chu***********/ #include<stdio.h> #include<stdlib.h> # define LEN sizeof(struct String) struct String { struct String *last; char s; }; void main() { struct String *str,*end; char c; printf("Please enter a string:\n"); scanf("%c",&c); //输入字符串,并读取第一个字符 str=(struct String *)malloc(LEN); str->last=NULL; while (c!='\n') //将字符串存入链表中,终止条件,读 到回车的时候停止 { str->s=c; //将该字符存入节点 end=(struct String *)malloc(LEN); // 开辟一个新结点 end->last=str; //每一位字符.last指向上一位 str=end; scanf("%c",&c); //读取字符串的下一个字符 } //此时end指针指向最后一位 printf("逆序排列为:\n"); for (;end->last!=NULL;) //逆序输出 { end=end->last;
m这群猴子m个按照1m的顺序围坐一圈从第1开始数每数到第n个该猴子就要离开此圈这样依次下来直到圈中只剩下最后一只猴子则该猴子为大王
数据结构课程设计(附代码)-数据结构设计
上海应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级姓名学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力表。
3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。
知道不满足循环语句,程序再次回到菜单选择功能界面。
4、删除功能:LinkList *Delete(LinkList *head);按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。
5、插入功能:LinkList *Insert(LinkList *head);输入你想插入的位置,通过指针所指向结点的下移,找到该位置,将该新的学生记录插入到该结点,并对该结点后面的指针下移。
链表长度加一,重新存储。
(5) 程序的输入与输出描述输入:调用LinkList *create()函数,输入学生的姓名、学号、三门功课的成绩;输出:调用void print(LinkList *head)函数,输出学生的记录。
(6) 程序测试主菜单:成绩管理系统的主界面:学生成绩记录的输入:输出学生成绩记录:学生成绩记录的删除(删除学号是1101的学生记录)插入新的学生成绩记录(插入学号为1103的学生记录)(7) 尚未解决的问题或改进方向尚未解决的问题:该成绩管理系统还存在不少缺陷,而且它提供的功能也是有限的,只能实现学生成绩的输入、输出、删除、插入。
数据结构课程设计报告格式
《数据结构》课程设计报告题目猴子选大王学生姓名学号专业班级指导老师设计日期 2009年12月19日指导老师评阅意见:一、问题定义1、课程设计目的:数据结构课程设计是学习数据结构课程的一个重要环节。
能巩固和加深课堂教学内容,提高学生实际工作能力,培养科学作风,为学习后续课程和今后的系统开发奠定基础。
通过课程设计,使学生熟练掌握数据结构课程中所学的理论知识,并实际应用,通过综合运用数据结构的基本知识来解决实际问题,加强学生分析和解决问题的能力。
2、课程设计的要求:本次课程设计要求学生正确理解课题,考虑问题要细致,全面,解决问题的方法要科学合理,切合实际。
并能上机实现。
3、课程设计的意义:1、有利于基础知识的理解。
学生对计算机运行的机理等知识内容的理解比较肤浅。
如果接触了程度设计,就能真正理解,从而进一步打破计算机的神秘感。
2、有利于逻辑思维的锻炼。
程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。
即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力的培养。
3、有利于治学态度的培养。
程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。
因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。
这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼猴子选大王任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
数据结构猴子选大王2024
引言概述:数据结构猴子选大王(二)是继第一部分后的深入探讨。
本文将详细介绍猴子选大王问题的背景和相关算法,探讨不同数据结构在解决该问题时的优劣,并提出一种性能更高的改进算法。
通过对本文的阅读,读者将对数据结构在解决复杂问题中的应用有更深入的理解。
正文内容:一、背景介绍1.1问题描述:数据结构猴子选大王问题是一个经典的计算机科学问题,它描述了一群猴子按一定规则进行选举的过程。
1.2算法原理:猴子选大王问题可以通过循环链表和递归两种方法进行解决,其中循环链表是最常用的解法。
1.3算法过程:通过将猴子按一定顺序编号,然后循环一个圈,每次淘汰某一编号的猴子,直到只剩下最后一只为止,即为大王。
二、循环链表算法2.1数据结构选择:循环链表是解决猴子选大王问题的主要数据结构。
其特点是每个节点都有一个指针指向下一个节点,且最后一个节点指向第一个节点。
2.2算法流程:在循环链表中,通过不断遍历并淘汰节点,最终得到最后剩下的节点作为大王。
2.3时间复杂度分析:循环链表算法的时间复杂度为O(mn),其中m是猴子的总数,n是每次淘汰的数量。
三、改进算法3.1基于队列的改进算法:针对循环链表算法中的时间复杂度较高的问题,可以考虑采用队列的数据结构进行改进。
3.2算法优化:通过将猴子的编号依次入队,然后每次从队首取出一个猴子,再将其编号入队尾,直到只剩下一只为止。
3.3时间复杂度分析:改进算法的时间复杂度为O(m),其中m 是猴子的总数。
四、数据结构选择4.1循环链表的优势:循环链表是解决猴子选大王问题的经典数据结构之一,具有结构简单、操作灵活等优点。
4.2队列的优势:队列是改进算法中的数据结构选择,具有先进先出、操作高效等特点。
4.3不同数据结构的比较:循环链表适用于猴子选大王问题的普遍情况,而队列作为改进算法可以在处理大规模数据时提高效率。
五、总结本文详细介绍了数据结构猴子选大王(二)的相关算法和背景,在对循环链表和基于队列的改进算法进行比较后,提出了一种性能更高的改进算法。
猴子选大王 课程设计报告
目录一、需求分析 (1)1、问题描述: (1)2、基本要求: (1)3、需求分析: (1)二、概要设计 (2)三、详细设计 (3)1、循环队列 (3)2、循环链表 (4)3、伪代码 (5)4、具体函数分析及变量分析 (6)四、调试分析和测试结果 (6)五、总结 (9)六、参考文献 (10)七、附录 (11)一、需求分析1、问题描述:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
2、基本要求:输入数据:输入m,n。
m,n 为整数,n<m。
输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能。
3、需求分析:①输入数据m,n②计算出最终猴子大王的序号。
③模拟出整个过程。
④找到合适的数据结构处理这个问题。
⑤找到正确的方法解决这个问题。
二、概要设计对题意进行分析后,可以画出整个过程的流程图。
具体流程图:这个问题属于约瑟夫环问题,我们对这个题目进行具体分析:假如现在m=5,n=2,即有5只猴子,按照循环数2的方法,我们演变这个过程:第一次:1 2 3 4 5× 2号出局第二次:1 2 3 4 5×× 4号出局第三次:1 2 3 4 5××× 1号出局第四次:1 2 3 4 5×××× 5号出局最后得到猴子大王的序号是3号。
那么一般化,对于m猴子,n只猴子我们该怎么做?三、详细设计1、循环队列队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列中没有元素时,称为空队列。
仔细分析整个过程,我发现这个过程和学过的循环队列特别像,在学习循环队列的时候,如果采取数组来存储队列,那么在front端弹出元素就执行front=(front+1)%MAX,在rear端进入队列的时候就执行rear=(rear+1)%MAX,以实现绕圈的操作。
C++猴子数大王-数据结构课程设计
-- Array《数据结构》课程设计报告题目猴子选大王学生姓名学号专业班级指导老师方霞设计日期 2010.03.04指导老师评阅意见:一设计目的数据结构课程设计是学习计算机程序设计的一个重要环节。
它不仅能加强和加深数据结构所学内容,提高学生实际运用实践能力,培养实际作风,为学习计算机类后续课程和今后的计算机类系统开发奠定坚实而又牢固的基础。
通过课程设计,使学生熟练掌握数据结构课程中所学的理论知识,并实际应用,通过综合运用数据结构的基本知识来解决实际问题,加强学生分析和解决问题的能力。
二设计内容2.1 任务描述1)任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
2)要求:输入数据:输入m,n,m,n 为整数,n<m3)输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能。
2.2 存储结构采用了建立单循环链表和monkey结构体相结合的存储方式。
以下是monkey结构体的存储结构形式,其中包括了记录了猴子号码的int 型的number数据元素,和Link List型的指针next。
typedef struct monkey{int number;struct monkey *next;}Monkey,*LinkList;2.3 基本算法这个算法的主要流程为:首先通过设置一个monkey得结构体来建立单循环链表所需要参数number,next,利用主函数main来完成链表,编号,选择猴子王的算法来完成整个程序设计,这个过程中还不断的调用for循环来求得猴子王。
2.4 算法或程序模块在程序中以下代码是用来给猴子编号和数数选择是留下还是离开的:for(i=1;i<m;i++){p=(LinkList)malloc(sizeof(Monkey));q->next=p;q=p;}q->next=head;//建立单循环链表p=head;//p指向了链表头结点printf("对%d只猴子进行编号如下:\n",m);for(i=1;i<=m;i++){p->count=i;//依顺序对15只猴子进行编号printf("%d号猴子编号为:%d\n",p->count,p->count);p=p->next;}i=0;p=head;printf("\n");while(1){i++;printf("%d号猴子报数:%d\n",p->count,i);if(p->next==p)break;if(i==n){i=0;printf("%d号猴出局离开\n",p->count);printf("\n");q->next=p->next;p=q->next;}下面的代码是用主函数main来完成的,其中这个过程汇总,设计了一个单循环链表LinkList,使用了几个for循环来编号,数数出局离开来选择猴子王的。
数据结构课程设计报告猴子选大王
数据结构课程设计报告题目:猴子选大王——采用循环链表及动态存储的实现班级:计算机082班姓名:指导教师:成绩:信息工程学院2010年01 月20 日目录课程设计摘要(题目) (03)1.引言 (03)2.需求分析 (04)2.1问题分析 (04)2.2总体设计 (05)3.概要设计 (07)3.1模块分析 (07)3.1.1链表循环输入删除输出 (07)3.1.2各个函数之间的调用关系 (09)3.2函数的流程分析 (10)4.详细设计 (12)4.1函数设计 (12)4.2程序源代码 (13)5.测试结果 (16)6.设计体会 (18)7.结束语 (19)参考文献 (20)摘要(题目):猴子选大王任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m 个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:输入数据:输入m,n ;m,n 为整数(n<m)输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能1.引言随着计算机科学的迅速发展,计算机已深入到揉合社会的各个领域,它的应用已不再局限于科学计算,以解决一些数学问题,而且可以解决一些抽象化的具体问题,更多地用于控制,管理及数据处理等非数值计算的处理工作,这便为我们的日常生活提供了很多的方便,譬如说火车、飞机售票系统,学生成绩管理,商品管理系统,医院选址等实际问题。
如今程序设计的语言很多,有发展比较完善高级语言,也有最基本的低级语言,然而再好的程序设计也要有一个比较清晰的思路——算法。
为了编写好一个好程序,必须分析待处理对象的特性以及各处理对象之间的关系,于是数据结构便成为我们绝佳的选择。
数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且已成为其他理工专业的热门选修课。
猴子选王问题求解和二叉树成立——课程设计报告
数理与信息工程学院《数据结构》课程设计———————猴子选王问题求解和二叉树的成立专业运算机科学与技术班级指导教师编写日期 2021年6月24日目录一、课程设计的目的 (3)二、课程设计的要求 (3)三、相关知识 (3)四、问题的分析 (3)五、数据结构的描述 (4)六、算法的设计 (4)七、代码实现 (6)八、程序运行成功展现 (11)九、心得体会 (14)十、参考资料 (14)一、课程设计的目的课程设计是学生对课程所学知识的综合运用,它与课堂听讲、上机实验、课外练习、自学研究相辅相成,组成一个完整的课程教学体系。
《数据结构》是一门实践性强的课程,其中对算法设计和程序编写的把握尤其重要。
学生尽管能够通过与课堂教学同步的上机实验完成相关内容的练习,但却往往局限于一些功能简单、彼此之间关系独立的算法和程序。
课程设计是一种综合训练,致力于培育学生全面、灵活的算法设计思想和较高的编程能力,为尔后从事运算机开发与应用打下基础。
新世纪需要具有丰硕科学知识、独立解决实际问题、有制造能力的新型人材,这也是该课程设计的最终目的。
二、课程设计的要求一、猴子选王问题描述一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)依照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,如此依次下来,直到圈中只剩下最后一只猴子,那么该猴子为大王。
二、二叉树的成立描述已知二叉树T中结点的前序和中序遍历序列,编写算法实现构造知足上述条件的二叉树。
3、界面设计模块问题描述设计一个菜单式界面,让用户能够选择要解决的问题,同时能够退出程序。
界面要求简练明了,大方得体,便于用户的利用,同时,关于用户的错误选择能够进行有效的处置。
三、相关知识一、猴子选王求解约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人招架罗马的起义。
约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷以后,他和40名死硬的将士在周围的一个洞窟中避难。
选猴王数据结构课程设计
计科专业数据结构A课程设计选猴王作者姓名:王显衡专业、班级:计科123学号: 12422003指导教师:赵晶完成日期: 2013年11月17日大连大学Dalian University目录题目描述 (1)1、算法思想 (2)2、详细设计 (2)4 调试分析 (4)5 用户使用说明 (5)6课程设计总结 (6)参考文献 (7)题目描述任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m 的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:输入数据:输入m,n m,n 为整数,n<m输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能1、算法思想将表中最后一个结点的指针域指向头结点,整个链表形成一个环,构造循环链表‘*L’。
由此,从表中任意一个结点开始,都可以遍历全表。
再用一个for循环来实现从第1开始数,第数到第N个,该猴子就要离开此圈。
如果链表不空的话,用’a’指向开始结点,往后数到第N个结点,就把第N-1个结点与第N+1个结点链在一起,即实现了删除第N个结点。
如此反复,直到L的后继结点是它自己,即圈中只剩最后一只猴子,那么这只猴子就是大王。
2、详细设计1)、猴子的存放采用链式存储结构,利用循环链表来实现建立的,其表示方法是递归定义的:typedef struct Mnode{ int data;struct Mnode *next;}Mnode;根据题目要求,要让这M只猴子顺序围坐一圈,那就得用循环链表,只须将单循环链表的尾指针的NEXT域指向头指针。
它的判空条件是L=L->next =NULL;(非空表)(空表)单循环链表2)、函数void hzxdw(M,N)读取数据M、N后,然后就根据N的值,用for循环数猴子结点用’a’指向开始结点,往后数到第N个结点,就把第N-1个结点与第N+1个结点链在一起,即实现了删除第N个结点。
用C编写程序猴子选大王
湖南人文科技学院计算机系课程设计说明书课程名称: 数据结构课程代码:题目: 猴子选大王年级/专业/班: 06级计算机科学与技术专业一班学生姓名:学号:06408109 06408102 06408107 0640812206408103指导教师: 刘刚常开题时间: 2008 年 6 月16 日完成时间: 2008 年 6 月29 日目录摘要 (3)一、引言 (4)二、设计目的与任务 (4)三、设计方案 (5)1、总体设计 (5)2、详细设计 (8)3、程序清单 (14)4、程序调试与体会 (22)5、运行结果 (23)四、结论 (24)五、致谢 (24)六、参考文献 (25)摘要本文首先介绍顺序表和链表并作以比较,我们分别使用循环队列和循环链表来解决猴子选大王的问题,程序使用了C语言编写,有很少一部分函数是用C++编写的,有比较详细的中文注释并在VC++下调试运行通过。
整个程序使用中文界面,并有相应的提示信息,便于操作和程序运行。
关键词:循环队列;循环链表;存储结构AbstractThis paper details the difference of sequence list and linklist.We respectively use queue and circular queue and circular linked list to solve the seek elected king of the monkey problem . The procedure write with C language ,a very small part function is used by the C + +,and has chinese explanatory note.What’s more,it was debugged in VC++ debugger and run very well.The whole procedure,with Chinese interface and thecorresponding hints,is convenient to run and easy to be operated.Keywords : circular queue;circular linked list ;storage structure《数据结构》课程设计——猴子选大王一、引言数据结构是一门非常重要的基础学科,但是实验内容大都不能很好的和实际应用结合起来。
数据结构课程设计报告(猴子选大王)
熟练掌握数据结构这门课程,掌握经性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用。
进一步熟悉抽象数据类型的定义和实现、如何利用数组的动态分酚实现顺序结构、继承的实现方式。
学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、想念结构及基相应的算法并初步掌握算法的时间分析和空间分析的技术。
4、主要任务
现在需要用数据结构(Java语言)解决“猴子选大王”的问题,具体问题如下:
一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求解决问题的程序必须满足以下条件:
1、输入数据:输入m,n为整数
2、输出形式:中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能。
3、使用循环单链表实现。
二、正文(课程设计的主要容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。)
}
}
三、结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。)
本次课程设计在整整一周的时间得以完成,全部容主要包括:目录,课题设计背景,详细设计,设计结果及分析等方面的容,主要通过上网收集资料,查找参考书目,了解图书管理的设计背景,明确设计方向和容,在此基础上形成了该课程设计的的基础框架。再进行源代码的创作以及整合,并及时上级进行调试,保证代码的有效性。具体容在程序设计各章节均有体现。
数据结构猴子选大王课程设计
《数据结构》课程设计题目:猴子选大王一、需求分析:猴子选大王是一个很古老经典的题目,融知识性、娱乐性与一体,能让人产生较大的兴趣,因此,编写程序实现之是意见很有意思的事情。
猴子选大王的问题可以归结为筛选和排序的问题,筛选主要是从一群猴子中,比如M 个中每次选出一只猴子,该猴子离开;排序主要是第N只猴子离开后,剩下的猴子要重新编号,继续上面的过程,知道选出猴子大王。
为了增强与用户的交互,程序需要一个比较好的操作界面,用户在其中输入猴子总数M 和被淘汰猴子数目(游戏规则数字)N,输入要符合要求,即M>N,否则要提示错误信息;在点了确定以后要弹出信息提示对话框,告知使用者猴子大王的编号。
二、概要设计:1.程序中使用的存储结构:Node结构体struct node{int num;struct node *link;} node;结构体指针变量node *head,*p,*q;2.由于本题数据元素的个数不可预知,同时对于报完一次之后对于下一次的报数,由于已经排除了一部分猴子,猴子的顺序被打乱,所以使用链表。
链表是动态的,可以在需要的时候增长和减少其长度,而静态数据结构数组是在编译时分派内存的,其大小是不可改变的,而且会出现内存浪费的情况。
我认为单循环链表能较好的解决问题,在建立循环链表时,因为链表的大小由输入决定,因此与匹配的结点数也是变化的,所以要进行动态内存分配。
假设猴子的个数是n,m是要淘汰的编号,那么建立一个n长的链表,链表最后一个元素的next指针指向第一个元素,这样就形成一个循环链表,而链表的数据域储存的就是猴子的编号。
3.整体流程图如下:开始输入M的值输入N的值M > N提示输入错误信息要求重新输入输出猴子大王的编号结束三、详细设计:1.程序首先定义一个结构体如下,其中num用来指示猴子的编号;结构体类型的指针link放在链表中操作;以及一个结构体变量node;struct node{int num;struct node *next;};2.用链表实现课题功能、程序中的异常处理主要放在“确定”事件响应中实现:typedef struct node NODE;NODE *create_link_list(int m){int i;NODE *head, *p, *q;//if (m==0) return NULL;head = (NODE *) malloc(sizeof(NODE));p = head;for (i=1; i<m; i++){p->num=i;q=(NODE *)malloc(sizeof(NODE));p->next=q;p=q;}p->num=m;p->next=head;return (head);}NODE *select_king(NODE **head,int m,int n){NODE *p,*q,*u;int i,d;p=*head;// printf("The header of the list is %d\n",p->num); //指向创建动态链的表头for(i=m;i>1;i--){// printf("Now,the number of monkey is %d\n",i); //检测当前还有多少只猴子for(d=1;d<n;d++){q=p;p=q->next;// printf("Monkey %d\n",q->num); //显示此次参与循环的猴子的编号}u=p->next;q->next=p->next;free(p);p=u;// printf("the next number is %d\n",p->num); //显示下一次循环中的第一个猴子编号}return(p); //容易出错点,长返回值不能清楚}3.该程序的主程序如下:void main(){int a,b;NODE *my_head,*k;printf("请输入猴子个数:\n");scanf("%d",&a);printf("请输入游戏规则中的数字:\n");scanf("%d",&b);if(a<1||b<1)printf("您输入的数字超出了规定的范围!\n");else if(b>=a)printf("输入游戏中的数字只能小于猴子个数!\n");else{my_head=create_link_list(a);k=select_king(&my_head,a,b);printf("按照这种规则,猴王的编号是%d\n",k->num);}}四、调试分析:1.程序运行将会出现如下的界面:2.程序输入数据运行后又将会出现如下的界面:2.测试数据3.结果分析通过以上数据对程序的测试分析可知,本程序很好地完成了题目的要求,并且增加了许多有趣的功能,对意外情况也处理得比较到位。
funcode实验报告范例
源代码
在Main.cpp文件中
//----------------------------------------------------------------------------// //----------------------------------------------------------------------------#include "CommonAPI.h" #include<stdio.h> #include<time.h> float g_fDelayTime; int int int int int int int g_iMonkeys[6] = {1,2,3,4,5,6}; g_iNumMokeys=6; g_iNumLoseMonkeys=0; g_iMoveMonkey = 0; g_iChooseMonkey; g_flocation[6]; g_iGameState=0;
x = -40+i*16; y = -3; dSetSpritePosition(szName,x,y); g_flocation[i] = x; } // 引擎主循环,处理屏幕图像刷新等工作 while( dEngineMainLoop() ) { // 获取两次调用之间的时间差,传递给游戏逻辑处理 float fTimeDelta = dGetTimeDelta(); if(g_iMoveMonkey > 0) { g_fDelayTime -= fTimeDelta; if(g_fDelayTime<0) { g_fDelayTime = 1; char *szName dMakeSpriteName("monkey",g_iMonkeys[g_iChooseMonkey]); dSetSpritePosition(szName, g_flocation[g_iChooseMonkey],-3); g_iChooseMonkey++; g_iMoveMonkey--; } } else if(g_iNumMokeys > 1 && g_iGameState != 0) { g_iGameState = 1; } else if(g_iGameState != 0) { g_iGameState = 0; dSetSpriteVisible("start",true); }
课程设计报告 数据结构
课程设计报告课程名称:数据结构算法指导教师:高迎梅班级:12级软件二班学号:12000307姓名:赵国超成绩:猴子选大王一、需求分析需要编写一个程序代码,在一群猴子中选出一个大王,假设有m个猴子,选的方法为:给这些猴子依次编号1,2,3……m,设定一个基数n,并让这些猴子在一起,从第一只开始从1数数,数到n的猴子,将出局,没有资格继续评选大王,剩下的猴子继续从1开始数,数到n的再退出,一直到只剩下一只猴子的时候为止,剩下的这只猴子就是猴群中的大王,系统将自动输出成为大王的猴子的编号。
猴子的个数m和要数的基数n都需要手动输入,并且要保证n<m。
二、概要设计三、详细设计#include<iostream.h>void main(){int m,n,start,rest,k,a[100];cout<<"请输入m,n:"<<endl;cin>>m>>n;//表示有m只猴子,n表示要数的数if(n>m){cout<<"输入错误,必须重新输入:"<<endl;cin>>m>>n;}for(int i=0;i<m;i++){a[i]=1;}start=0;//标记当前该从数组的第几个猴子开始数rest=m;//标记当前剩余的猴子数while(rest>1){//以下表示找到当前该出局的猴子k=n;while(k>0){if(a[start%m]==1) {k--;}if(k!=0) start++;}a[start%m]=0;//将找到的猴子弄出局rest--;//猴子剩余数-1}//给出大王猴子的编号for(i=0;i<m;i++)if(a[i]==1){cout<<"大王是"<<i+1<<"号猴子"<<endl;break;}}四、调试分析程序运行之后,按提示输入猴子的数量m,和要数的基数n,n必须小于m,系统会显示大王是几号猴子。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4、主要任务
现在需要用数据结构(Java语言)解决“猴子选大王”的问题,具体问题如下:
一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求解决问题的程序必须满足以下条件:
4号猴子:4 4号猴子报:1
5号猴子:5 5号猴子报:2
6号猴子:6 6号猴子报:3 6号猴被淘汰
7号猴子:7 7号猴子报:1
8号猴子:8 8号猴子报:2
1号猴子报:3 1号猴被淘汰
2号猴子报:1
4号猴子报:2
5号猴子报:3 5号猴被淘汰
7号猴子报:1
8号猴子报:2
2号猴子报:3 2号猴被淘汰
4号猴子报:1
for(int i=0;i<m;i++){
list.add(i);//将元素添加到list中
}
int n0 = 0;//表示当前报数的人
while(true){
if(list.size()==1) break;
for(int j=0;j<n-1;j++){
n0++;
if(n0 == list.size()) n0=0;
7号猴子报:2
8号猴子报:3 8号猴被淘汰
4号猴子报:1
7号猴子报:2
4号猴子报:3 4号猴被淘汰
7号猴子报:1
胜出:7号猴子Press any key to continue
下一组数据:m = 30,n = 2;
运行结果如下:
得到了预期结果
6:程序源代码
package com.bluedot.bfxy;
}
list.remove(n0);//删除
if(n0 == list.size()ቤተ መጻሕፍቲ ባይዱ n0=0;
}
System.out.println("按照+"+m+"个猴子,数"+n+"个数的方法,输出为大王的猴子是"+(list.get(0)+1)+"号");//
}else{
System.out.println("输入错误,请重新输入。");
操作系统:Windows XP/Win7
开发工具包:JDK Version1.6.14 MyEclipse 8.5
分辨率:最佳效果1024*768像素
5、提供测试结果:
定义n=8, m=3,测试结果如下:
对猴子进行编号!
1号猴子:1 1号猴子报:1
2号猴子:2 2号猴子报:2
3号猴子:3 3号猴子报:3 3号猴被淘汰
4、开发及运行环境
课程设计使用Java语言工具,Java语言作为一种面向对象的程序设计语言,Java语言发展迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件。用Java语言加上一些jsp、php语言子程序,就更能显示Java语言的优势了,像PC- DOS、WORDSTAR等就是用这种方法编写的。
其次,课程设计的主要内容和目的是解决实际问题,同时运用所学的知识。这是我认识到了将知识活学活用的重要性。以往的我们只是简简单单的将书本上的知识以模板的形式刻入脑袋中,而在面对实际问题时却往往不知所措,这是理论泛滥带来的直接后果。这次的实践,让我将上学期所学的Java语言和本学期所学的数据结构在实际的操作运用中进一步巩固,对于那些没有学透的知识,如,函数调用,结构体等,在不停摸索,商讨的过程中最终将它们一一解决,同时也新增了许多没有学到过的内容。
北京化工大学北方学院
课程设计报告
课程名称数据结构课程设计
设计题目猴子选大王
专业、班级软件工程0803班
学号
姓名
指导教师
设计时间2011/10/2—2011/10/10
2011年10月10日
一、引言(简要说明设计题目的目的、意义、内容、主要任务等)
1、目的
(1)训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
1、实验内容:
M只猴子要选大王,选举办法如下:所有猴子按1,2……n编号围成一圈,从第一号开始顺序1,2……m,凡是报m号的退出圈外,如此循环报数直到圈内只剩一只猴子时这只猴子就是大王。
2、实验要求:
(1)熟练设计链表并实现插入、删除、遍历等接口;
(2)设计出简单界面,实现用户参数输入和结果输出;
(3)设计函数,实现循环删除第N个猴子,剩下的最后一个是大王.
2、意义
熟练掌握数据结构这门课程,掌握经性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用。
进一步熟悉抽象数据类型的定义和实现、如何利用数组的动态分酚实现顺序结构、继承的实现方式。
学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、想念结构及基相应的算法并初步掌握算法的时间分析和空间分析的技术。
基本掌握程序设计的基本思路和方法。
利用所学的基本知识和技能,解决简单的程序设计问题各算法描述
培养我们的数据抽象能力。利用单向循环链表模拟此过程,输出选出的大王编号。通过本课程设计,可加深我们对链表的了解,对今后的学习有很大帮助。
3、内容
全程序以数据结构(Java语言)中的循环单链表为主要的设计支柱,利用了Java语言简洁紧凑、灵活方便,语法限制不太严格,程序设计自由度大,生成目标代码质量高,程序执行效率高等方面的优点。循环单链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环,基于这样的特点,它适合处理具有环形结构的数据元素序列。
}
}
}
三、结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。)
本次课程设计在整整一周的时间内得以完成,全部内容主要包括:目录,课题设计背景,详细设计,设计结果及分析等方面的内容,主要通过上网收集资料,查找参考书目,了解图书管理的设计背景,明确设计方向和内容,在此基础上形成了该课程设计的的基础框架。再进行源代码的创作以及整合,并及时上级进行调试,保证代码的有效性。具体内容在程序设计各章节均有体现。
常用的Java语言IDE(集成开发环境)有MyEclipse、Eclipse、Emacx、JCreator、JBulider等等……
对于一个初学者,MyEclipse、Eclipse是一个比较好的软件。界面友好,功能强大,调试也很方便
硬件平台:
CPU:P4 1.8GHZ
内存:256MB以上
软件平台:
最后,对于我来说,独立完成这项课程设计是十分困难的,在学习和复习知识的过程中,难免要请教同学老师,他们的热心,让我感受到了团队的力量和团队的温暖,使我能顺利的完成任务。
课程设计的结束并不代表着学习的结束。这次的设计,把我带入到了一个全新的不曾接触过的领域,让我在以往只是注重操作的基础上,更多的思考到了,这是如何实现的,运用我所学到的知识是不是可以同样做出这样的网站,实现不一样的操作,达到同样的效果?我似乎有所领悟了,学习的本质不是让你牢牢的掌握一个知识,而是让你掌握一种方法,一种思想。同时,我知识的局限是毋庸置疑的,在纵多高级语言中,如,C++,JAVA,C#,java语言编程是我目前唯一能做到的,并且还做得很不完善,所以在以后的学习中一定要抓紧现在的大好时光扩充自己的知识储备,掌握更多的方法,为将来实现更多领域功能所用!同时本次课程设计让我学习知识的同时,也锻炼了自己面对新问题时的抗压能力,直面困难,不抛弃不放弃,坚持到底!在以后的学习和生活中,我将发扬这些优点,劈荆斩浪,挑战自我,一步一步往前走。
3、程序的设计思想:
(1)问题分析:“猴子选大王”问题是约瑟夫环问题的一个特例。由于本题目的数据元素个数不可知,所以可使用链表来动态的分配内存空间。而该问题又是一个不断的循环问题所以用循环链表来实现。
(2)总体设计:首先生成一个空链表,并给n个结点分配空间,让单链表的表尾指针指向头结点则生成一个带有n个结点的循环单链表。再给每只猴子建立顺序的编号。现从第一个结点开始报数,依次顺序查找出报数为m的待出列的结点(猴子)通过remove()删除该结点后继续运行。最后list.size()==1时停止运行,得到的结点即为猴子选出大王的编号。
1、输入数据:输入m,n为整数
2、输出形式:中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能。
3、使用循环单链表实现。
二、正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;