資料結構 查詢

2021-09-02 23:34:55 字數 3017 閱讀 9333

可以標識乙個記錄的某個資料項

適用於:查詢集合一經生成,便只對其進行查詢,而不進行插入和刪除操作,或經過一段時間的查詢之後,集中地進行插入

和刪除等修改操作。

適用於:查詢與插入和刪除操作在同乙個階段進行,例如當查詢成功時,要刪除查詢到的記錄,當查詢不成功時,要插入被查詢的記錄。

面向查詢操作的資料結構,即查詢基於的資料結構

線性表:適用於靜態查詢(順序查詢、折半查詢)

:適用於動態查詢(二叉排序樹上的查詢)

雜湊表:適用於靜、動態查詢(雜湊查詢)

查詢演算法時間效能通過關鍵碼的比較次數來度量。

定義:查詢成功時,asl是為確定資料元素在表中的位置所進行的關鍵碼比較次數的期望值。

含義:n :查詢表含n個資料元素

pi :表中第i個資料元素的查詢概率

ci :表中第i個資料元素的關鍵碼與給定值kx相等,按某演算法查詢時關鍵碼的比較次數。

不同查詢演算法ci不同

從線性表的一端向另一端逐個將關鍵碼與給定值進行比較

我們通過設定"哨兵"免去了在查詢過程中每一次比較都要判斷查詢位置是否越界,提高查詢效率。

資料型別表述

typedef

struct

s_t;

int

s_search

(s_t *t,keytype kx)

查詢成功時,平均長度為(等概率):(n+1)/2

查詢失敗時,關鍵碼的比較數總是n+1次

時間複雜度為:o(n);

優點

缺點

演算法適用範圍

順序儲存、鏈式儲存

在有序表中,取中間元素作為比較物件

例:查詢值為22的記錄過程

}從折半查詢過程看,以表的中點為比較物件,並以中點將表分割為兩個子表,對定位到的子表繼續這種操作。所以,對錶中每個資料元素的查詢過程,可用二叉樹來描述,稱這個描述查詢過程的二叉樹為判定樹。

在折半查詢成功時,關鍵碼比較次數至多為log⁡2

(n+1

)\log_2 (n+1)

log2​(

n+1)

折半查詢的時間效率為o(log⁡2

n\log_2 n

log2​n

)記錄按關鍵碼有序、順序儲存優點

缺點索引順序表結構:

需要將檔案劃分為若干塊,且要求分塊有序。

這裡不做要求,可自行學習。

若查詢樹為空,查詢失敗

查詢樹非空,將給定值kx與查詢樹的根節點關鍵碼比較。

若相等,查詢成功,結束查詢過程:否則,

雜湊查詢:是一種重要的儲存方式,又是一種查詢方法,又稱雜湊

雜湊表:按雜湊儲存方式構造的動態表稱為雜湊表,又稱為雜湊表

雜湊函式:是雜湊表查詢的核心,用以計算記錄的關鍵字在雜湊表中的儲存位址

雜湊表的表示:用一維陣列h[0…m-1]表示,m為表長

雜湊查詢考慮的主要問題

直接定址法;

隨機數法

數字分析法

平方取中法

當衝突發生時,形成乙個探查序列,沿著這個序列逐個探測,直到找到乙個「空」的開放位址,將發生衝突的關鍵字存放到該位址中去。

兩種探測方法

線性探測法:增量序列為 di = 1,2,3…m-1

二次探測法:增量序列為 di = 12,-12,22,-22… 例:

採用線性探測法解決衝突的方法思路清晰,演算法簡單

遇到衝突時,將產生衝突的記錄再雜湊到離衝突點最近的空位置上,從而又增加了更多的衝突機會,這種現象稱為聚集或者堆積

雜湊表的每個單元不是儲存相應的資料元素的關鍵碼,而是儲存相應單鏈表的表頭指標。

單鏈表中的每個結點由動態分配產生,可以方便地插入和刪除結點。

優點:能較好地解決溢位問題,易於實現刪除操作

缺點:儲存空間需要增加乙個鏈域;若雜湊函式的均勻性較差,則會造成基本雜湊表儲存區中空閒單元較多。

查詢 資料結構

分類 資料結構與演算法 c c 2012 07 24 16 17 614人閱讀收藏 舉報幾種查詢演算法 順序查詢,折半查詢,分塊查詢,雜湊表 一 順序查詢的基本思想 從表的一端開始,向另一端逐個按給定值kx 與關鍵碼進行比較,若找到,查詢成功,並給出資料元素在表中的位置 若整個表檢測完,仍未找到與k...

資料結構 查詢

查詢 searching 也稱 檢索,查表,就是在大量的資訊集中尋找乙個特定的資訊元素。查詢就是根據 給定的關鍵字值,在 查詢表中確定乙個關鍵字等於給定的 記錄或資料元素。若存在這樣的資料元素,則稱查詢成功的,否則查詢不成功。查詢是許多重要的電腦程式中 最耗費時間的部分,查詢演算法的優劣密切關係著查...

資料結構 查詢

一.靜態查詢表 靜態查詢表是僅對查詢表進行查詢操作,而不能改變其中資料的線性表,可以是基於陣列的順序儲存或以線性鍊錶儲存。靜態查詢表主要有順序表 有序順序表和索引順序表三種。1.順序查詢 函式模型 int seqsearch element list,int searchnum,int n 2.折半...