数据结构实验六
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf(" 3.查找二叉排序树中元素\n");
printf(" 4.退出\n");
printf("***************************************\n");
printf("请输入一个数字执行相应操作:\n");
scanf("%d",&k);
system("CLS");
}BSTNode, *BSTree;
int InsertBST(BSTree *bst,int key) //插入函数
{
BSTree s;
if (*bst==NULL)
{
s=(BSTree)malloc(sizeof(BSTNode));
s->key=key;
s->lchild=NULL;
s->rchild=NULL;
}
}
void CreateBST(BSTree *bst)
{
int key;
*bst=NULL;
scanf("%d", &key);
while (key!=ENDKEY)
{
InsertBST(bst, key);
scanf("%d", &key);
}
}
BSTree SearchBST(BSTree bst, int key)
4.插入操作
5.查找操作
实验总结:
一开始在执行插入操作时,输入与子叶相同的数字插入时会失败,在仔细看插入函数时知道了问题所在。原来是在输入数字与二叉排序树中元素比较大小时只考虑到了大于、小于的情况。在将语句else if(key<(*bst)->key)的条件改为小于等于后就可以在二叉排序树中插入与子叶相同的数字了。
算法思想:
1.调用建立二叉排序树的函数;
2.输入数据建立二叉排序树;
3.调用中序遍历函数输出所建立的二叉排序树序列;
4.输入一个数字,调用二叉排序树插入函数将该数字插入到二叉排序树中;
5.输入一个数字,调用二叉排序树查找函数,查找二叉排序树中是否含有该数字;
运行结果:
1.菜单
2.建立二叉排序树
3.中序输出序列
*bst=s;
return OK;
}
else if(key<=(*bst)->key)
{
InsertBST(&((*bst)->lchild),key);
return OK;
}
else if(key>(*bst)->key)
{
InsertBST(&((*bst)->rchild),key);
return OK;
scanf("%d",&tag);
system("CLS");
}
break;
case 4:
break;
}
if(k==4) break;
}
}
switch(k)
{
case 0:
printf("请输入序列,建立二叉排序树,以-1结束:\n");
CreateBST(&T);
printf("建立完成,任意键返回主菜单\n");
getch();
printf("\n");
system("CLS");
break;
case 1:
printf("中序遍历二叉排序树,输出序列为:\n");
while(tag!=0)
{
printf("请输入你要查找的元素:\n");
scanf("%d",&n);
if(SearchBST(T,n)==0)
printf("查找失败!\n");
else
printf("查找成功!查找数字为%d\n",SearchBST(T,n)->key);
printf("输入1继续查找,输入0退出查找\n");
}
void InOrder(BSTree root) //中序遍历
{
if (root!=NULL)
{
InOrder(root->lchild);
printf("%d ",root->key);
InOrder(root->rchild);
}
}
void main()
{
int k,d,y,m,n,tag;
InOrder(T);
printf("\n任意键返回主菜单!\n");
getch();
system("CLS");
break;
case 2:
while(tag!=0)
{
printf("请输入要插入元素值:\n");
scanf("%d",&m);
if(InsertBST(&T,m)==OK)
{
printf("插入成功!\n");
{
if(!bsຫໍສະໝຸດ Baidu)
return NULL;
else if(bst->key==key)
return bst; //查找成功
else if(bst->key>key)
return SearchBST(bst->lchild,key);
else
return SearchBST(bst->rchild,key);
BSTree T;
while(1)
{
tag=1;
y=0;
printf("***************************************\n");
printf(" 0.建立二叉排序树\n");
printf(" 1.中序输出二叉排序树\n");
printf(" 2.向二叉排序树中插入元素\n");
洛阳理工学院实验报告
系部
计算机系
班级
B130503
学号
姓名
课程名称
数据结构
实验日期
2014.12.11
实验名称
二叉排序树的创建和查找
成绩
实验目的:
理解二叉排序树的递归定义,掌握二叉排序树的创建、插入、查找基本操作的实现。
实验条件:
实验内容与算法思想:
内容:
利用递归算法创建一棵二叉排序树,并在创建的二叉排序树上实现插入、查找等操作。
附:源程序:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define ENDKEY -1
#define NULL 0
#define OK 1
typedef struct node
{
int key;
struct node *lchild,*rchild;
printf("插入元素后,中序遍历二叉排序树,输出序列为:\n");
InOrder(T);
printf("\n");
}
else printf("插入失败!\n");
printf("输入0结束操作,输入1继续操作\n");
scanf("%d",&tag);
system("CLS");
}
break;
case 3:
printf(" 4.退出\n");
printf("***************************************\n");
printf("请输入一个数字执行相应操作:\n");
scanf("%d",&k);
system("CLS");
}BSTNode, *BSTree;
int InsertBST(BSTree *bst,int key) //插入函数
{
BSTree s;
if (*bst==NULL)
{
s=(BSTree)malloc(sizeof(BSTNode));
s->key=key;
s->lchild=NULL;
s->rchild=NULL;
}
}
void CreateBST(BSTree *bst)
{
int key;
*bst=NULL;
scanf("%d", &key);
while (key!=ENDKEY)
{
InsertBST(bst, key);
scanf("%d", &key);
}
}
BSTree SearchBST(BSTree bst, int key)
4.插入操作
5.查找操作
实验总结:
一开始在执行插入操作时,输入与子叶相同的数字插入时会失败,在仔细看插入函数时知道了问题所在。原来是在输入数字与二叉排序树中元素比较大小时只考虑到了大于、小于的情况。在将语句else if(key<(*bst)->key)的条件改为小于等于后就可以在二叉排序树中插入与子叶相同的数字了。
算法思想:
1.调用建立二叉排序树的函数;
2.输入数据建立二叉排序树;
3.调用中序遍历函数输出所建立的二叉排序树序列;
4.输入一个数字,调用二叉排序树插入函数将该数字插入到二叉排序树中;
5.输入一个数字,调用二叉排序树查找函数,查找二叉排序树中是否含有该数字;
运行结果:
1.菜单
2.建立二叉排序树
3.中序输出序列
*bst=s;
return OK;
}
else if(key<=(*bst)->key)
{
InsertBST(&((*bst)->lchild),key);
return OK;
}
else if(key>(*bst)->key)
{
InsertBST(&((*bst)->rchild),key);
return OK;
scanf("%d",&tag);
system("CLS");
}
break;
case 4:
break;
}
if(k==4) break;
}
}
switch(k)
{
case 0:
printf("请输入序列,建立二叉排序树,以-1结束:\n");
CreateBST(&T);
printf("建立完成,任意键返回主菜单\n");
getch();
printf("\n");
system("CLS");
break;
case 1:
printf("中序遍历二叉排序树,输出序列为:\n");
while(tag!=0)
{
printf("请输入你要查找的元素:\n");
scanf("%d",&n);
if(SearchBST(T,n)==0)
printf("查找失败!\n");
else
printf("查找成功!查找数字为%d\n",SearchBST(T,n)->key);
printf("输入1继续查找,输入0退出查找\n");
}
void InOrder(BSTree root) //中序遍历
{
if (root!=NULL)
{
InOrder(root->lchild);
printf("%d ",root->key);
InOrder(root->rchild);
}
}
void main()
{
int k,d,y,m,n,tag;
InOrder(T);
printf("\n任意键返回主菜单!\n");
getch();
system("CLS");
break;
case 2:
while(tag!=0)
{
printf("请输入要插入元素值:\n");
scanf("%d",&m);
if(InsertBST(&T,m)==OK)
{
printf("插入成功!\n");
{
if(!bsຫໍສະໝຸດ Baidu)
return NULL;
else if(bst->key==key)
return bst; //查找成功
else if(bst->key>key)
return SearchBST(bst->lchild,key);
else
return SearchBST(bst->rchild,key);
BSTree T;
while(1)
{
tag=1;
y=0;
printf("***************************************\n");
printf(" 0.建立二叉排序树\n");
printf(" 1.中序输出二叉排序树\n");
printf(" 2.向二叉排序树中插入元素\n");
洛阳理工学院实验报告
系部
计算机系
班级
B130503
学号
姓名
课程名称
数据结构
实验日期
2014.12.11
实验名称
二叉排序树的创建和查找
成绩
实验目的:
理解二叉排序树的递归定义,掌握二叉排序树的创建、插入、查找基本操作的实现。
实验条件:
实验内容与算法思想:
内容:
利用递归算法创建一棵二叉排序树,并在创建的二叉排序树上实现插入、查找等操作。
附:源程序:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define ENDKEY -1
#define NULL 0
#define OK 1
typedef struct node
{
int key;
struct node *lchild,*rchild;
printf("插入元素后,中序遍历二叉排序树,输出序列为:\n");
InOrder(T);
printf("\n");
}
else printf("插入失败!\n");
printf("输入0结束操作,输入1继续操作\n");
scanf("%d",&tag);
system("CLS");
}
break;
case 3: