#include<stdio.h>
//#include<string.h>
//#include<math.h>
#include<stdlib.h>
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define NULL 0
#define MAXSIZE 100
//Status是函数的类型,其值是函数结果状态代码
typedef int Status;
//声明结点的类型和指向结点的指针类型
//顺序表结构类型定义
typedef struct{
KeyType key;//关键字域
...//其他域
}ElemType;
typedef struct{
ElemType *R;//表基址
int length;//表长
}SSTable;
//顺序查找算法
//方法1
int Search_Seq(SSTable ST,KeyType key){
for(int i=ST.length;i>=1;i--)
if(ST.R[i].key==key) return i;
return FALSE;
}
//方法2
int Search_Seq(SSTable ST,KeyType key){
for(int i=ST.length;ST.R[i].key!=key;i--)
if(i<=0) break;
if(i>0) return i;
else return FALSE;
}
//方法3
int Search_Seq(SSTable ST,KeyType key){
for(int i=ST.length;ST.R[i].key!=key && i>0;i--);
if(i>0) return i;
else return FALSE;
}
//改进
int Search_Seq(SSTable ST,KeyType key){
ST.R[0].key=key;//将待查关键字key存入表头(“哨兵”、“监视哨”)
for(int i=ST.length;ST.R[i].key!=key;i--);
if(i>0) return i;
else return FALSE;
}
//折半查找算法
//方法1
int Search_Bin(SSTable ST,KeyType key){
//设置查找区间初值
int low=1;
int high=ST.length;
while(low<=high){
int mid=(low+high)/2;//查找区间的中间位置
if(ST.R[mid].key==key) return mid;//找到待查元素
//未找到,缩小查找区间
else if(key<ST.R[mid].key) high=mid-1;//继续在前半区间查找
else low=mid+1; //继续在后半区间查找
}
return FALSE;
}
//方法2——递归算法
int Search_Bin(SSTable ST,KeyType key,int low,int high){
if(low>high) return FALSE;
int mid=(low+high)/2;//查找区间的中间位置
if(ST.R[mid].key==key) return mid;//找到待查元素
//未找到,缩小查找区间
else if(key<ST.R[mid].key) Search_Bin(ST,key,low,mid-1);//继续在前半区间查找
else Search_Bin(ST,key,low+1,high); //继续在后半区间查找
}
int main(){
return 0;
}