数据结构与算法_【9】查找(C++实现)

参考:数据结构与算法基础(青岛大学-王卓)
传送门:
数据结构与算法_【1】概念引入(C++实现)
数据结构与算法_【2】线性表(顺序表链表)(C++实现)
数据结构与算法_【3】栈和队列(C++实现)
数据结构与算法_【4】串数组广义表(C++实现)
数据结构与算法_【5】树和二叉树(C++实现)
数据结构与算法_【6】树和森林(C++实现)
数据结构与算法_【7】哈夫曼树(C++实现)
数据结构与算法_【8】图(C++实现)
数据结构与算法_【9】查找(C++实现)
数据结构与算法_【10】排序(C++实现)

查找

1 查找的基本概念

查找表

在这里插入图片描述

什么是查找?

在这里插入图片描述

查找成功否?

在这里插入图片描述

查找的目的

在这里插入图片描述

查找表怎么分类?

在这里插入图片描述

如何评价查找算法?

在这里插入图片描述

查找过程中要研究什么?

2 线性表的查找

2.1 顺序查找(线性查找)

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

代码:

template<typename T>
int SeqList<T>::Search_Seq(T key)
{
	for (int i = 0; i < this->size; i++)
	{
		if (key == this->elem[i])
		{
			return i + 1;
		}
	}
	cout << "查询失败,返回-1" << endl;
	return -1;
}

改进,不用判断是否越界
改进后的查找可以消除一次判断,平均时间会减少一半,但是顺序表index0不能存储数据,要用来存储key数据!

在这里插入图片描述

算法时间效率分析:

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

2.2 折半查找(二分查找)

数据存储时是由有序的,用二分查找!
算法步骤:

在这里插入图片描述

代码:

template<typename T>
int SeqList<T>::Search_Bin(T key)
{
	int low = 0;
	int high = this->size - 1;
	int mid;
	while (low <= high)
	{
		mid = (low + high) / 2;
		if (key == this->elem[mid])
		{
			return mid + 1;
		}
		else if (key > this->elem[mid])
		{
			low = mid;
		}
		else
		{
			high = mid;
		}
	}
	cout << "查询失败,返回-1" << endl;
	return -1;
}

性能分析

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

2.3 分块查找

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

2.4 各方法比较

在这里插入图片描述

3 树表的查找(二叉排序树)

在这里插入图片描述

3.1 二叉排序树(二叉搜索树,二叉查找树)

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

算法思想:

在这里插入图片描述

实现:
用到递归,注意只针对二叉排序树!

在这里插入图片描述

算法分析:

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

二叉排序树的插入:

在这里插入图片描述

二叉排序树的生成:

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

二叉排序树的删除:

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

4 树表的查找(平衡二叉树)

平衡二叉树定义:

在这里插入图片描述

平衡因子(BF) = 结点左子树高度 - 结点右子树高度
平衡二叉树上所有结点的平衡因子只能是-1、0、1

在这里插入图片描述

失衡二叉排序树的分析和调整

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

(1)LL型调整

在这里插入图片描述

(2)RR型调整

在这里插入图片描述

(3)LR型调整

在这里插入图片描述

(4)RL型调整

在这里插入图片描述

例题:

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

5 散列表的查找

5.1 相关概念

基本思想:记录存储位置与关键字之间存在的对应关系

优点:查找效率高
缺点:空间效率低

若干术语:

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

构造散列函数考虑的因素:

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

直接定址法:

在这里插入图片描述

除留余数法:

在这里插入图片描述

解决冲突问题:
(1)开放地址法

在这里插入图片描述

(2)链地址法(拉链法)

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

5.2 查找:

例题:

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

几种方法比较:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值