14 查詢概論與順序查詢

2021-09-08 12:47:14 字數 1922 閱讀 4219

一、查詢概論

1.查詢即依據給定的某個值,在查詢表中確定乙個其keyword等於給定值的資料元素(或紀錄)。若表中不存在keyword等於給定值的紀錄。則稱查詢不成功,此時查詢的結果可給出乙個"空"紀錄或"空"指標。另外,查詢表依照操作方式來分有兩大種:靜態查詢表和動態查詢表。

(1)查詢表(search table):是由同一型別

的資料元素(或紀錄)構成的集合。

(2)keyword(key):是資料元素中某個資料項的值。又稱為鍵值,用它能夠標誌乙個資料元素,也能夠標誌乙個紀錄的某個資料項(字段),又稱關鍵碼;

(3)主keyword:若此keyword能夠唯一地標誌乙個紀錄,則稱此keyword為主keyword(primary key),主keyword所在的資料項成為主關鍵碼;

(4)次keyword(secondary key):對於那些能夠識別多個資料元素(或紀錄)的keyword,我們稱為次keyword;

2.靜態查詢表(static search table):僅僅作查詢操作的查詢表。

它的主要操作有:

(1)查詢某個"特定的"資料元素是否在查詢表中;

(2)檢索某個"特定的"資料元素和各種屬性。

3.動態查詢(dynamic search table)

在查詢過程中同一時候插入查詢表中不存在的資料元素,或者從查詢表中刪除已經存在的某個資料元素。

它的主要操作有:

(1)查詢時插入資料元素;

(2)查詢時刪除元素資料元素;

凝視:為了提供查詢的效率,我們須要專門為查詢操作設定資料結構。即改變資料元素之間的關係(表、樹等結構)。

二、順序表查詢

1.定義:順序查詢又稱線性查詢。是最主要的查詢技術,它的查詢過程是:從表中第乙個(或者最後乙個)紀錄開始,逐個進行紀錄的keyword和給定值比較,若某個紀錄的keyword和給定值相等,則查詢成功。找到所查的紀錄;假設直到最後乙個(或第乙個)紀錄。其keyword和給定值比較都不等時,則表中沒有所查的紀錄,查詢不成功。

2.順序表查詢演算法

/*順序查詢:a為陣列,n為要查詢的陣列個數。key為要查詢的keyword*/

int  sequential_search(int *a,int n,int key)

}3.順序表查詢優化

因為一般的順序查詢演算法每次迴圈時。都須要對i是否小於等於n作推斷。

從某些程式上來說,當總資料量非常多的時候。該推斷無疑減少了查詢的效率。我們能夠通過在盡頭設定乙個"哨兵"的方法,來解決每次i與n作出比較的問題來提高查詢效率。

長處:實現簡單,小型資料查詢效率較高。

缺點:n非常大時。查詢效率非常低。

/*有哨兵順序查詢*/

int sequential_search2(int *a,int n,int key)

return i;            //返回0則說明查詢失敗

}分析:此**從尾部開始查詢,假設在a[i]中有key則返回i值。查詢成;否則一定在終於的a[0]處等於key,此時返回的是0,即說明a[1]~a[n]中沒有keywordkey,查詢失敗。

時間複雜度:最好情況為o(1),最壞為o(n);查詢失敗

n+1次時間複雜度

為o(n);平均查詢次數為(n+1)/2,即平均複雜度為o(n)。

14 查詢概論與順序查詢

一 查詢概論 1.查詢 即根據給定的某個值,在查詢表中確定乙個其關鍵字等於給定值的資料元素 或紀錄 若表中不存在關鍵字等於給定值的紀錄,則稱查詢不成功,此時查詢的結果可給出乙個 空 紀錄或 空 指標。另外,查詢表按照操作方式來分有兩大種 靜態查詢表和動態查詢表。1 查詢表 search table ...

順序查詢與折半查詢

includeusing namespace std const int max 10 順序查詢 int seqsearch1 int r,int n,int k return i 返回元素在陣列中的下標即元素的序號 int seqsearch2 int a,int n,int x 陣列a,n總數,...

查詢 順序查詢

順序查詢的思路 從資料的第乙個元素開始,依次將掃瞄到的關鍵字和給定值key比較。若當前掃瞄到的關鍵字和key相等,則查詢成功 若掃瞄結束還沒有找到和key相等的元素,就表示查詢給定的值不在表中。時間複雜度 o n 優點 1.演算法簡單 2.對錶結構沒有任何要求,用順序表或者用鍊錶都可以。3.表中元素...