猴子选王问题和二叉树求解论文Word格式.docx

上传人:b****5 文档编号:20433128 上传时间:2023-01-22 格式:DOCX 页数:19 大小:206.85KB
下载 相关 举报
猴子选王问题和二叉树求解论文Word格式.docx_第1页
第1页 / 共19页
猴子选王问题和二叉树求解论文Word格式.docx_第2页
第2页 / 共19页
猴子选王问题和二叉树求解论文Word格式.docx_第3页
第3页 / 共19页
猴子选王问题和二叉树求解论文Word格式.docx_第4页
第4页 / 共19页
猴子选王问题和二叉树求解论文Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

猴子选王问题和二叉树求解论文Word格式.docx

《猴子选王问题和二叉树求解论文Word格式.docx》由会员分享,可在线阅读,更多相关《猴子选王问题和二叉树求解论文Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

猴子选王问题和二叉树求解论文Word格式.docx

五、详细程序清单12

5.1猴子选王问题12

5.1.1单循环链表解决猴子选王问题12

5.1.2顺序结构(数组)解决解决猴子选王问题15

5.2二叉树问题的求解18

六、程序运行结果20

6.1猴子选王问题20

6.1.1单循环链表解决猴子选王问题20

6.1.2顺序结构(数组)解决解决猴子选王问题21

6.2二叉树问题的求解22

七、分析与体会23

一、问题描述

1.1问题描述

1.1.1猴子选王问题

一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

1.1.2二叉树问题

已知二叉树T中结点的中序和后序遍历序列,编写算法实现构造满足上述条件的二叉树。

1.2基本要求

1.2.1猴子选王问题

(1)利用单循环链表作为存储结构模拟此过程;

(2)输入数据:

输入m,n,m,n为整数,n<

m;

(3)输出形式:

中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能。

【选做内容】

(1)添加在顺序结构上实现的部分;

(2)界面设计的优化。

1.2.2二叉树问题

(1)假设二叉树T的结点值是字符。

(2)建立的二叉树以二叉链表的存储结构进行存储

(3)输出二叉树的先序遍历序列。

二、问题分析

2.1猴子选王问题的分析

2.1.1需求分析

要求:

输入数据:

输入整数m、n,m>

n

输出形式:

提示输入m只猴子,数到的数为n,输出为大王的猴子为几号,建立一个函数来实现此功能.

步骤:

输入m、n后,进行1—n的报数,每数到n,则删除该猴子,直至只剩一只猴子,输出它的编号为猴子王。

2.1.2过程分析

假设m=5,n=3

则过程为:

第一轮:

1->

2->

3淘汰3

第二轮:

4->

5->

1淘汰1

第三轮:

5淘汰5

第四轮:

2淘汰2

由此得出:

4为猴子王!

2.2二叉树求解问题

2.2.1需求分析

输入:

某二叉树的中序和后序序列。

输出:

求出其先序序列。

步骤:

输入后序和中序序列后,判断是否存在树,存在则输出它的先序序列。

2.2.2过程分析

假设:

中序为:

DBEAFCG

后序为:

DEBFGCA

则求出该树:

则它的先序为:

ABDECFG

3、数据结构描述

3.1猴子选王问题

typedefstructLnode{

intdata;

structLnode*next;

}linklist;

//单循环链表解决猴子选王问题

3.2二叉树求解问题

structTreeNode

{

structTreeNode*left;

structTreeNode*right;

charelem;

};

//树的二叉链表存储表示

4、算法设计

4.1猴子选王问题

4.1.1单循环链表解决猴子选王问题

算法:

intmonkeyking(intm,intn){

inti,total;

linklist*head,*p,*s,*q;

head=(linklist*)malloc(sizeof(linklist));

p=head;

p->

data=1;

next=p;

for(i=2;

i<

=m;

i++){

s=(linklist*)malloc(sizeof(linklist));

s->

data=i;

s->

next=p->

next;

p->

next=s;

p=p->

}//初始化链表

total=m;

//保存总节点数

q=head;

while(total!

=1){

for(i=1;

i<

n;

p=p->

//报数过程,p指向要删除的节点

}

while(q->

next!

=p){

q=q->

//q指向p的节点的前驱

q->

next;

//删除p节点

s=p;

free(s);

total--;

}

printf("

themonkeykingis:

%d\n"

p->

data);

free(p);

return0;

}

4.1.2顺序结构(数组)解决解决猴子选王问题

intfindMonkeyKing(intm,intn){

inta[100];

inti=1;

intcount=1;

//记录报数的次数

inttotal=m;

for(;

i++){//将猴子按从1到m编号

a[i-1]=i;

}

while(m!

if(count<

n){

if(a[i]!

=0){

count++;

i++;

i=i%total;

}

else

if(count=n){

a[i]=0;

m--;

i++;

i=i%total;

count=1;

returni;

4.2二叉树问题的求解

TreeNode*BinaryTree(char*inorder,char*aftorder,intlength)

if(length==0)

{

returnNULL;

TreeNode*node=newTreeNode;

node->

elem=*(aftorder+length-1);

%c"

node->

elem);

introotIndex=0;

for(;

rootIndex<

length;

rootIndex++)

if(inorder[rootIndex]==*(aftorder+length-1))

break;

left=BinaryTree(inorder,aftorder,rootIndex);

right=BinaryTree(inorder+rootIndex+1,aftorder+rootIndex,length-(rootIndex+1));

returnnode;

5、详细程序清单

5.1猴子选王问题

5.1.1单循环链表解决猴子选王问题

#include<

stdio.h>

malloc.h>

typedefstructLnode{

intmonkeyking(intm,intn){

//printf(“【%d】”,p->

while(q->

voidmain(){

intm,n;

********WELCOMETOOURDESIGN********\n"

);

*************MONKEY*************\n"

-------\n"

/^^\\\n"

C|@@|D\n"

\\--/\n"

\\_____/\n"

**************************************\n"

IKING\n"

WANTTHE\n"

TOBE\n"

pleaseinputthenumberofmandn(m>

n):

"

scanf_s("

%d%d"

&

m,&

n);

monkeyking(m,n);

system("

pause"

5.1.2顺序结构(数组)解决解决猴子选王问题

intfindMonkeyKing(intm,intn){

voidmain()

{

themonkeykingis:

findMonkeyKing(m,n));

}

5.2二叉树问题的求解

#include<

string>

typedefstructTreeNode

}TreeNode;

TreeNode*node;

node=(TreeNode*)malloc(sizeof(TreeNode));

node->

intmain(intargc,char**argv)

char*post="

DEBFGCA"

;

char*mid="

DBEAFCG"

intlength=strlen(mid);

*************BITREE*************\n"

A\n"

/\\\n"

BC\n"

/\\/\\\n"

DEFG\n"

中序序列为:

%s\n"

mid);

后序序列为:

post);

先序序列为:

BinaryTree(mid,post,length);

\n"

}程序运行结果

六、程序运行结果

6.1猴子选王问题

6.1.1单循环链表解决猴子选王问题

6.1.2顺序结构(数组)解决解决猴子选王问题

6.2二叉树问题的求解

七、分析与体会

短短一周的时间过去了,而我们的课程设计也接近尾声。

这期间,有对自己学过的知识的一个回顾,也有新的知识的补充。

当有自己不懂时就翻阅资料,寻求解答;

当有疑问的时候,有成员之间的讨论,老师的指导。

初拿到该题目时,我们小组感觉无从下手,

不知道该用什么样的数据类型,用什么样的储存结构,怎么实现题目中要求的功能。

后来,通过从图书馆借的参考书和网上查到的资料,再经过小组成员的分析,思绪渐渐明朗起来,猴子选王问题我们采用单循环链表还有数组方法来实现;

二叉树选择二叉树链表来实现。

就根据这样的思路编程,我们初步将程序编译调试,过程中有很多问题但是我们组员在不对的调试中,发现问题,解决问题,终于把整个问题都解决了,把整个程序都编出来了。

虽然,我们的课程设计已经完成,但是,对数据结构的学习似乎才是开始,以后要学习的还很多很多,前面要走的路还很远很远。

而我们也要整装待发,在摸索中前进,在前进中不断摸索,让自己的路走得更远更长!

八、参考资料

[1]朱蓉,数据结构实验指导书

[2]严蔚敏,吴伟民,数据结构(C语言版).北京:

清华大学出版社,1997

[3]严蔚敏,吴伟民,数据结构题集(C语言版).北京:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

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

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