静态查找表

本文详细介绍了静态表的查找操作,包括无序表和有序表的顺序查找、二分查找、插值查找以及分块查找。静态表不支持插入和删除,只适用于查找。顺序查找适用于无序表,二分查找在有序表中效率较高,插值查找适合元素分布均匀的有序表,而分块查找通过索引块加速定位。这些查找方法在静态数据集的应用中具有重要价值。
摘要由CSDN通过智能技术生成

8集合与静态查找

8.1 静态表的查找

8.1.1无序表

关键是把第0个位置空出来,从最后一位向前查找,返回0则不存在

//建立集合
template <class KEY,class OTHER>
struct SET
{
    KEY key;
    OTHER other;
};
//建立无序表
template<class KEY,class OTHER>
void seqSearch(SET<KEY,OTHER>data[],KEY x,int size)
{
int i;
data[0].key=x;
for(i=size;data[i].KEY!=x;i--);
return i;
}

8.1.2 有序表的查找

8.1.2.1顺序查找
template<class KEY,class OTHER>
int seqSearch(SET<KEY,OTHER>data[],const&KEY x,int size)
{
int i;
data[0].key=x;
//前一个数比这个数大则比较结束
//不相等则向前推进
for(i=size;data[i].key!=x&&data[i].key>data[i-1].key;i--);
if(x==data[i].key) return i;
else return 0;
}
8.1.2.2 二分查找

易错点是data中第一个元素位置是1

template <class KEY,class OTHER>
int binarySearch(SET<KEY,OTHER>data[],const KEY &x,int size)
{
    int low=1;
    int high=size;
    int mid=(high+low)/2;
    while(low<high)
    {
        if(data[mid].key==x) return mid;
        if(data[mid].key<x) high=mid-1;
        if(data[mid].key>x) low=mid+1;
        mid=(high+low)/2;

    }
    return 0;
}
8.1.2.3插值查找

适用于已经排好序,分布均匀,可以套公式算出查找的位置

8.1.2.4 分块查找

把有序表分成若干个索引块,索引块内部可以是有序表or无序表,但索引块之间一定有序
索引文件里包含块最大元素和块起始地址,帮助快速定位查找元素大概范围

*总结

针对静态的集合,介绍了查找操作的实现。包括顺序查找、二分查找、插值查找和分块查找。
静态表与动态表的区别是:静态表不支持插入删除操作,只能查找
但动态表不仅可以查找,还有插入删除操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值