查找:
只进行查找的称为静态查找表;
在查找的过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的元素,称为动态查找表。
静态查找:
1.顺序查找:
算法思想:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录;反之,若直至第一个记录,其关键字和给定值比较都不等,则表明表中没有所查记录,查找不成功
平均查找长度:(n+1)/2
2、二分查找(有序表):
算法思想:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。
平均查找长度:(n+1)/n *log2(n+1) -1
3、分块查找(索引顺序查找):
算法思想:首先将一个线性表(即主表)按照一定的函数关系和条件划分为若干个逻辑字表,为每个字表建立一个索引项,由所有的字表的索引项构成一个索引表。当进行分块查找时,先根据所给的关键字查找索引表,从中找出给定k值小于或等于索引值的那个索引块,找到待查块,然后在主表中查找该快,查找待查的记录。
平均查找长度:索引表是有序的,所以在索引表中可以用顺序查找,也可以用折半查找;而块内的记录的随机排序的,所以在块中用顺序查找。
顺序查找确定块:平均查找长度为1/2 *(n/s +s)+1
二分查找确定块:平均查找长度为log2(n/s +1)+s/2
动态查找:(表结构动态生成)
http://www.doc88.com/p-930477746758.html
1、二叉排序树查找
二叉排序树(二叉搜索树、二叉查找树):二叉排序树中序遍历得到的必定是一个有序序列。
查找过程:
(1)若查找树为空,查找失败;
(2)若查找树非空,将给定值和查找树的根节点比较:
时间复杂度:平均O(logn),最坏O(n)
二叉排序树的插入:
新插入的结点一定是一个新添加的叶子节点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。
二叉排序树的结点删除:
假设在二叉排序树上被删结点为p,其双亲结点为f,且p为f的左孩子,下面分三种情况讨论:
(1)若p结点为叶子节点,即pl和pr均为空树,由于删去叶子节点不破坏整棵树的结构,则只需修改其双亲结点的指针即可。
(2)若p结点只有左子树pl或者只有右子树pr,此时只要令pl和pr直接成为其双亲结点f的左子树即可。
(3)若p结点的左子树和右子树均不空。
2、二叉平衡树
左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1.若将二叉树上结点的平衡因子定义为该节点的左子树的深度减去它的右子树的深度,则平衡二叉树上所有结点的平衡因子只能是-1,1,0.平衡树查找的时间复杂度为O()logn