一、查詢概論
1、查詢表:查詢表是由同一型別的資料元素或記錄構成的集合。
2、關鍵字:關鍵字是資料元素中某個資料項的值,又稱為鍵值,用它可以標識乙個資料元素。也可以標識乙個記錄的某個資料項(字段),稱為關鍵碼。若此關鍵字可以唯一標識乙個記錄,則稱此關鍵字為主關鍵字,所以對於不同的記錄,其主關鍵字是不相同的。主關鍵字所在的資料項稱為主關鍵碼。而對於可以識別多個資料元素(或記錄)的關鍵字,稱為次關鍵字,它對應的資料項就是次關鍵碼。
3、查詢:
查詢就是根據給定的某個值,在查詢表中確定乙個其關鍵字等於給定值的資料元素或記錄。
4、查詢表按照操作方式來分,通常可以分為兩種:
5、查詢結構
為了提高查詢的效率,專門為查詢操作設定資料結構,這種面向查詢操作的資料結構稱為查詢結構。從邏輯上說,查詢所基於的資料結構是集合,集合中的記錄之間沒有本質關係,但是為了提高查詢的效能,可以改變資料元素之間的關係,在儲存時將查詢集合組織成表、樹等結構。比如
對於靜態查詢表來說,可以用線性表結構來組織資料,這樣就可以使用順序查詢演算法;如果資料的組織方式是按照主關鍵字進行排序的,那麼還可以使用折半查詢等查詢技術來提高查詢的效率。而對於動態查詢表來說,可以考慮使用二叉排序樹的查詢技術、雜湊表結構等來進行查詢。下面就以最簡單的查詢技術——順序表查詢,來作為開始吧。
二、順序表查詢
1、順序查詢又叫線性查詢,它的查詢思路為:從表中第乙個(或者最後乙個)記錄開始,逐個進行記錄的關鍵字和給定值進行比較,若某個記錄的關鍵字和給定值相等,則查詢成功。如果直到最後乙個(或第乙個)記錄,其關鍵字和給定值比較都不等時,則表中沒有所差的記錄,查詢失敗。
2、順序查詢演算法實現如下:
/**
* 順序查詢演算法,查詢成功則返回在陣列中的下標,否則返回0
* @param data:資料元素所在陣列,注意,這裡儲存資料元素是從陣列下標1開始的
* @param datalength:陣列有效元素個數
* @param searchvalue:待查詢關鍵字
*/int sequencesearch(int *data, int datalength, int searchvalue)
}return 0;
}
這樣實現的順序查詢並不完美,因為每次迴圈時都要對i是否越界進行判斷,下面對它進行優化,如下:
/**
* 優化後的順序查詢演算法,查詢成功則返回在陣列中的下標,否則返回0
* @param data:資料元素所在陣列,注意,這裡儲存資料元素是從陣列下標1開始的
* @param datalength:陣列有效元素個數
* @param searchvalue:待查詢關鍵字
*/int optsequencesearch(int *data, int datalength, int searchvalue)
return i;
}
3、時間複雜度
對於這樣的順序查詢演算法來說,最好的情況就是在第乙個查詢位置就找到了,那麼時間複雜度為o(1),最壞的情況就是最後乙個查詢位置才找到,所以時間複雜度為o(n),當查詢不成功時,需要n+1次比較,時間複雜度為o(n),所以平均時間複雜度為還是o(n)。
順序表查詢
順序查詢又叫線性查詢,是最基本的查詢技術,它的查詢過程是 從表中第乙個 或最後乙個 記錄開始逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功 如果直到最後乙個 或第乙個 記錄,其關鍵字和給定值比較都不相等時,則表中沒有所查的記錄,查詢不成功。順序查詢的演算法如下 順序查詢...
順序表查詢
順序查詢 sequential search 又叫線性查詢,是最基本的查詢技術,它的查詢過程是 從表中第乙個 或最後乙個 記錄開始,逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄 如果直到最後乙個 或第乙個 記錄,其關鍵字和給定值比較都不等時,則表中沒有...
順序表的順序查詢和折半查詢
順序查詢 include using namespace std intseqsearch int r,int n,int k return i int main int k cout 請輸入要查詢的數 k for int i 1 i n i cout 該數在陣列中的位置為 cout seqsear...