顺序表二分查找递归算法

来源:互联网 发布:开淘宝店货源怎么弄 编辑:程序博客网 时间:2024/06/05 11:34
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;elsecout<<"找到"<<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);}

0 0
原创粉丝点击