1. 程式人生 > 實用技巧 >資料結構-第七章 學習小結

資料結構-第七章 學習小結

一、本章思維導圖

二、知識點

1、順序查詢

(1)普通的順序查詢

(2)設定監視哨的順序查詢

int search(SSTable ST, KeyType key)
{
    for(i=ST.length;i>=1;--i)
        if(ST.R[i].key==key) return i; //從後往前找
    return 0;
}
普通順序查詢程式碼
int search(SSTable ST, KeyType key)
{
    ST.R[0].key==key; //"哨兵"
    for(i=ST.length;ST.R[i].key!=key;--i); //
從後往前找 return 0; }
設定監視哨的順序查詢程式碼

2、折半查詢

int search(SSTable ST, KeyType key)
{
    low=1;
    high=ST.length;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(key==ST.R[mid].key) return mid; //找到待查元素
        else if(key<ST.R[mid].key) high=mid-1; //繼續在前一子表進行查詢
        else low=mid+1
; // 繼續在後一子表進行查詢 } return 0; //表中不存在待查元素 }
折半查詢程式碼

適合折半查詢的資料量分析:

資料量太小不適用,直接用順序查詢即可;

資料量太大也不適用,資料元素儲存在陣列中,若資料量太大會超出記憶體課連續空間。

3、分塊查詢(索引順序查詢)

塊間有序,塊內無序。

索引表(關鍵字項和指標項)

ASL=Lb+Lw=[1/2(n/s)+s]+1,其中Lb為查詢索引表確定所在塊的平均查詢長度,Lw為在塊中查詢元素的平均查詢長度,s為塊內的記錄個數。

4、二叉排序樹

(1)二叉排序樹定義:

  二叉排序樹或者是空樹或者是具有下列性質的二叉樹:

    1. 若它的左子樹
      不空,則左子樹上所有結點的值均小於它的根結點的值。
    2. 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值。
    3. 它的左、右子樹也分別為二叉排序樹。

(2)二叉樹的查詢演算法

BSTree SearchBST(BSTree T, KeyType key) 
{//二叉排序樹查詢 
   if((T==NULL) || key==T->data.key) 
        return T; //查詢結束
   else if(key < T->data.key) 
        return SearchBST(T->lchild, key); //在左子樹中繼續查詢 
    else
        return SearchBST(T->rchild, key);  //在右子樹中繼續查詢 
} 
查詢(遞迴)

5、散列表(雜湊表)

(1)雜湊函式的構造方法

  • 數字分析法:從關鍵字中提取分佈均勻的若干位或他們的組合作為地址。

    適用情況:事先必須明確知道所有關鍵字每一位上各種數字的分佈情況。

  • 平方取中法:取關鍵字平方後的中間幾位或其組合作為雜湊地址,則使隨機分佈的關鍵字得到的雜湊地址也是隨機的。

    適用情況:不能事先了解關鍵字的所有情況,或難於直接從關鍵字中找到取值較分散的幾位。

  • 摺疊法:

    適用情況:適用於雜湊地址的位數較少,而關鍵字的位數較多,且難於直接從關鍵字中找到取值較分散的幾位。

  • 除留餘數法:H(key)=key%p;選取適當的p,一般情況下,p為小於表長的最大質數

    適用範圍廣,計算簡單,是常用的構造雜湊函式的方法。不僅可以對關鍵字取模,也可以在摺疊、平方取中等運算後取模。

(2)處理衝突方法

  開放地址法:Hi=(H(key)+di)%m

    線性探測法:di=1,2,3,...,m-1

    二次探測法:di=di = 12,-12,22,-22,32,-32,… +k2,-k2(k<=m/2)

    偽隨機探測法:di= 偽隨機數序列

  鏈地址法:

    散列表:

    

(3)總結:

  1. 雜湊表技術具有很好的平均效能,優於一些傳統技術
  2. 鏈地址法優於開地址法
  3. 除留餘數法作為雜湊函式優於其他型別函式

6、各種比較

(1)平均查詢長度比較

(2)順序查詢、折半查詢和分塊查詢的比較

(3)折半查詢和二叉排序樹查詢的比較

三、分享資料:

平衡二叉樹的平衡調整:平衡二叉樹(樹的旋轉),我覺得這篇部落格寫得很清楚,當時聽完課懵懵的,看完清晰了,裡面還附有例項幫助理解。

B-樹和B+樹:B樹和B+樹的插入、刪除圖解,這篇部落格也可以幫助你理解B-樹和B+樹。