数据结构查找子系统.docx
- 文档编号:3190345
- 上传时间:2022-11-19
- 格式:DOCX
- 页数:13
- 大小:16.48KB
数据结构查找子系统.docx
《数据结构查找子系统.docx》由会员分享,可在线阅读,更多相关《数据结构查找子系统.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构查找子系统
/*
*题目:
编写循序查找程序
*编写二分查找程序
*编写建立二叉排序树的程序
*编写在二叉排序树上的查找、输入、删除结点的程序
*编写二叉排序树的中序输出的程序
*设计一个选择式菜单,一级菜单形式如下:
*查找子系统
**********************************
**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=(k 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=(k p->lchild: p->rchild;//判断插入的数据的位置 } } p=(BtNode*)malloc(sizeof(BtNode));//分配空间 p->trData=k; p->lchild=p->rchild=NULL;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 查找 子系统