山東中醫藥大學電腦科學與技術2班王鑫童第7章筆記

2021-06-27 11:12:37 字數 2064 閱讀 1719

在表中的位置;若整個表檢測完仍未找到與給定值相等的關鍵碼,則查詢失敗,給出失敗資訊。

改進的順序查詢

基本思想:設定「哨兵」。哨兵就是待查值,將它放在查詢方向的盡頭處,免去了在查詢過程中每一次比較後都要判斷查詢位置是否越界,從而提高查詢速度。

順序查詢的缺點平均查詢長度較大,特別是當待查詢集合中元素較多時,查詢效率較低。

順序查詢的優點:演算法簡單而且使用面廣。

折半查詢

使用條件:線性表中的記錄必須按關鍵碼有序;必須採用順序儲存。

基本思想:在有序表中,取中間記錄作為比較物件,若給定值與中間記錄的關鍵碼相等,則查詢成功;若給定值小於中間記錄的關鍵碼,則在中間記錄的左半區繼續查詢;若給定值大於中間記錄的關鍵碼,則在中間記錄的右半區繼續查詢。不斷重複上述過程,直到查詢成功,或所查詢的區域無記錄,查詢失敗。折半查詢判定樹:

判定樹:折半查詢的過程可以用二叉樹來描述,樹中的每個結點對應有序表中的乙個記錄,結點的值為該記錄在表中的位置。通常稱這個描述折半查詢過程的二叉樹為折半查詢判定樹,簡稱判定樹。

二叉排序樹(也稱二叉查詢樹):或者是一棵空的二叉樹,或者是具有下列性質的二叉樹:

⑴ 若它的左子樹不空,則左子樹上所有結點的值均小於根結點的值;

⑵ 若它的右子樹不空,則右子樹上所有結點的值均大於根結點的值;

⑶ 它的左右子樹也都是二叉排序樹。

若二叉排序樹為空樹,則新插入的結點為新的根結點;否則,新插入的結點必為乙個新的葉子結點,其插入位置由查詢過程得到。

二叉排序樹的刪除演算法——偽**

1. 若結點p是葉子,則直接刪除結點p;

2. 若結點p只有左子樹,則只需重接p的左子樹;

若結點p只有右子樹,則只需重接p的右子樹;

3. 若結點p的左右子樹均不空,則

3.1 查詢結點p的右子樹上的最左下結點s及其雙親結點par;

3.2 將結點s資料域替換到被刪結點p的資料域;

3.3 若結點p的右孩子無左子樹,

則將s的右子樹接到par的右子樹上;

否則,將s的右子樹接到結點par的左子樹上;

3.4 刪除結點s。

二叉排序樹的查詢在二叉排序樹中查詢給定值k的過程是:

⑴ 若root是空樹,則查詢失敗;

⑵ 若k=root->data,則查詢成功;否則

⑶ 若k<root->data,則在root的左子樹上查詢;否則

⑷ 在root的右子樹上查詢。

上述過程一直持續到k被找到或者待查詢的子樹為空,如果待查詢的子樹為空,則查詢失敗。

二叉排序樹的查詢效率在於只需查詢二個子樹之一。平衡二叉樹:或者是一棵空的二叉排序樹,或者是具有下列性質的二叉排序樹:

⑴ 根結點的左子樹和右子樹的深度最多相差1;

⑵ 根結點的左子樹和右子樹也都是平衡二叉樹。 平衡因子:結點的平衡因子是該結點的左子樹的深度與右子樹的深度之差。

最小不平衡子樹:在平衡二叉樹的構造過程中,以距離插入結點最近的、且平衡因子的絕對值大於1的結點為根的子樹。

構造平衡二叉樹的基本思想:每插入乙個結點,

(1)從插入結點開始向上計算各結點的平衡因子,如果某結點平衡因子的絕對值超過1,則說明插入操作破壞了二叉排序樹的平衡性,需要進行平衡調整;否則繼續執行插入操作。

(2)如果二叉排序樹不平衡,則找出最小不平衡子樹的根結點,根據新插入結點與最小不平衡子樹根結點之間的關係判斷調整型別。

(3)根據調整型別進行相應的調整,使之成為新的平衡子樹。

雜湊表的查詢技術:

設計雜湊函式一般應遵循以下原則:

⑴ 計算簡單。雜湊函式不應該有很大的計算量,否則會降低查詢效率。

⑵ 函式值即雜湊位址分布均勻。函式值要盡量均勻散布在位址空間,這樣才能保證儲存空間的有效利用並減少衝突。衝突:對於兩個不同關鍵碼ki≠kj,有h(ki)=h(kj),即兩個不同的記錄需要存放在同乙個儲存位置,ki和kj相對於h稱做同義詞。

處理衝突的方法——拉鍊法(鏈位址法)

基本思想:將所有雜湊位址相同的記錄,即所有同義詞記錄儲存在乙個單鏈表中(稱為同義詞子表),在雜湊表中儲存的是所有同義詞子表的頭指標。用拉鍊法處理衝突構造的雜湊表叫做開雜湊表。開雜湊表不會出現堆積現象。設n個記錄儲存在長度為m的雜湊表中,則同義詞子表的平均長度為n / m 。

山東中醫藥大學電腦科學與技術2班王鑫童第3章筆記

棧與佇列 棧 限定僅在表的一端進行插入和刪除操作的線性表.允許插入和刪除的一端稱為棧頂,另一端稱為棧底。空棧 不含任何資料元素的棧。注意 棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。棧中元素具有相同型別及後進先出特性,相鄰元素具有前驅和後繼關係.兩棧共享空間 使用乙...

山東中醫藥大學電腦科學與技術2班王鑫童第4章筆記

第4章 字串和多維陣列 字串。在程式語言中大都有串變數的概念,而且實現了基本的串操作,本章重點討論串的儲存結構及模式匹配演算法。陣列。在程式語言中大都提供了陣列作為構造資料型別,本章重點討論陣列以及特殊矩陣的儲存與定址。串 零個或多個字元組成的有限序列。串長度 串中所包含的字元個數。空串 長度為0的...

山東中醫藥大學資料結構第三章棧與佇列

3.1 棧 3.1.1棧的邏輯結構 1.棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何元素的棧稱為空棧。注意 棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。2.棧的抽象資料型別定義 adt stack da...