数据结构——查找

1.查找

改变查找表中数据元素之间的关系以至于提高查找效率,即设置面向查找操作的数据结构,查找结构。

查找表-静态/动态

查找表经常进行查找(查询和检索)、插入、删除三大操作

数据项(字段)-(主/次)关键码

数据元素(记录)-(主/次)关键字

2.顺序表查找

顺序查找

优化(在查找的终点设置哨兵):减少不必要的判断语句提高程序效率

3.有序表查找

折半查找/二分查找:只适用于可以1随机存取的有序的顺序表。

由折半查找的定义,每次把一个数组从中间结点分割时,总是把数组分为结点数相差最多不超过 1 的两个子数组(且总是同一边多一,取决于mid向上还是向下取整),从而使得对应的判定树的两棵子树高度差的绝对值不超过 1 ,所以其判定树应是平衡二叉树,有n+1个查找失败结点(不计数总高度)。更适用于静态查找表。

/* 折半查找 */
int Binary_Search(int *a,int n,int key)
{
	int low,high,mid;
	low=1;	/* 定义最低下标为记录首位 */
	high=n;	/* 定义最高下标为记录末位 */
	while(low<=high)
	{
		mid=(low+high)/2;	/* 折半 */
		
		if (key<a[mid])		/* 若查找值比中值小 */
			high=mid-1;		/* 最高下标调整到中位下标小一位 */
		else if (key>a[mid])/* 若查找值比中值大 */
			low=mid+1;		/* 最低下标调整到中位下标大一位 */
		else
		{
			return mid;		/* 若相等则说明mid即为查找到的位置 */
		}
	}
	return 0;
}

*插值查找和*斐波那契查找,时间复杂度都为log2n,它们的本质为分割点的选择。

分块查找,总元素数n,当块数和块内元素数等于n^0.5时,ASL最小,为n^0.5+1。

4.*线性索引查找

索引是把一个关键字与它对应的记录相关联的过程。

一个索引项至少包含关键字与对应的记录指针。

对于m阶B树,一个结点占用一个磁盘页块,包含m/2向下取整-1至m-1个数的索引项(关键字+记录指针)。

三种线性索引:稠密索引、分块索引、倒排索引。

5.二叉排序树

二叉排序树:为了提高查找、插入、删除关键词的速度。实现动态查找表的高效率。

/* 二叉树的二叉链表结点结构定义 */
typedef	st
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值