7.1 基本概念
查找:在数据集合中寻找满足某种条件的数据元素的过程
查找表(查找结构):用于查找的数据集合称为查找表,它由同一类型的数据元素(或记录)组成
关键字:数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的
查找表常见操作:
①查找符合条件的数据元素②插入删除某个数据元素
只需进行操作①——静态查找表
也要进行操作②——动态查找表
查找长度:在查找运算中,需要对比关键字的次数
平均查找长度(ASL):所有查找过程中进行关键字的比较次数的平均值
7.2 顺序查找
typedef struct{//查找表数据结构
ElemType *elem;//动态数组基址
int TableLen;//表的长度
}SSTable;
//一般顺序查找
int Search_Seq(SSTable ST,ElemType 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,ElemType key){
ST.elem[0]=key;//哨兵
int i;
for(i=ST.TableLen;ST.elem[i]!=key;--i);//从后往前找
return i;//成功返回下标,失败返回0
}
查找效率分析:
7.3 折半查找
//折半查找
int Binary_Search(SSTable L,ElemType 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
}
小结:
7.4 分块查找
7.5 B树和B+树
略