1)编写顺序查程序。
2)编写二分查程序。
3)编写建立二叉排序树的程序。
4)编写在二叉排序树上的查、插入、删除结点的程序。
5)编写使二叉排序树中序输出的程序。
6)设计一个选择式菜单一级菜单形式如下
查 子 系 统
******************************************
* 1------顺 序 查 *
* 2------二 分 查 *
* 3------二 叉 排 序 树 *
* 0------返 回 *
******************************************
请选择菜单号(0--3)
索爱m600i
二叉排序树二级子菜单如下
二叉排序树
*******************************************
* 1------更新二叉排序树 *
* 2------查 结 点 *
* 3------插 入 结 点 *
* 4------删 除 结 点 *
* 5------中序输出排序树 *
* 0------返 回 *
*******************************************
请选择菜单号(0--5)
2.实验目的与要求
1.通过查实验理解查的基本算法。
2.熟悉各种查方法的适用场合及平均查长度。
3.掌握静态查和动态查的区别。
4.掌握顺序查、二分查的基本思想及其算法。
5.掌握二叉排序树基本思想及其算法。
3.实验步骤与源程序
实验步骤:
1.从具体问题抽象出适当的数学模型
2.设计求解数学模型的算法
3.编制、运行并调试程序,直到解决实际问题。
源代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXLEN 100
#define N 10
void SeqSearch()
{
int a[N],i,x,y;
char ch;
printf("\n\t\t建立一个整数的顺序表(以回车为间隔,以-1结束):\n");
for (i=0;i<MAXLEN;i++)
{
printf("\t\t");
scanf("%d",&a[i]);
getchar();
if (a[i]==-1)
{
y=i;break;
}
}
printf("\n\t\t需要查请输入Y,否则输入N:"); scanf("%c",&ch);
while(ch=='y'||ch=='Y')
江西泰和在线论坛 {
printf("\n\t\t请输入要查的数据: ");
scanf("%d",&x);getchar();
甾醇
i=y-1;
南方护理学报 while(i>=0&&a[i]!=x)
i--;
if(i==-1)
printf("\n\t\t抱歉!没有您要查的数据. \n");
else
printf("\n\t\t您要查的数据在第 %d 个位置上. \n",i+1);
printf("\n\t\t继续查输入Y,否则输入N:");
scanf("%c",&ch);
冷轧不锈钢
}
}
void BinSearch()
{
int R[MAXLEN],i,k,low,mid,high,m,nn;
char ch;
printf("\n\t\t先建立递增有序的查顺序表(以回车符间隔,以-1结束) :\n");
for(i=0;i<MAXLEN;i++)
{ printf("\t\t");
scanf("%d",&R[i]);
getchar();
if(R[i]==-1)
{ nn=i;break;}
}
printf("\n\t\t查请输入Y,退出输入N:");
scanf("%c",&ch);
getchar();
while(ch=='y'||ch=='Y')
{ printf("\n\t\t请输入要查的数据:");
scanf("%d",&k);
getchar();
low=0;
high=nn-1;
m=0;
while(low<=high)
{ mid=(low+high)/2;
m++;
if(R[mid]>k)
high=mid-1;
else
if(R[mid]<k)
low=mid+1;
else
break;
}
if(low>high)
福克纳 {
printf("\n\t\t抱歉!没有您要查的数据.\n");
printf("\n\t\t共进行%d次比较.\n",m);
if(R[mid]<k)
mid++;
printf("\n\t\t可将此数插入到第%d个位置上.\n",mid+1);
}
else
{
printf("\n\t\t要的数据%d在第%d个位置上.\n",k,mid+1);
printf("\n\t\t共进行%d次比较.\n",m);
}
printf("\n\t\t继续查输入Y,否则输入N:");
scanf("%c",&ch);getchar();
}
}
typedef int KeyType;
typedef struct node
{
KeyType key;
struct node *lchild,*rchild;
}BSTNode;
typedef BSTNode *BSTree;
BSTree CreateBST(void);
void SearchBST(BSTree T,KeyType Key);
void InsBST(BSTree *Tptr,KeyType Key);
void DelBSTNode(BSTree *Tptr,KeyType Key);
void InorderBST(BSTree T);
void BTSearch()
{
BSTree T;
char ch1,ch2;
KeyType Key;
printf("\n\t\t建立一棵二叉树的二叉链表存储\n");
T=CreateBST();ch1='y';
getchar();
while(ch1=='y'||ch1=='Y')
{
printf("\n\t\t 二 叉 排 序 树 ");
printf("\n\t\t********************************************");
printf("\n\t\t* 1-------更新二叉排序树 *");
printf("\n\t\t* 2-------查 结 点 *");
printf("\n\t\t* 3-------插 入 结 点 *");
printf("\n\t\t* 4-------删 除 结 点 *");
printf("\n\t\t* 5-------中序输出排序树 *");
printf("\n\t\t* 0-------返 回 *");