查找
最后一波了,九月份,感觉沉不下心学习了。自习室的人也逐渐变少了,希望快点开学,图书馆也快点开放,这样可以天天逼自己去图书馆吧!!(目标:9,10月王道二刷选择+天勤知识点补充+天勤解答题+期末卷子13,11月真题,12月真题二刷+错题+查漏补缺)Fighting!!!
1. 一般线性表的顺序查找
typedef struct{ //查找表的数据结构
ElemType *elem;//元素存储空间基址,建表时按实际长度分配,0号单元留空
Int TableLen;//表的长度
}SSTable;
int Search_Seq(SSTable ST,ElemType key)
{
//在顺序表ST中顺序查找关键字为key的元素,若找到则返回该元素在表中的位置
ST.elem[0]=key;//“哨兵”
for(i=ST.TableLen;ST.elem[i]!=key;--i) //从后往前找
return i;//若表中不存在关键字为key的元素,将查找到i为0时退出for循环
}
2.折半查找(二分查找)
int Binary_Search(SeqList L,ElemType key){
//在有序表L中查找关键字为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;
}