数据结构课程设计猴子吃桃问题及二叉树.docx

上传人:b****1 文档编号:23125985 上传时间:2023-05-08 格式:DOCX 页数:19 大小:84.55KB
下载 相关 举报
数据结构课程设计猴子吃桃问题及二叉树.docx_第1页
第1页 / 共19页
数据结构课程设计猴子吃桃问题及二叉树.docx_第2页
第2页 / 共19页
数据结构课程设计猴子吃桃问题及二叉树.docx_第3页
第3页 / 共19页
数据结构课程设计猴子吃桃问题及二叉树.docx_第4页
第4页 / 共19页
数据结构课程设计猴子吃桃问题及二叉树.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数据结构课程设计猴子吃桃问题及二叉树.docx

《数据结构课程设计猴子吃桃问题及二叉树.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计猴子吃桃问题及二叉树.docx(19页珍藏版)》请在冰豆网上搜索。

数据结构课程设计猴子吃桃问题及二叉树.docx

数据结构课程设计猴子吃桃问题及二叉树

 

课程设计任务书

理学院数学0902班学生(28)

课程设计课题:

1猴子吃桃问题:

有一群猴子摘了一堆桃子,它们每天都吃当前桃子的一半再多吃一个,到了第10天就剩下一个桃子,用多种方法实现求出原来这群猴子共摘了多少桃子。

要求:

1)采用数组数据结构实现上述求解;

2)采用链式数据结构。

2.实现二叉排序树:

要求:

用顺序表和二叉链表作为数据结构

1)以回车(’\n’)为输入结束标志,输入数列L,生成一棵二叉排序树T;

2)对二叉排序树进行中序遍历,输出结果;

3)输入元素m,查找二叉排序树T,若存在包含m的结点,则删除该结点,并做中序遍历。

否则显示信息“无m这个结点”。

一、课程设计工作日自2012年2月21日至2012年3月2日

二、同组学生:

三、课程设计任务要求(包括课题来源、类型、目的和意义、基本要求、完成时间、主要参考资料等):

课题来源:

教师提供

课题类型:

设计

课题的目的和意义:

通过课程设计了解c语言中结构体的使用以及利用数据结构设计大型程序

主要参考资料:

黄刘生.数据结构.北京:

经济科学出版社,2005

黄杨铭.数据结构.北京:

科学出版社,2001

严蔚敏.数据结构(C语言版)[M].北京:

清华大学出版社.2008.

苏光奎.数据结构导学.北京:

清华大学出版社,2002

XX文库

指导教师签字:

教研室主任签字:

 

课程设计评审表

理学院数学0902班学生(28)

设计任务完成情况及指导教师评语

答辩情况

评定成绩

 

成绩:

指导教师签字:

日期:

 

教研室主任:

院长签字:

日期:

日期:

问题一、猴子吃桃问题

具体程序及运行结果如下:

#include

#include

#include

#defineNULL0

#defineDay9

//**************************************函数声明***********************************************

voidcreat();

voidprint();

voidarray();

voidEnd();

voiddisplay();

voidfanhui();

voiddisplay()

{system("cls");

printf("\n********猴子吃桃子的问题**********\n");

printf("\n**1,用数组数据结构的方法实现。

**\n");

printf("\n**2,用链数据结构的方法实现。

**\n");

printf("\n**3,退出程序。

**\n");

printf("\n**************************************\n");

printf("\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]);

printf("桃子变化为:

\n");

for(i=0;i<=Day;i++)

printf("第%d天的桃子数为:

%d\n",i+1,A[i]);

}

//********************************链表算法*****************************************

typedefstructlinknode

{

intdata;

structlinknode*next;//链表指针

}node;

node*head;//头结点

voidcreat()//创建链表

{node*p,*s;

intpeaches=1;//第十天时只剩下一个桃子

intday=10;

printf("输入天数");

scanf("%d",&day);

printf("输入第%d天还剩几个桃子:

",day);

scanf("%d",&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--;

}

p->next=NULL;

p=head;

head=head->next;//使头指针指向头结点

free(p);//释放指针P

}

voidprint()//输出从这十天每天的桃子数

{node*p;

p=head;

intday=10;

printf("请确定您输入天数:

");

scanf("%d",&day);

while(p&&day>0)

{printf("第%d天的桃子数:

%d个\n",day,p->data);

p=p->next;

day--;

}

}

voidEnd()

{

printf("\n\n\n\n");

printf("\1谢谢观看\1\n");

printf("\n0772900227\n");

printf("\n\n\n\n\n");

}

//******************************************主函数*********************************************

voidmain()

{

flg:

display();

inta;

intb;

scanf("%d",&a);

if(a<1||a>4)

{

//system("cls");

gotoflg;

}

else

switch(a)

{

case1:

system("cls");

printf("\n***********************使用数组的方法:

**********************\n\n\n");

array();

printf("\n\n\n*****************按<0>键返回主菜单!

!

!

按任意数字键退出程序!

!

!

******************\n");

scanf("%d",&b);

if(b==0)

{gotoflg;}

else

system("cls");

End();

break;

case2:

system("cls");

printf("\n***********************使用链表的方法:

********************\n\n\n");

creat();

print();

printf("\n\n\n*****************任意键返回主菜单!

!

!

按'0'退出程序!

!

!

*************************\n");

scanf("%d",&b);

if(b==0)

{gotoflg;}

else

system("cls");

End();

break;

case3:

system("cls");

End();

exit(0);

}

}

#include

#include

#include

#defineNULL0

#defineDay9

//**************************************函数声明***********************************************

voidcreat();

voidprint();

voidarray();

intdigui();

voidEnd();

voiddisplay();

voidfanhui();

voiddisplay()

{system("cls");

printf("\n********猴子吃桃子的问题**********\n");

printf("\n**1,用数组数据结构的方法实现。

**\n");

printf("\n**2,用链数据结构的方法实现。

**\n");

printf("\n**3,退出程序。

**\n");

printf("\n**************************************\n");

printf("\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]);

printf("桃子变化为:

\n");

for(i=0;i<=Day;i++)

printf("第%d天的桃子数为:

%d\n",i+1,A[i]);

}

//********************************链表算法*****************************************

typedefstructlinknode

{

intdata;

structlinknode*next;//链表指针

}node;

node*head;//头结点

voidcreat()//创建链表

{node*p,*s;

intpeaches=1;//第十天时只剩下一个桃子

intday=10;

printf("输入天数");

scanf("%d",&day);

printf("输入第%d天还剩几个桃子:

",day);

scanf("%d",&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--;

}

p->next=NULL;

p=head;

head=head->next;//使头指针指向头结点

free(p);//释放指针P

}

voidprint()//输出从这十天每天的桃子数

{node*p;

p=head;

intday=10;

printf("请确定您输入天数:

");

scanf("%d",&day);

while(p&&day>0)

{printf("第%d天的桃子数:

%d个\n",day,p->data);

p=p->next;

day--;

}

}

voidEnd()

{

printf("\n\n\n\n");

printf("\1谢谢观看\1\n");

printf("\n0772900227\n");

printf("\n\n\n\n\n");

}

//******************************************主函数*********************************************

voidmain()

{

flg:

display();

inta;

intb;

scanf("%d",&a);

if(a<1||a>4)

{

//system("cls");

gotoflg;

}

else

switch(a)

{

case1:

system("cls");

printf("\n***********************使用数组的方法:

**********************\n\n\n");

array();

printf("\n\n\n*****************按<0>键返回主菜单!

!

!

按任意数字键退出程序!

!

!

******************\n");

scanf("%d",&b);

if(b==0)

{gotoflg;}

else

system("cls");

End();

break;

case2:

system("cls");

printf("\n***********************使用链表的方法:

********************\n\n\n");

creat();

print();

printf("\n\n\n*****************任意键返回主菜单!

!

!

按'0'退出程序!

!

!

*************************\n");

scanf("%d",&b);

if(b==0)

{gotoflg;}

else

system("cls");

End();

break;

case3:

system("cls");

End();

exit(0);

}

}

按1:

链式结构:

按2:

输入10天剩余一个桃子,运行的结果为:

2.实现二叉排序树的程序如下:

#include

usingnamespacestd;

classnode

{

public:

node(inti):

data(i),left(NULL),right(NULL){}

voidinorder(node*&root)//中序遍历,符合升序输出

{

if(root!

=NULL)

{

inorder(root->left);

cout<data<<'';

inorder(root->right);

}

}

voidinsert(node*&ptr,intitem)//在查找树中插入元素

{

if(ptr==NULL)

ptr=newnode(item);

elseif(itemdata)

insert(ptr->left,item);

elseinsert(ptr->right,item);

}

node*find(node*&ptr,intitem)//在查找树中查找元素,找到返回所在结点指针,找不到返回空指针。

{

if(ptr==NULL)

returnNULL;

if(ptr->data==item)

returnptr;

elseif(itemdata)

find(ptr->left,item);

elsefind(ptr->right,item);

}

node*&findy(node*&ptr,intitem)//在查找树中查找肯定存在的元素,并返回其引用

{

if(ptr->data==item)

returnptr;

elseif(itemdata)

findy(ptr->left,item);

elsefindy(ptr->right,item);

}

node*rl(){returnleft;}

node*rr(){returnright;}

voiddele(node*&ptr)//删除值为item所在结点

{

if(ptr->rl()==NULL&&ptr->rr()==NULL)

ptr=NULL;

elseif(ptr->rr()==NULL)

ptr=ptr->rl();

else

ptr=ptr->rr();

}

private:

intdata;

node*left;//左孩子结点

node*right;//右孩子结点

};

intmain()

{

intt,i=0,j;

cout<<"输入数字个数(结点个数):

";

cin>>t;

cout<<"输入"<

";

cin>>j;

node*x=newnode(j);

for(;i

{

cin>>j;

x->insert(x,j);

}

cout<<"中序遍历为:

";

x->inorder(x);//作中序遍历

cout<<"\n输入操作(当输入-1时程序结束):

"<

cin>>j;

while(j!

=-1)

{

node*t=x->find(x,j);//定位结点

if(t!

=NULL)

{

node*&y=x->findy(x,j);

x->dele(y);

cout<<"中序遍历为:

";

x->inorder(x);

}

elsecout<<"无"<

cout<<"\n输入操作(当输入-1时程序结束):

"<

cin>>j;

}

return0;

}

运行结果如下:

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

当前位置:首页 > 初中教育 > 政史地

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

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