数据结构--查找

一.查找的基本概念

查找是由同一类型的数据元素(或记录)构成的集合。由于集合中数据元素存在着松散的关系,因此查找表是一种应用灵便的结构

1.关键字

主关键字:可唯一标识一个记录的关键字是主关键字
次关键字:相反,用以识别若干记录的关键字是次关键字
查找算法的评价指标:

2.关键字的平均比较次数,也称平均比较长度ASL

3.分类

静态查找表:仅作查询(检索)操作的查找表
动态查找表:作插入和删除操作的查找表

二.线性表的查找----ASL=(n+1)/2

1.顺序查找(线性查找)

顺序表或线性链表表示的静态查找表
表内元素之间无序

1.数据元素类型定义

在这里插入图片描述

2.顺序表ST中查找值为key的数据元素(从最后一个元素开始比较)

在这里插入图片描述

改进:可以把待查关键字key存入表头(哨兵,监视岗)

在这里插入图片描述
特别需要注意for语句的“;”

3.算法分析

1.时间复杂度O(n)
查找成功时的平均查找长度,设表中各个记录查找概率相同
ASL=(n+1)/2
2.空间复杂度–一个辅助空间-----O(1)

4.提高查找概率

在这里插入图片描述
简单来说就是,把查找概率大的尽量放在后面查找次数少的

5.顺序查找优缺点

优点:算法简单,逻辑次序无要求,不同存储结构均适用
缺点:ASL太长,时间效率太低

2.折半查找(二分或对分查找)

每次将待查找记录所在区间缩小一半

1.折半查找算法(非递归算法)

在这里插入图片描述
在这里插入图片描述

2.折半查找(递归算法)

int Search_Bin(SSTable ST,KeyType key,int low,int high)
{
  if(low>high)
      return 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-1);
   else if(key>ST.elem[mid].key)
     Search_Bin(ST,key,mid+1,high);
}

3.算法分析

折半查找性能分析(判定树)
在这里插入图片描述
在这里插入图片描述

4.折半查找优缺点

优点:效率比顺序查找高
缺点:只适用于有序表,且限于顺序结构(对线性链表无效)

3.分块查找(索引顺序查找)

1.条件:

在这里插入图片描述

2.算法分析

在这里插入图片描述

3.优缺点

在这里插入图片描述

4.查找方法比较

在这里插入图片描述

三.树表的查找

在这里插入图片描述

1.二叉排序树

在这里插入图片描述

性质:
中序遍历非空二叉排序树所得到的数据元素序列是一个按照关键字排序的递增有序序列

1.存储结构

在这里插入图片描述

2.算法思想

3.二叉排序树的递归查找

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 if(key>T->data.key)
      return SearchBST(T->rchild,key);
}

4.算法分析

二叉树上面查找某关键字等于给定值的结点过程,其实就是走了一条从根到该结点的路径
比较的关键字次数=此结点所在的层次数
最多的比较次数=树的深度
在这里插入图片描述

5.提高形态不平衡的二叉排序树的查找效率–平衡二叉树

6.二叉排序树的操作

1.插入

在这里插入图片描述

2.生成

从空树出发,经过一系列查找,插入操作之后,可以生成一颗二叉排序树

在这里插入图片描述

3.删除

在这里插入图片描述

1.删除的是叶子结点

直接删除该结点
在这里插入图片描述

2.被删除的结点只有左子树或者只有右子树

直接用其左子树或者右子树替换
在这里插入图片描述

3.被删除的结点既有左子树又有右子树

在这里插入图片描述

2.平衡二叉树

1.定义

在这里插入图片描述

2.失衡二叉树的分析和调整

平衡调整的四种类型

在这里插入图片描述

调整原则:
1.降低高度
2.保持二叉排序树的性质

3.散列表的查找

1.基本概念

记录存储位置与关键字之间存在的对应关系
对应关系—hash函数

2.散列表的术语

在这里插入图片描述
在这里插入图片描述

3.散列函数构造方法

在这里插入图片描述

1.直接定址法

在这里插入图片描述

2.除留余数法

在这里插入图片描述

4.处理冲突的方法

1.开放地址法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.链地址法(拉链法)

在这里插入图片描述
在这里插入图片描述

5.散列表的查找

查找过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 散列表技术具有很好的平均性能,优于一些从传统技术
  • 链地址法优于开地址法
  • 除留余数法作散列函数优于其他类型的函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值