一、查詢概論
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.表中元素...