数据结构 第七章学习小结

(一)查找的基本概念:查找表,关键字,动态查找表(能对表做修改操作),静态查找表,ASL--平均查找长度ASL=Σpc(从i到n)

(二)查找 : 首先是要注意设置哨兵:例 ST.R[0].key=key; 将第一个元素的值赋值为key; 可以防止确保访问不会越界。

  然后是二分查找:(需要注意的是,二分查找要求的是采用顺序存储结构,元素按关键字有序排列)

int Search_Bin(SSTable ST,int x,int length)
{
    int mid;
    int low=1;
    int high = length;//设置初值
    while(low<=high)
    {
        mid=(low+high)/2;
        if(x==ST.R[mid]) 
        {
         return mid;}//找待查元素
        else if(x 
 

注意:顺序查找的时间复杂度为O(n),而二分查找的时间复杂度为O(log2n)

(三)二叉排序树

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
  对于二叉排序树,其基本过程为查找,所以时间复杂度也为O(log2n)
 
平衡二叉树:
(1)左子树与右子树的深度差的绝对值不超过1;
(2)左子树与右子树也是平衡二叉树;
平衡因子定义为左右子树的深度之差平衡因子只为0,-1,1;这部分内容还有具体看书,,(还有后面的B树和B+树的内容)
 
(四)散列表
不需要元素有序排列 还引入了冲突和同义词的概念(这里比较熟,就不罗列了)
散列函数的构造方法:数字分析法,平方取中法,折叠法,除留取余法(这种方法用得较多)
下面就是处理冲突的方法:
开放地址法和链地址法;
1.开放地址主要有线性探测和二次探测,即在发生冲突时,从发生冲突地址的下一单元出发寻找空单元,这两种方法只是间隔不同。
2.链地址法:即把具有相同散列地址的记录放在同一个单链表中

你可能感兴趣的:(数据结构 第七章学习小结)