数据结构查找子系统.docx

上传人:b****5 文档编号:3190345 上传时间:2022-11-19 格式:DOCX 页数:13 大小:16.48KB
下载 相关 举报
数据结构查找子系统.docx_第1页
第1页 / 共13页
数据结构查找子系统.docx_第2页
第2页 / 共13页
数据结构查找子系统.docx_第3页
第3页 / 共13页
数据结构查找子系统.docx_第4页
第4页 / 共13页
数据结构查找子系统.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构查找子系统.docx

《数据结构查找子系统.docx》由会员分享,可在线阅读,更多相关《数据结构查找子系统.docx(13页珍藏版)》请在冰豆网上搜索。

数据结构查找子系统.docx

数据结构查找子系统

/*

*题目:

编写循序查找程序

*编写二分查找程序

*编写建立二叉排序树的程序

*编写在二叉排序树上的查找、输入、删除结点的程序

*编写二叉排序树的中序输出的程序

*设计一个选择式菜单,一级菜单形式如下:

*查找子系统

**********************************

**1------顺序查找*

**2------二分查找*

**3------二叉排序树*

**0------返回*

**********************************

*请选择菜单号(0--3):

*二叉排序树的二级菜单如下:

*二叉排序树

*************************************

**1------更新二叉排序树*

**2------查找结点*

**3------插入结点*

**4------删除结点*

**5------中序输出排序树*

**0------返回*

*************************************

*请选择菜单号(0--5):

*/

#include

#include

#include

#defineSEARCHMAX30

typedefstructnode

{

inttrData;//根节点

structnode*lchild;//左子树

structnode*rchild;//右子树

}BtNode,*pBtNode;

voidseqSearch();

voidbinSearch();

voidbtSearch();

pBtNodecreateBT();

voidsearchBT(pBtNodeT,intk);

voidinsBT(pBtNode*T,intk);

voiddelBT(pBtNode*T,intk);

voidinorderBT(pBtNodeT);

voidmain()

{

intchoice,k=1;

while(k)

{

printf("\n查找子系统\n");

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

printf("*1------顺序查找*\n");

printf("*2------二分查找*\n");

printf("*3------二叉排序树*\n");

printf("*0------返回*\n");

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

printf("请选择菜单号(0--3):

");

fflush(stdin);

scanf("%d",&choice);

switch(choice)

{

case1:

seqSearch();

break;

case2:

binSearch();

break;

case3:

btSearch();

break;

case0:

k=0;

break;

default:

printf("输入错误,请重新输入。

");

getchar();

k=1;

break;

}

}

}

voidseqSearch()//顺序查找

{

inta[SEARCHMAX],x,y,i;

charch;

printf("建立一个整数的顺序表(以-1结束):

");

for(i=0;i

{

scanf("%d",&a[i]);

getchar();

if(a[i]==-1)//记录结束位置,结束循环

{

y=i;

break;

}

}

printf("是否需要查找(Y/N):

");

scanf("%c",&ch);

while(ch=='y'||ch=='Y')

{

printf("请输入要查找的数据:

\n");

scanf("%d",&x);

getchar();

i=0;//找到数组的结束位置。

while(i

=x)//找到要查找的数据的位置

{

i++;

}

if(i==-1)//没找到

{

printf("对不起,没有找到。

\n");

}

else

{

printf("该数据在第%d个位置上。

\n",i+1);

}

printf("是否继续查找(Y/N):

");

scanf("%c",&ch);

}

}

voidbinSearch()//二分查找

{

intb[SEARCHMAX],i,y,x,low,mid,high,n;

charch;

printf("建立递增有序的查找顺序表(以-1结束):

\n");

for(i=0;i

{

scanf("%d",&b[i]);

getchar();

if(b[i]==-1)//记录结束位置,结束循环

{

y=i;

break;

}

}

printf("是否需要查找(Y/N):

");

scanf("%c",&ch);

while(ch=='y'||ch=='Y')

{

printf("请输入要查找的数据:

");

scanf("%d",&x);

getchar();

low=0;//低

high=y-1;//高

n=0;//记录次数

while(low<=high)

{

mid=(low+high)/2;

n++;

if(b[mid]>x)//在左边

{

high=mid-1;

}

elseif(b[mid]

{

low=mid+1;

}

else//找到

{

break;

}

}

if(low>high)

{

printf("对不起,没有找到该数据。

\n");

printf("共进行%d次比较。

\n",n);

if(b[mid]

{

mid++;

}

printf("可将此数据插入第个%d位置",mid+1);

}

else

{

printf("找到该数据在第%d个位置。

\n",mid+1);

printf("共进行%d次比较。

\n",n);

}

printf("是否需要查找(Y/N):

");

scanf("%c",&ch);

}

}

voidbtSearch()//二叉排序树

{

intchoice,x,l=1;

pBtNodeT;

printf("建立一棵二叉排序树存储\n");

T=createBT();

getchar();

while(l)

{

printf("\n二叉排序树\n");

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

printf("*1------更新二叉排序树*\n");

printf("*2------查找结点*\n");

printf("*3------插入结点*\n");

printf("*4------删除结点*\n");

printf("*5------中序输出排序树*\n");

printf("*0------返回*\n");

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

printf("请选择菜单号(0--5):

");

fflush(stdin);

scanf("%d",&choice);

switch(choice)

{

case1:

T=createBT();

break;

case2:

printf("请输入要查找的数据:

");

scanf("%d",&x);

getchar();

searchBT(T,x);

break;

case3:

printf("请输入要插入的数据:

");

scanf("%d",&x);

insBT(&T,x);

break;

case4:

printf("请输入要删除的数据:

");

scanf("%d",&x);

delBT(&T,x);

break;

case5:

inorderBT(T);

break;

case0:

l=0;

break;

default:

printf("输入错误,请重新输入。

");

getchar();

l=1;

break;

}

}

}

pBtNodecreateBT()//建立二叉树

{

pBtNodeT;//声明指针

intx;

T=NULL;

printf("请输入一个整数(输入0结束):

");

fflush(stdin);

scanf("%d",&x);

getchar();

while(x)//输入的数据非零时

{

insBT(&T,x);//二叉树中插入数据

printf("请输入下一个整数(输入0结束):

");

fflush(stdin);

scanf("%d",&x);

getchar();

}

returnT;//返回指针

}

voidsearchBT(pBtNodeT,intk)//查找二叉树结点

{

pBtNodef=T;

while(f)

{

if(f->trData==k)//判断是否找到该数据

{

printf("已找到数据。

\n");

return;

}

f=(ktrData)?

f->lchild:

f->rchild;//判断下一个查找的位置

}

printf("没有找到数据。

\n");

}

voidinsBT(pBtNode*T,intk)//插入二叉树结点

{

pBtNodef,p;

p=(*T);//指向指针的指针

while(p)//当结点不为空

{

if(p->trData==k)

{

printf("树中已有%d,不需要插入。

",k);

return;

}

else

{

f=p;

p=(ktrData)?

p->lchild:

p->rchild;//判断插入的数据的位置

}

}

p=(BtNode*)malloc(sizeof(BtNode));//分配空间

p->trData=k;

p->lchild=p->rchild=NULL;

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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