静态查找表

静态查找表只查找,不进行插入或删除。

静态查找表的操作有:
Create(&ST, n)构造一个含有 n 个数据元素的静态查找表

Destory(&ST) 销毁表 ST,前提是表存在

Search(ST, kval) 若 ST 中存在其关键字等于 kval 的数据元素,则函数值为该元素的值,或在查找表中的位置,否则为空。

Traverse(ST)  按照某种次序输出 ST 中的每个数据元素

静态查找表的顺序存储表示:

 

typedef struct
{
   ElemType *elem;//数据元素存储空间基址,建表时按实际长度分配,0号单元留空
   int length;//表中元素个数
}SSTable;

1、静态查找的方法

 

(1)顺序查找

 

int Search_Seq(SSTable ST,KeyType kval)
{//在顺序表 ST中顺序查找其关键字等于 kval 的数据元素,若找到,则函数值为该元素在表中的位置
   ST.elem[0].key=kval;//设置哨兵
   for(i=ST;length; ST.elem[i].key != kval; --i);//从后往前找
   return i;//找不到时,i为0
}

平均查找长度:查找过程中先后和给定值进行比较的关键字个数的期望值称做查找算法的平均查找长度。

 

顺序查找的平均查找长度是 (n+1)/2

(2)折半查找

折半查找又称二分查找。

 

int Search_Bin(SSTable ST, KeyType kval)
{//在有序表ST中折半查找其关键字等于 kval 的数据元素,若找到,则函数值为该元素在表中的位置,否则为0
   low=1; high=ST.length;//置区间初值
   while(low<=high)
   {
      mid=(low+high)/2;
      if(kval == ST.elem[mid].key)  return mid;//找到查找元素
      else
           if(kval < ST.elem[mid].key) high=mid-1;
           else   low=mid+1;
   }
   return 0;//顺序表中不存在待查元素
}

折半查找的平均查找长度为

 

      ASL = (n+1)/n * log2 (n+1) - 1;

(3)分块查找

分块查找又称索引顺序查找,其性能介于顺序查找和折半查找之间,它适合对关键字“分块有序”的查找表进行查找操作。

块间有序,块内无序。查找表中的记录按其关键字的大小分成若干块,前一块的最大关键字小于后一块的最大关键字,而各块内部的关键字不一定有序。

查找的过程分为两步进行:先在索引表中进行折半或顺序查找,以确定待查记录“所在块”;然后在已限定的那一块中进行顺序查找。

 

 

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值