数据结构----查找表

前言

突然发现自己过得茫茫然,学过的东西,似懂非懂,不知所以。昨晚打开以前瞎写
的博客,又来了兴趣。
人在反思中成长,在总结中进步。加油!

查找表

正文

静态查找表

  • 即在查找表中只进行查找操作。这时的查找表一般为链式存储,或者顺序存储。
顺序查找表

从前往后,或从后往前查找。这里较为简单,只附上代码。
顺序存储结构

typedef struct {
	int *arr;  //这里的数组为任意类型,这里用int代替,0号单元留空
	int length;
int Search_ Seq( SqTable ST, KeyType key) {
//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为
//该元素在表中的位置,否则为0。
int i=ST.length;
ST. elem[0].key = key;
//“哨兵”
while(ST.elem[i].key!=key ) i- - ;) // 从后往前找
return i; 
//找不到时,i为0
} // Search. Seq

平均查找长度
ASL = nP1 +(n- 1)P2+…+ 2P1十Pn
当每个记录的查找相等时ASL=(n+1)/2

有序查找表

通常在有序查找表中使用 折半查找
算法

int SearchBin ( SqTable T, KeyType key ) {
/*在有序表R中二分查找其关键字等于K的数据元素;若找到,
则返回该元素在表中的位置, 否则返回0 */
int low,high;
low=1 ; high=T.length ;
while ( low<=high ) //当去向小于0时,未找到。返回0
{ mid=(low+high)/2 ;
if (key==T.elem[mid].key) return mid;
else if (key< T.elem[mid].key ) high =mid-1 ;
else low=mid+1 ;
}
return (0) ;
}

平均查找长度
在这里插入图片描述

索引查找表

建立一个索引表,索引表可以为一个二维数组,然后查找索引表,确定所查元素所在块号,在所确认的块号中遍历查找
在这里插入图片描述

平均查找长度为
在这里插入图片描述
在这里插入图片描述

动态查找表

即可以查找表中元素,又可以删除和添加表中元素

二叉排序树

二叉排序树的特点:
1.若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值。

2.若它的右子树不为空,则右子树上所有节点的值均大于它的根节点的值。

3.它的左右子树也分别为二叉排序树。

在这里插入图片描述

  • 查找
    利用递归算法
// f跟着T跑,但是慢一步,p返回T的最后递归结点
	 bool contains(BiTree T,  KeyType key ,BiTree f BiTree &p) {
	    if(!T){
	        p=f;return false;
	    }
		else if (key == T.data) {
		    p=T;
			return true;
		}
		else if (Key< T.data) {
			return contains(T.lChild, Key,T,p);
		}
		else {
			return contains(T.rChild, Key,T,p);
		}
	}
  • 插入
    在查找未果时插入
Status InsertBST(BiTree &T, ElemType e ) {
//当二叉排序树T中不存在关键字等于e.key的数据元素时,插人e并返回TRUE,
//否则返回FALSE
if ( !SearchBST ( T, e.key, NULL, p ) { //查找不成功
s=(BiTree) malloc (sizeof ( BiTNode));
s->data = e;
s-> 1child = s->rchild = NUL;if(!p)T= S;//被插结点*s为新的根结点
else if (e.key<T->data) p-> 1child = s;//被插结点*s为左孩子
else p->rchild = s; //被插结点*s为右孩子
return TRUE;
228
  • 删除
  1. 删除结点是叶子,直接删除
  2. 删除结点只有左子树或者右子树,只要将其双亲结点指向删除结点的孩子结点
  3. 被删结点既有左子树又有右子树,
    1)左子树继位,删除结点的右子树变成继位的那个左子树的最右下树
    2)中序排列后,用其前趋代替被删除结点,这个前趋绝对没有右子树(因为二叉排序树的中序排列是顺序排列,前趋就是这个结点的最右下子树),前趋的子树按照1)处理即可。
    在这里插入图片描述
平衡二叉树

关于平衡二叉树,这儿引用一篇优秀的简介与介绍: 链接(偷个懒)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值