数据结构课程设计猴子吃桃问题及二叉树文档格式.docx
- 文档编号:20719168
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:17
- 大小:84.62KB
数据结构课程设计猴子吃桃问题及二叉树文档格式.docx
《数据结构课程设计猴子吃桃问题及二叉树文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计猴子吃桃问题及二叉树文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
科学出版社,2001
严蔚敏.数据结构(C语言版)[M].北京:
清华大学出版社.2008.
苏光奎.数据结构导学.北京:
清华大学出版社,2002
XX文库
指导教师签字:
教研室主任签字:
课程设计评审表
设计任务完成情况及指导教师评语
答辩情况
评定成绩
成绩:
指导教师签字:
日期:
教研室主任:
院长签字:
日期:
日期:
问题一、猴子吃桃问题
具体程序及运行结果如下:
#include<
stdio.h>
stdlib.h>
#include<
malloc.h>
#defineNULL0
#defineDay9
//**************************************函数声明***********************************************
voidcreat();
voidprint();
voidarray();
voidEnd();
voiddisplay();
voidfanhui();
voiddisplay()
{system("
cls"
);
printf("
\n********猴子吃桃子的问题**********\n"
\n**1,用数组数据结构的方法实现。
**\n"
\n**2,用链数据结构的方法实现。
\n**3,退出程序。
\n**************************************\n"
\n请输入您的选择(1,2,3):
"
}
//*****************************************数组**************************************
voidarray()
{
intA[Day+1];
//定义数组
inti;
A[Day]=1;
//第十天的桃子数
for(i=Day;
i>
=1;
i--)
A[i-1]=(A[i]+1)*2;
/*第一天的桃子数是第2天桃子数加1后的2倍*/
printf("
thetotalofpeachesare%d\n"
A[0]);
桃子变化为:
\n"
for(i=0;
i<
=Day;
i++)
第%d天的桃子数为:
%d\n"
i+1,A[i]);
//********************************链表算法*****************************************
typedefstructlinknode
intdata;
structlinknode*next;
//链表指针
}node;
node*head;
//头结点
voidcreat()//创建链表
{node*p,*s;
intpeaches=1;
//第十天时只剩下一个桃子
intday=10;
输入天数"
scanf("
%d"
&
day);
输入第%d天还剩几个桃子:
day);
peaches);
head=(node*)malloc(sizeof(node));
p=head;
while(day>
0)
s=(node*)malloc(sizeof(node));
//分配存属空间
s->
data=peaches;
//用来存放结点数据
p->
next=s;
//把结点插入链表中
p=s;
peaches=(peaches+1)*2;
//第一天的桃子数是第二天桃子数加后的2倍;
day--;
next=NULL;
head=head->
next;
//使头指针指向头结点
free(p);
//释放指针P
voidprint()//输出从这十天每天的桃子数
{node*p;
请确定您输入天数:
while(p&
&
day>
{printf("
第%d天的桃子数:
%d个\n"
day,p->
data);
p=p->
voidEnd()
\n\n\n\n"
\1谢谢观看\1\n"
\n0772900227\n"
\n张翔\n\n\n\n"
//******************************************主函数*********************************************
voidmain()
{
flg:
display();
inta;
intb;
scanf("
a);
if(a<
1||a>
4)
//system("
gotoflg;
else
switch(a)
case1:
system("
\n***********************使用数组的方法:
**********************\n\n\n"
array();
\n\n\n*****************按<
0>
键返回主菜单!
!
按任意数字键退出程序!
******************\n"
b);
if(b==0)
{gotoflg;
else
End();
break;
case2:
\n***********************使用链表的方法:
********************\n\n\n"
creat();
print();
\n\n\n*****************任意键返回主菜单!
按'
0'
退出程序!
*************************\n"
case3:
exit(0);
}
intdigui();
按1:
链式结构:
按2:
输入10天剩余一个桃子,运行的结果为:
2.实现二叉排序树的程序如下:
iostream>
usingnamespacestd;
classnode
public:
node(inti):
data(i),left(NULL),right(NULL){}
voidinorder(node*&
root)//中序遍历,符合升序输出
{
if(root!
=NULL)
inorder(root->
left);
cout<
<
root->
data<
'
'
;
right);
}
voidinsert(node*&
ptr,intitem)//在查找树中插入元素
if(ptr==NULL)
ptr=newnode(item);
elseif(item<
ptr->
data)
insert(ptr->
left,item);
elseinsert(ptr->
right,item);
node*find(node*&
ptr,intitem)//在查找树中查找元素,找到返回所在结点指针,找不到返回空指针。
returnNULL;
if(ptr->
data==item)
returnptr;
find(ptr->
elsefind(ptr->
node*&
findy(node*&
ptr,intitem)//在查找树中查找肯定存在的元素,并返回其引用
findy(ptr->
elsefindy(ptr->
node*rl(){returnleft;
node*rr(){returnright;
voiddele(node*&
ptr)//删除值为item所在结点
rl()==NULL&
rr()==NULL)
ptr=NULL;
elseif(ptr->
ptr=ptr->
rl();
else
rr();
private:
node*left;
//左孩子结点
node*right;
//右孩子结点
};
intmain()
intt,i=0,j;
输入数字个数(结点个数):
cin>
>
t;
输入"
t<
个数字,数字之间用空格隔开:
j;
node*x=newnode(j);
for(;
t-1;
x->
insert(x,j);
中序遍历为:
inorder(x);
//作中序遍历
\n输入操作(当输入-1时程序结束):
endl;
while(j!
=-1)
node*t=x->
find(x,j);
//定位结点
if(t!
y=x->
findy(x,j);
dele(y);
elsecout<
无"
j<
这个节点"
return0;
运行结果如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 猴子 问题 二叉
![提示](https://static.bdocx.com/images/bang_tan.gif)