《数据结构导论》之查找表

     我们知道,将数据采用顺序存储或者链式存储等多种方式存储不是最终目的,我们要使用存储的数据,发挥它的作用。但是,在使用数据时,要先对数据进行查找,在日常生活和各种软件系统中,查找是一种十分常见的操作,下面我为大家讲解一下我对查找表的理解。

导图:

                 


    由图可以看出,查找表可分为动态查找表和静态查找表。之所以这么区分他们,是根据我们的需求而来。如果我们仅需要查找表中的某一元素或某一元素的属性,则使用静态查找,如果需要对查找表结构进行修改,则选择动态查找。

静态查找表:

   静态查找表中,最简单的实现方式是以顺序表为存储结构,顺序表的存储更像我们的数组,通过键值进行存储。查找时,从表的最后一个元素开始向前查找,设置第一个元素为岗哨,将要被查找的值赋给岗哨。每次拿岗哨的值与表中的值从后向前做对比。查到后终止,返回位置。也可以倒过来,将岗哨放在最后,从后往前查。
   静态查找表是已经完全储存好数据的表,为了提高查找速率,我们将数据进行处理,使其有序。方法有两种:按块有序,建立有序表。按块有序,将数据分块,标明每块的最大键值和块起始位置(索引派上用场)。在查找时,分两个阶段:第一阶段,将key与最大键值比较确定在哪个块(这个过程可以使用二分查找,也可使用顺序查找)。而建立完全的有序表后,就可以使用我们最熟悉的二分查找(向下取整)。

动态查找表:

   静态查找表一旦建立后,所含的数据元素是固定不变的,动态查找表是根据排序规则实现边查边生成。有两种方式:二叉排序树(二分法)和散列表(函数关系)。

二叉排序树:

性质:

若左子树不空,则左子树上所有的结点的键值均小于根结点键值
若右子树不空,则右子树上所有的结点的键值均大于根结点键值
根的左右子树也分别为二叉排序树。
中序遍历得到升序序列(有序序列)  
  查找二叉排序树中的数据和向其中插入数据都需要查找,因为二叉树的性质,查找的过程就使用了二分法规则。二叉排序树是一种树形存储,和顺序表一样,都是将值存储到某种结构中,根据该结构的位置找到存储位置。我们在使用该值时,要先用键值进行比较,才能找到在该结构中的位置,比如,数组 ele【i】=key。

散列表:

   散列表使用函数将键值和存储地址建立函数关系,直接根据key找到存储位置,不需要找i。关于散列表,主要是解决同义词之间的冲突,相信大家看我的导图就能理解了,我就不多做解释了。

最后:

   这是我对概念的简单理解,还没有联系到具体的生活中,如果大家有更通俗的理解,希望咱们能一起探讨。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 42
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王师傅66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值