收藏 分享(赏)

猴子选王问题和二叉树求解.docx

上传人:文档投稿赚钱 文档编号:1742643 上传时间:2018-08-21 格式:DOCX 页数:30 大小:286.79KB
下载 相关 举报
猴子选王问题和二叉树求解.docx_第1页
第1页 / 共30页
猴子选王问题和二叉树求解.docx_第2页
第2页 / 共30页
猴子选王问题和二叉树求解.docx_第3页
第3页 / 共30页
猴子选王问题和二叉树求解.docx_第4页
第4页 / 共30页
猴子选王问题和二叉树求解.docx_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、请输入学校名称毕业论文模板数据结构课程设计实验报告题 目 猴子选王问题和二叉树求解 学 院 数理与信息工程学院 专 业 计算机科学与技术 班 级 计科 132 学 号 201359225214、201359225205、201359225212 学生姓名 、 、 指导教师 编写日期 2015.6.25 目录一、问题描述 21.1 问题描述 21.1.1 猴子选王问题 21.1.2 二叉树问题 .31.2 基本要求 31.2.1 猴子选王问题 .31.2.2 二叉树问题 .3二、问题分析 32.1 猴子选王问题的分析 .32.1.1 需求分析 .32.1.2 过程分析 .42.2 二叉树求解问题

2、 52.2.1 需求分析 .52.2.2 过程分析 .5三、 数据结构描述 63.1 猴子选王问题 63.2 二叉树求解问题 .7四、 算法设计 74.1 猴子选王问题 74.1.1 单循环链表解决猴子选王问题 .74.1.2 顺序结构(数组)解决解决猴子选王问题 .104.2 二叉树问题的求解 11五、 详细程序清单 125.1 猴子选王问题 125.1.1 单循环链表解决猴子选王问题 .125.1.2 顺序结构(数组)解决解决猴子选王问题 .155.2 二叉树问题的求解 18六、 程序运行结果 206.1 猴子选王问题 206.1.1 单循环链表解决猴子选王问题 .206.1.2 顺序结构

3、(数组)解决解决猴子选王问题 .216.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 为整数,nn输出形式:

4、提示输入 m 只猴子,数到的数为 n,输出为大王的猴子为几号,建立一个函数来实现此功能.步骤:输入 m、n 后,进行 1n 的报数,每数到 n,则删除该猴子,直至只剩一只猴子,输出它的编号为猴子王。2.1.2 过程分析假设 m=5,n=3则过程为:第一轮:1-2-3 淘汰 3第二轮:4-5-1 淘汰 1第三轮:2-4-5 淘汰 5第四轮:2-4-2 淘汰 2由此得出:4 为猴子王!2.2 二叉树求解问题2.2.1 需求分析要求:输入:某二叉树的中序和后序序列。输出:求出其先序序列。步骤:输入后序和中序序列后,判断是否存在树,存在则输出它的先序序列。开始输入中序、后序序列求出这棵二叉树先序遍历结

5、束输出先序序列二叉树存在是否2.2.2 过程分析假设:中序为:DBEAFCG后序为:DEBFGCA则求出该树:则它的先序为:ABDECFG3、数据结构描述3.1 猴子选王问题typedef struct Lnodeint data;struct Lnode *next;linklist; /单循环链表解决猴子选王问题3.2 二叉树求解问题struct TreeNodestruct TreeNode* left;struct TreeNode* right;char elem; /树的二叉链表存储表示4、算法设计4.1 猴子选王问题4.1.1 单循环链表解决猴子选王问题算法:int monkey

6、king(int m,int n)int i,total;linklist *head,*p,*s,*q;head =(linklist *)malloc(sizeof(linklist);p = head;p-data = 1;p-next = p;for (i = 2;i data = i;s -next = p-next;p -next =s ;p = p-next; /初始化链表p = head;total = m; /保存总节点数q = head;while (total!=1)for(i=1;inext; /报数过程,p 指向要删除的节点while(q-next != p)q =

7、q-next; / q 指向 p 的节点的前驱q-next = p-next ;/删除 p 节点s = p;p = p-next;free(s);total-;printf(“the monkey king is:%dn“,p-data);free(p);return 0;4.1.2 顺序结构(数组)解决解决猴子选王问题算法:int findMonkeyKing(int m,int n)int a100;int i=1;int count=1;/记录报数的次数int total =m;for(;ielem = *(aftorder + length - 1);printf(“%c“,node-

8、elem);int rootIndex = 0;for (; rootIndex left = BinaryTree(inorder, aftorder, rootIndex);node-right = BinaryTree(inorder + rootIndex + 1, aftorder + rootIndex, length - (rootIndex + 1);return node;5、详细程序清单5.1 猴子选王问题5.1.1 单循环链表解决猴子选王问题#include#includetypedef struct Lnodeint data;struct Lnode *next;li

9、nklist;int monkeyking(int m,int n)int i,total;linklist *head,*p,*s,*q;head =(linklist *)malloc(sizeof(linklist);p = head;p-data = 1;p-next = p;for (i = 2;i data = i;s -next = p-next;p -next =s ;p = p-next; /初始化链表p = head;total = m; /保存总节点数q = head;while (total!=1)for(i=1;inext; /报数过程,p 指向要删除的节点/prin

10、tf(“【%d】 ”,p-data);while(q-next != p)q = q-next; / q 指向 p 的节点的前驱q-next = p-next ;/删除 p 节点s = p;p = p-next;free(s);total-;printf(“the monkey king is:%dn“,p-data);free(p);return 0;void main()int m,n;printf(“*WELCOME TO OUR DESIGN*n“);printf(“* MONKEY *n“);printf(“ - n“);printf(“ / n“);printf(“ C| |D n

11、“);printf(“ - / n“);printf(“ _/ n“);printf(“*n“);printf(“I KINGn“);printf(“ WANT THEn“);printf(“ TO BEn“);printf(“*n“);printf(“please input the number of m and n (mn):“);scanf_s(“%d%d“,monkeyking(m,n);system(“pause“);5.1.2 顺序结构(数组)解决解决猴子选王问题#include int findMonkeyKing(int m,int n)int a100;int i=1;in

12、t count=1;/记录报数的次数int total =m;for(;in):“);scanf_s(“%d%d“,printf(“the monkey king is :%dn“,findMonkeyKing(m,n);system(“pause“); 5.2 二叉树问题的求解#include#include #includetypedef struct TreeNodestruct TreeNode* left;struct TreeNode* right;char elem;TreeNode;TreeNode* BinaryTree(char* inorder, char* aftord

13、er, int length)if (length = 0)return NULL;TreeNode* node;node = (TreeNode*) malloc (sizeof(TreeNode);node-elem = *(aftorder + length - 1);printf(“%c“, node-elem);int rootIndex = 0;for (; rootIndex left = BinaryTree(inorder, aftorder, rootIndex);node-right = BinaryTree(inorder + rootIndex + 1, aftord

14、er + rootIndex, length - (rootIndex + 1);return node;int main(int argc, char* argv)char* post = “DEBFGCA“;char* mid = “DBEAFCG“;int length = strlen(mid);printf(“*WELCOME TO OUR DESIGN*n“);printf(“* BITREE *n“);printf(“ An“);printf(“ / n“);printf(“ B Cn“);printf(“ / / n“);printf(“ D E F Gn“);printf(“

15、*n“);printf(“中序序列为:“);printf(“%sn“, mid);printf(“后序序列为:“);printf(“%sn“, post);printf(“先序序列为:“);BinaryTree(mid, post, length);printf(“n“);system(“pause“);return 0;程序运行结果六、程序运行结果6.1 猴子选王问题6.1.1 单循环链表解决猴子选王问题6.1.2 顺序结构(数组)解决解决猴子选王问题6.2 二叉树问题的求解七、分析与体会短短一周的时间过去了,而我们的课程设计也接近尾声。这期间,有对自己学过的知识的一个回顾,也有新的知识的补

16、充。当有自己不懂时就翻阅资料,寻求解答;当有疑问的时候,有成员之间的讨论,老师的指导。初拿到该题目时,我们小组感觉无从下手,不知道该用什么样的数据类型,用什么样的储存结构,怎么实现题目中要求的功能。后来,通过从图书馆借的参考书和网上查到的资料,再经过小组成员的分析,思绪渐渐明朗起来,猴子选王问题我们采用单循环链表还有数组方法来实现;二叉树选择二叉树链表来实现。就根据这样的思路编程,我们初步将程序编译调试,过程中有很多问题但是我们组员在不对的调试中,发现问题,解决问题,终于把整个问题都解决了,把整个程序都编出来了。虽然,我们的课程设计已经完成,但是,对数据结构的学习似乎才是开始,以后要学习的还很多很多,前面要走的路还很远很远。而我们也要整装待发,在摸索中前进,在前进中不断摸索,让自己的路走得更远更长!八、参考资料1朱蓉,数据结构实验指导书2严蔚敏,吴伟民,数据结构(C 语言版).北京:清华大学出版社,19973严蔚敏,吴伟民,数据结构题集(C 语言版).北京:清华大学出版社,1997

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

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报