数据结构大作业 猴子吃桃问题.docx
- 文档编号:6472630
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:18
- 大小:172.12KB
数据结构大作业 猴子吃桃问题.docx
《数据结构大作业 猴子吃桃问题.docx》由会员分享,可在线阅读,更多相关《数据结构大作业 猴子吃桃问题.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构大作业猴子吃桃问题
课程设计说明书
课程名称:
数据结构
设计题目:
猴子吃桃问题
学院:
计算机科学与信息工程学院
学生姓名:
学生学号:
专业班级:
软件工程
指导教师:
宋强
2014年06月15日
课程设计任务书
设计题目
猴子吃桃问题
学生姓名
班级
软件工程
设计要求:
基本要求
(1)采用数组数据结构实现上述求解
(2)采用链式数据结构实现上述求解
(3)采用递归实现上述求解
(4)采用队列实现上述求解
学生应完成的工作:
参考文献阅读:
参考文献
[1]严蔚敏等编著.数据结构(C语言版).北京:
清华大学出版社,2003
[2]李春葆,金晶编著.数据结构教程(C语言版).北京:
清华大学出版社,2006
[3]朱立华等编著.面向对象程序设计及C++.北京:
人民邮电出版社,2008
工作计划:
任务下达日期:
2014年06月01日
任务完成日期:
2014年06月15日
学生(签名):
猴子吃桃问题
摘要:
数据结构是一门结合C++知识的重要课程,因此我们要学会用平时课本的知识运用到我们的现实生活当中,这样才能让我们所学的知识更加深刻。
分析了猴子吃桃子问题的实质,得到了其数学模型ni-1=2*(ni+1)(0
,接下来就是其需求分析和概要设计,大致的制定出其实现方案以及其系统结构,然后就是利用掌握的语言C/C++编程实现这一生活问题,该软件用了几种不同的方法解答出了所需要的答案。
猴子吃桃的问题就是一个例子,我们可以运用简单的四种解法进行解题,即数组求值解法,链表求值解法,递归求值解法和队列求值法,通过分析四种解法,根据各种解法的功能,从而我们得到最合适的求法。
关键词:
猴子吃桃子;数组法;链表法;递归法;队列法;分析
目录
1设计背景1
1.1问题描述1
1.2基本要求1
1.3开发及运行平台1
2.设计方案2
2.1题目分析2
2.2需求分析规格2
2.2.1数据求解法分析3
2.2.2链表求解法分析3
2.2.3递归法分析4
2.2.4队列法分析...4
2.3数据流程图.....................................................................................................................................4
2.4系统结构图5
3方案实施5
3.1数据类型定义...................................................................................................................................5
3.2主要模块设计..................................................................................................................................5
3.2.1模块1——数组求解模块5
3.2.2模块2——链表求解模块6
3.2.3模块3——递归求解模块7
3.2.4模块4——队列求解模块8
3.3源程序.................................................................................................................................................8
4结果与结论13
4.1调试分析..........................................................................................................................................13
4.2程序运行结果..................................................................................................................................13
4.3结论....................................................................................................................................................14
5.参考文献15
1.设计背景
1.1问题描述
有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
1.2基本要求
(1)采用数组数据结构实现上述求解
(2)采用链式数据结构实现上述求解
(3)采用递归实现上述求解
(4)采用队列实现上述求解
1.3开发及运行平台
在本课程设计中,系统开发平台为Windows2000,程序设计语言为VisualC++6.0,程序的运行环境为VisualC++6.0。
VisualC++一般分为三个版本:
学习版、专业版和企业版,不同的版本适合于不同类型的应用开发。
实验中可以使用这三个版本的任意一种,在本课程设计中,以VisualC++6.0为编程环境。
MicrosoftVisualC++6.0是Microsof公司的MicrosoftVisualStudio6.0开发工具箱中的一个C++程序开发包。
VisualC++包中除包括C++编译器外,还包括所有的库、例子和为创建Windows应用程序所需要的文档。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
VisualC++从最早期的1.0版本,发展到最新的7.0版本,VisualC++已经有了很大的变化,在界面、功能、库支持方面都有许多的增强。
最新的7.0版本在编译器、MFC类库、编辑器以及联机帮助系统等方面都比以前的版本做了较大改进。
VisualC++6.0是Microsoft公司推出的目前使用最广泛的基于Windows平台的可视化编程环境。
VisualC++6.0是在以往版本不断更新的基础上形成的,由于其功能强大,灵活性好,完全课扩展以及具有强大的Internet支持,因而在各种C++语言开发工具中脱颖而出,成为目前最为流行的C++语言集成开发环境。
虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。
所以实际中,更多的是以VisualC++6.0为平台。
VisualC++6.0是Microsoft公司推出的目前使用最广泛的基于Windows平台的可视化编程环境。
Visual C++ 6.0是在以往版本不断更新的基础上形成的,由于其功能强大,灵活性好,完全课扩展以及具有强大的Internet支持,因而在各种C++语言开发工具中脱颖而出,成为目前最为流行的C++语言集成开发环境。
VisualC++6.0秉承Visual C++以前版本的优异特性,为用户提供了一套良好的可视化开发环境:
主要包括文本编辑器、资源编辑器、工程创建工具、Debugger调试器等等。
用户可以在集成开发环境中创建工程、打开工程、建立、打开和编辑文件、编译、链接、运行、调试应用程序。
2.设计方案
2.1题目分析
根据题目要求,设猴子共摘的桃子个数为n即是第一天桃子的个数n1,第第二天时桃子个数n2,第三天时桃子个数n3,第四天时桃子个数n4,第五天时桃子个数n5,第六天时桃子个数n6,第七天时桃子个数n7,第八天时桃子个数n8,第九天时桃子个数n9,第十天时桃子个数n10。
由题中“每天都吃当前桃子的一半且再多吃一个”很容易知道n10=1,n9-(n9/2+1)=n10,n8-(n8/2+1)=n9……依
次推出公式:
ni-1-(ni-1/2+1)=ni(0
。
即ni-1=2*(ni+1)(0
。
2.2需求分析规格
由上述描述及分析可知,该系统所要做的工作就是计算出原来这群猴子共摘了多少个桃子。
通过分析不同的解法,找到每种解法的优劣,得到最合适的求解方法。
由问题描述可知,该系统运行时,不需要手动输入任何数据,因此就没有输入的测试数据,只有输出的测试数据,且输出数据的形式是输出每天剩下的桃子数,最后输出这群猴子总共摘了多少桃子。
2.2.1数组求解法分析
分析:
声明一个长度为10的整形数组a[10],分别存放各天猴子吃前的桃子数。
下图1所示:
n1
n2
n3
n4
n5
n6
n7
n8
n9
n10
a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a
图2.2.1数组元素分布图
先将a[9]赋值为1,用一个循环语句
for(inti=8;i>=0;i--)
a[i]=2*(a[i+1]+1);为其余各数组元素赋值,则数组元素a[0]的值便是该问题解。
数据类型定义:
inta[10];
a[9]=1;
2.2.2链表求解法分析
分析:
建立单链表,声明一个类用来对链表的结点指针进行定义,在初始化函数中利用头插法创建具有10个元素的链表,并依次安公式ni-1=2*(ni+1)(0
。
赋值得到一个如图2所示的链表。
图2.2.2链表结点逻辑结构图
数据类型定义:
classlist
{
public:
intdata;
classlist*next;
voidpush();
};typedefclasslistnode;//建立单链表(将class重定义为node)
typedefnode*link;//定义结点指针
2.2.3递归法分析
分析:
利用一个递归函数来进行求值:
依据返回值来记录每一天剩余桃子情况。
intprocess(intn)
{
if(n==10)
return1;
else
return2*(process(n+1)+1);
}
2.2.4队列法分析
分析:
定义一个队列,和一个临时变量,临时变量存放第十天到第一天的剩下的桃子数目,每计算出一天的剩余的桃子数,就将其入队,十天的剩余桃子数全部入队以后就出对,即得到每一天的剩余桃子数,最后得到的一个数据就是所要求的桃子的总数。
数据类型定义:
typedefstructSqQueue
{
intdata[QueueSize];
intfornt,rear;//队首、队尾指针
}
SqQueue;
2.3数据流程图
图2.3.1数据流程图
2.4系统结构图
图2.4.1系统结构图
3.方案实施
3.1数据类型定义
ina[10];
classlist
{
public:
intdata;
classlist*next;
voidpush();
};
typedefclasslistnode;//建立单链表(将class重定义为node)
typedefnode*link;//定义结点指针
typedefstructSqQueue
{
intdata[QueueSize];
intfornt,rear;//队首、队尾指针
}SqQueue;
3.2主要模块设计
3.2.1模块1——数组求解模块
3.2.1.1模块算法:
//数组求解
voidArray_Solve()
{
inta[10];//存放
inti;
a[9]=1;
cout<<"★数组数据结构实现:
"< cout<<"第10天剩下的桃子为: "< for(i=8;i>=0;i--) { a[i]=(a[i+1]+1)*2; cout<<"第"< "< } cout<<"所以猴子共摘了"< cout< } 3.2.1.2流程图 图3.2.1数组求解流程图 3.2.2模块2——链表求解模块 3.2.2.1模块算法 //链表求解 voidLink_Solve() { linkhead; listlist1; head=newnode; p=head; list1.push(); p=head->next; cout<<"★链式数据结构实现: "< cout<<"第10天剩下的桃子为: 1"< inti=9; while(p) { cout<<"第"< "< if(i==1) cout<<"所以猴子共摘了"< p=p->next; i--; } cout< } 3.2.3模块3——递归求解模块 3.2.3.1模块算法 intprocess(intn)//递归 { if(n==10) return1; else return2*(process(n+1)+1); } //递归求解 voidFac_Solve() { cout<<"★递归方法实现: "< for(inti=10;i>0;i--) cout<<"第"< "< cout<<"所以猴子共摘了"< (1)<<"个桃子"< } 3.2.4模块4——队列求解模块 3.2.4.1模块算法 //队列求解 voidQueue_Solve() { SqQueueSQ; SQ.fornt=SQ.rear=0; inttemp;//临时变量,存放每一天剩的桃子数 temp=1;//初始放第十天的 for(inti=0;i<10;i++) { SQ.data[SQ.rear++]=temp; temp=2*(temp+1); } cout<<"★队列数据结构实现: "< while(SQ.fornt! =SQ.rear) cout<<"第"<<11-SQ.fornt<<"天剩下的桃子为: "< cout<<"所以猴子共摘了"< } 3.3源程序清单 #include #include #include #defineQueueSize10 usingnamespacestd; classlist { public: intdata; classlist*next; voidpush(); }; typedefclasslistnode;//建立单链表(将class重定义为node) typedefnode*link;//定义结点指针 linkp=NULL; voidlist: : push() { links; intj=1; p->data=j; for(inti=9;i>0;i--) {s=newnode; s->data=(j+1)*2; j=s->data; s->next=NULL; p->next=s; p=p->next; } } typedefstructSqQueue {intdata[QueueSize]; intfornt,rear;//队首、队尾指针 }SqQueue; //数组求解 voidArray_Solve() {inta[10];//存放 inti; a[9]=1; cout<<"★数组数据结构实现: "< cout<<"第10天剩下的桃子为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构大作业 猴子吃桃问题 数据结构 作业 猴子 问题
![提示](https://static.bdocx.com/images/bang_tan.gif)