结点类型
typedef struct{
ElemType *elem;
int length;
}SSTable;
创建表: Create(&ST,n)
在这里插入代码片
销毁表: Destroy(&ST)
在这里插入代码片
读表元: Get(ST,pos)
在这里插入代码片
插入: Insert(&ST,e)
在这里插入代码片
删除: Delete(&ST,K)
在这里插入代码片
顺序查找: Search(ST,K)
int Search(SSTable ST, KeyType K) {
int i=ST.length;
while(i>0 && ST.elem[i].key!=K) i--;
return i ;
}
int Search(SSTable ST, KeyType K) {
int i=ST.length;
ST.elem[0].key=K;
while(ST.elem[i].key!=K) i--;
return i;
}
折半查找
int Search_Bin(SSTable ST, KeyType K){
int low=1, high=ST.length;
int mid;
while(low<=high){
mid=(low+high)/2;
if(K<ST[mid].key)
high=mid-1;
else if(K>ST[mid].key)
low=mid+1;
else return mid;
}
return 0;
}
索引顺序查找
typedef struct{
KeyType key;
int stadr;
}IndexItem;
typedef struct{
IndexItem *elem;
int length;
}IndexTable;
int search_Idx( SSTable ST, IndexTable ID, KeyType K ) {
low=0;high=ID.length-1; found=FALSE;
if(K>ID.elem[high].key) return 0;
while(low<=high && !found){
mid=(low+high)/2;
if(K<ID.elem[mid].key) high=mid-1;
else if(K>ID.elem[mid].key) low=mid+1;
else {found=TRUE; low=mid;}
}
s=ID.elem[low].stadr;
if(low<ID.length-1) t=ID.elem[low+1].stadr-1;
else t=ST.length;
for(i=s; i<=t&&ST.elem[i].key!=K; i++);
if(k<=t) return i;
else return 0;
}