16
学年— 17 学年第 1 学期 数据结构 实验任务书
专业名称: 实验学时: 2
课程名称: 数据结构 任课教师: 翟海霞
实验题目: 查找算法实现与分析
实验环境: Visual C++ 6.0
实验项目七:查找算法实现与分析
实验目的:1.掌握顺序表的查找方法,尤其是二分查找方法。
2.掌握二叉排序树的建立及查找过程,理解二叉排序树查找过程及插入和删除算法。
实验内容:1.编写程序实现有序表二分查找的递归算法;
2.建立二叉排序树并对其进行查找、遍历等有关操作。
3.选作:判断一棵二叉树是否为二叉排序树。
#include<iostream>
#include<cstdlib>
using namespace std;
#define MAXSIZE 100
#define OK 1;
typedef struct{
int key;//关键字域
}ElemType;
typedef struct{
ElemType *R;
int length;
}SSTable;
int InitList_SSTable(SSTable &L)//初始化
{
L.R=(ElemType *)malloc(MAXSIZE *sizeof(ElemType));
if (!L.R)
{
cout<<"初始化错误";
return 0;
}
L.length=0;
return OK;
}
int Insert_SSTable(SSTable &L)
{
int j=1;
for(int i=1;i<MAXSIZE;i++)
{
L.R[i].key=j;
L.length++;
j++;
}
//return 1;
}
/*int Search_Bin(SSTable ST,int key) {
// 在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为
// 该元素在表中的位置,否则为0
int low=1,high=ST.length; //置查找区间初值
int mid;
while(low<=high) {
mid=(low+high) / 2;
if (key==ST.R[mid].key) return mid; //找到待查元素
else if (key<ST.R[mid].key) high = mid -1; //继续在前一子表进行查找
else low =mid +1; //继续在后一子表进行查找
}//while
return 0; //表中不存在待查元素
}// Search_Bin*/
int BinSrch(SSTable L,int k,int low,int high)
//在长为n的有序表中查找关键字k,若查找成功,返回k所在位置,查找失败返回0。
{
int mid;
if(low<=high) //low和high分别是有序表的下界和上界
{ mid=(low+high)/2;
if(L.R[mid].key==k) return mid;
else if(L.R[mid].key<k) return BinSrch(L,k,mid+1,high);
else return BinSrch(L,k,low,mid-1);
}
else return 0;//查找失败。
}//算法结束
void Show_End(int result,int testkey)
{
if(result==0)
cout<<"未找到"<<testkey<<endl;
else
cout<<"找到"<<testkey<<"位置为"<<result<<endl;
return;
}
int main()
{
SSTable ST;
InitList_SSTable(ST);
Insert_SSTable(ST);
int testkey1=7,testkey2=200;
int result;
result=BinSrch(ST,testkey1,1,99);
Show_End(result,testkey1);
result=BinSrch(ST,testkey2,1,99);
Show_End(result,testkey2);
}