数据结构--查找

本文介绍了数据结构中的查找技术,包括线性查找、折半查找、分块查找以及树表和哈希表的查找。重点讲解了折半查找的非递归和递归实现,二叉排序树的查找与插入操作,以及哈希表解决冲突的开放定址法和链地址法。
摘要由CSDN通过智能技术生成

Point:折半查找 、二叉排序树的构造和查找、 哈希函数(除留余数法)的构造 、哈希函数解决冲突的方法及其特点

查找的基本概念

查找表 :

  由同一类型的数据元素(或记录)构成的集合

关键字

  记录中某个数据项的值,可用来识别一个记录

主关键字:

  唯一标识数据元素

次关键字:

  可以标识若干个数据元素

对查找表经常进行的操作有:
  (
1)查询元素;
  (
2)检索属性;
  (
3)插入;
  (
4)删除。
分为静态查找(1)(2)和动态查找(3)(4)

平均查找长度ASL

线性表的查找

一、顺序查找(线性查找)

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

顺序表的表示

typedef struct {
          ElemType   *R; //表基址
          int length;     //表长
}SSTable;

 查找函数:

int LocateELem(SqList L,ElemType e)
{  for (i=0;i< L.length;i++)
      if (L.elem[i]==e) return i+1;                
  return 0;
}
//改进
int Search_Seq( SSTable  ST , KeyType  key ){
   //若成功返回其位置信息,否则返回0
  ST.R[0].key =key;   
 for( i=ST.length; ST.R[i].key!=key; --i  );
 //不用for(i=n; i>0 && ST.R[i].key!=key; --i)
   return i; 

}
//设置了监视哨,减少了检查是否查找完毕的判断,省时;
空间复杂度:一个辅助空间。
时间复杂度:

1) 查找成功

    ASLs(n)=(1+2+ ... +n)/n =(n+1)/2

2)查找不成功   ASLf =n+1

 特点:

算法简单,对表结构无任何要求(顺序和链式)
n 很大时查找效率较低
改进措施: 非等概率 查找时,可按照查找概率进行排序。

易错:

n个数存在一维数组A[1..n]中,在进行顺序查找时,这n个数的排列有序或无序其平均查找

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值