1.查找的基本概念
2. 线性表的查找
2.1 顺序查找(线性查找)
【算法2.1.0】类型定义
typedef struct {//数据元素类型定义
KeyType key;//关键字域
... //其他域
}ElemType;
typedef struct { //顺序表结构类型定义
ElemType *R; //表基址
int length; //表长
}SSTable; //Sequential Search Table
SSTable ST; //定义顺序表ST
【算法2.1.1】顺序查找
int Search_Seq( SSTable ST , KeyType key ){//若成功返回其位置信息,否则返回0
for( i=ST.length; i>=1; --i )
if ( ST.R[ i ].key==key ) return i;
return o;
}
int Search_Seq(SSTable ST,KeyType key) {
for (i = ST.length ; ST.R[i].key != key ; --i )
if ( i <= 0) break ;
if (i > 0) return i ;
else return 0 ;
}
int Search_Seq(SSTable ST,KeyType key){
for (i = ST.length ; ST.R[i].key != key && i>0 ; --i );
if (i > 0) return i;
else return 0 ;
}
【算法2.1.2】改进后的顺序查找
int Search_Seq( SSTable ST , KeyType key ){
ST.R[O].key =key;
for( i=ST.length; ST.R[i].key!=key; --i)
return i;
}
性能分析
2.2 折半查找(二分或对分查找)
【算法2.2.1】非递归算法
int Search_Bin ( SSTable ST,KeyType key ) {
low = 1 ; high = ST.length ; //置区间初值
while (low <= high) {
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 0 ; //顺序表中不存在待查元素
}// Search_Bin
【算法2.2.2】递归算法
int Search_Bin (SSTable ST, keyType key, int low, int high) {
if(low>high)
return 0; //查找不到时返回0
mid=(low+high)/2;
if(key==ST.elem[mid].key)
return mid;
else if(key<ST.elem[mid].key)
Search_Bin(ST,key,low,mid);
else
Search_Bin(ST,key,mid,high);
}
性能分析
2.3 分块查找
性能分析
3. 树表的查找
3.1 二叉排序树
【算法3.1.0】类型定义
typedef struct {
KeyType key; //关键字项
InfoType otherinfo;//其他数据域
}ElemType;
typedef struct BSTNode {
ElemType data; //数据域
struct BSTNode *lchild,*rchild; //左右孩子指针
}BSTNode,*BSTree;
BSTree T;//定义二叉排序树T
【算法3.1.1】递归查找
BSTree SearchBST(BSTree T,KeyType key) {
if((T) || key==T->data.key) return T;
else if (key<T->data.key)
return SearchBST(T->Ichild,key);//在左子树中继续查找
else
return SearchBST(T->rchild,key);//在右子树中继续查找
}// SearchBST
性能分析
插入
生成
删除
3.2 平衡二叉树
分析与调整
LL型调整
RR型调整
LR型调整
RL型调整
例题
4. 哈希表的查找
4.1 基本术语
4.2 散列函数构造方法
直接定址法
除留余数法
4.3 处理冲突
开放定址法(开地址法)
链地址法(拉链法)
4.4 散列表查找
存中…(img-3YYHv8O1-1642651437063)]
[外链图片转存中…(img-xJkp7FIE-1642651437063)]
[外链图片转存中…(img-jdamQ6od-1642651437063)]
[外链图片转存中…(img-OiZ0F4JV-1642651437064)]