数据结构(9)

博客介绍了查找表的概念,包括其定义、操作和分类,还说明了关键字的类型及查找的成功与失败情况。重点阐述了静态查找表,如顺序查找、折半查找和分块查找,并对顺序查找和折半查找进行了性能分析,提及用判定树描述折半查找过程。

9.1查找的概念

  • ?查找表:由同一类型的数据元素(或记录)构成的集合,数据元素之间存在着松散的关系。
  • 操作:查询(是否存在表中),检索(属性),插入,删除。
  • 查找表分类:静态查找表(仅查询,检索),动态查找表(可插入,删除)。
  • ?关键字:是数据元素中某个数据项的值,用于标识(识别)数据元素(或记录)。分为主关键字(可识别唯一一个记录),次关键字(可识别若干记录)。
  • ?查找:查找成功(给出记录信息或返回位置),查找不成功(给出空记录或空指针)。
  • 为了提高查找效率,可以人为地附加某种确定关系,用另一种结构来表示查找表。
  • 查找方法评价:查找速度,占用存储空间,算法本身复杂程度,平均查找长度ASL(ASL越大,时间性能越差)。
    在这里插入图片描述

9.2静态查找表

  • 静态查找表的顺序存储结构
typedef int KeyType;
typedef  struct {
    KeyType  key;
}ElemType;

typedef  struct {
    ElemType  *elem;     // 数据元素存储空间基址
    int       length;   
} SSTable;

顺序查找

  • 无序查找
  • 从表的一端逐个进行比较。
int Search_Seq(SSTable ST,KeyType key) {
	int i;
	ST.elem[0].key = key; // 设置“哨兵”
 	for (i=ST.length; ST.elem[i].key!=key; --i);
    return i;
} // Search_Seq

性能分析(ASL)

查找成功(等概率):
在这里插入图片描述
查找失败(等概率):

在这里插入图片描述

折半查找

  • 有序表的查找
int Search_Bin(SSTable ST,KeyType key){
	int low,mid,high;
	low = 1;
	high = ST.length; //置区间初值
	while(low <= high)
	{
		mid = (low + high) / 2;
		if (key == ST.elem[mid].key)
		 	return mid;
		else if (key < ST.elem[mid].key)
			high = mid - 1;
	    else 
	    	low = mid + 1;
	}
		return 0;//不存在待查元素
}

性能分析(ASL)

  • 判定树:描述查找过程的二叉树。
  • 有n个结点的判定树的深度为下取整(log2n)+1,折半查找比较次数最多不超过深度。

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

  • 顺序表和有序表的比较

在这里插入图片描述

分块查找

  • 索引顺序表 = 索引(关键字项+指针项) + 顺序表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Vanessa Ni

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

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

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

打赏作者

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

抵扣说明:

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

余额充值