1.一般线性表的顺序查找
typedef struct{ //查找表的数据结构(顺序表)
int *elem; //动态数组基址
int TableLen; //表的长度
}SSTable;
//顺序查找
int Search_seq(SSTable ST, int key){
int i;
for(i=0; i<ST.TableLen && ST.elem[i]!=key; ++i);
//查找成功,则返回元素下标;查找失败,则返回-1
return i==ST.TableLen ? -1 : i;
}
-------------------------------------
//法二:添加哨兵
int Search_seq(SSTable ST, int key){
ST.elem[0] = key; //“哨兵”,放到0号位置
int i;
for(i=ST.TableLen; ST.elem[i]!=key; --i); //从后往前找,数据从下标1开始存
return i; //查找成功,则返回元素下标;查找失败,则返回0
}
2.折半查找
typedef struct{ //查找表的数据结构(顺序表)
int *elem; //动态数组基址
int TableLen; //表的长度
}SSTable;
//折半查找
int Binary_Search(SSTable L, int key){
int low=0, high=L.TableLen-1, mid;
while(low<=high){
mid = (low+high)/2; //取中间位置
if(L.elem[mid] == key)
return mid; //查找成功则返回所在位置
else if(L.elem[mid]>key)
high = mid-1; //从前半部分继续查找
else
low = mid+1; //从后半部分继续查找
}
return -1; //查找失败,返回-1
}