6种查找方法

1.顺序查找

顺序查找又叫线性查找,主要用于在线性表(顺序表和链表均可)中进行查找。
基本思想:从线型表一端开始,逐个检查关键字是否满足给定的条件。
ASL=(n+1)/2

2.折半查找

又称为二分查找。仅适用于有序的顺序表。
基本思想:将给定的关键字和给定序列中间位置关键字比较,若相等则成功;若不相等,则在中间元素的前半部分或后半部分范围重复查找,直到找到,或查找不成功。

查找判定树:
在这里插入图片描述
ASL(成功)如上图。

3.分块查找

又称为索引顺序查找。
基本思想:将查找表分为若干子块。块内元素可以无序,但块间是有序的。(即第一个块中最大关键字小于第二个块中的所有关键字)

查找过程:1.在索引表中确定待查记录所在的块(折半查找或者顺序查找);
2.块内顺序查找。

4.二叉排序树

左子树关键字<根关键字<右子树关键字

非递归:

typedef struct BiTNode{
	ElemType key;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTNode* BSTSearch(BiTree p,int key)
{
	while(p!=null)
	{
		if(p==p->key)
		{
			return p;
		}
		else if(key<p->key)
		{
			return p->lchild;
		}
		else
		{
			return p->rchild;
		}
	}
	return null;
}

递归

typedef struct BiTNode{
	ElemType key;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTNode* BSTSearch(BiTree p,int key)
{
	if(p==null)
	{
		return null;
	}
	else
	{
		 if(p==p->key)
		 {
			return p;
		 }
		 else if(key<p->key)
		 {
			return BSTSearch(p->lchild,key)
		 }
		 else
		 {
			return BSTSearch(p->rchild,key);
		 }
	}
}

5.B树和B+树

B树特性:
1.m阶B树每个结点至多有m个分支;
2.根结点且不是叶子结点至少有2个分支;
3.非根非叶子结点至少有【(m/2)上取整 】 个分支;
4.结点内关键字互不相等;
5.n个分支对应n-1个关键字;
6.关键字按递增顺序排列;
7.叶子结点都在同一层
8.所有结点包含信息
9.不可以顺序查找

一个关键字的空位子对应一个分支

在这里插入图片描述
B+树特性:
1.n个关键字n个分支;
2.m阶B+树每个结点至多有m个分支;
3.叶结点包含信息,非叶结点只是索引作用
4.可以顺序查找

一个关键字对应一个分支
在这里插入图片描述

6.散列表

散列函数:一个把查找表中的关键字映射成该关键字对应地址的函数。
散列函数的构造方法:
1.直接定地址法
H(key)=a*key+b
2.除留余数法
H(key)=key%p
表长m,p是小于m但最接近m的质数。

解决冲突的方法
1.开放定地址法
其中的线型探测法:冲突发生时顺序探测下一个单元。
2.拉链法
把所有的同义词存储在一个线性链表中。

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值