数据结构(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,折半查找比较次数最多不超过深度。

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

  • 顺序表和有序表的比较

在这里插入图片描述

分块查找

  • 索引顺序表 = 索引(关键字项+指针项) + 顺序表
发布了7 篇原创文章 · 获赞 0 · 访问量 390

猜你喜欢

转载自blog.csdn.net/weixin_44145782/article/details/90438202