14 查詢概論與順序查詢

2021-06-29 05:56:24 字數 1910 閱讀 7360

一、查詢概論

1.查詢

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

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

的資料元素

(或紀錄)構成的集合;

(2)關鍵字(key):是資料元素中某個資料項的值

,又稱為鍵值

,用它可以標誌乙個資料元素,也可以標誌乙個紀錄的某個資料項(字段),又稱關鍵碼;

(3)主關鍵字:若此關鍵字可以唯一地標誌乙個紀錄

,則稱此關鍵字為主關鍵字(primary key),主關鍵字所在的資料項成為主關鍵碼;

(4)次關鍵字(secondary key):對於那些可以識別多個資料元素(或紀錄)的關鍵字,我們稱為次關鍵字;

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

它的主要操作有:

(1)查詢

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

(2)檢索

某個"特定的"資料元素和各種屬性。

3.動態查詢(dynamic search table)

在查詢過程中同時插入查詢表中不存在的資料元素,或者從查詢表中刪除已經存在的某個資料元素。它的主要操作有:

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

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

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

二、順序表查詢

1.定義

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

2.順序表查詢演算法

/*順序查詢:a為陣列,n為要查詢的陣列個數,key為要查詢的關鍵字*/

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]中沒有關鍵字key,查詢失敗。

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

n+1次時間複雜度

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

14 查詢概論與順序查詢

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

順序查詢與折半查詢

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.表中元素...