總結順序查詢又叫線性查詢,是最基本的查詢技術,他的查詢過程是:從表中第乙個(或最後乙個)記錄開始,逐個進行記錄的關鍵字和給定值比較,若記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄;如果直到最後乙個(或第乙個)記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查詢失敗。
//a為陣列,n為要查詢的陣列個數,key為要查詢的關鍵字
intsequential_search
(int
*a,int n,
int key)
return0;
}
上面的**非常簡單,就是在陣列a(注意元素值從下標1開始)中查詢有沒有關鍵字key,當你需要查詢複雜表結構的記錄時,只需要把陣列a與關鍵字key定義成你需要的表架構和資料型別即可。
其實上面的**並非足夠完美,因為每次迴圈時都需要對i是否越界,即是否小於等於n做判斷。那麼,我們可以設定乙個哨兵,可以解決不需要每次讓i與n作比較。
/* 有哨兵順序查詢 */
intsequential_search2
(int
*a,int n,
int key)
return i;
}
上述**是從尾部開始查詢的,由於a[0]=key ,也就是說,如果在a[i]中有key,則返回i值,查詢成功。否則一定在最終的a[0]處等於key,此時返回的是0,即說明a[1]~a[n]中沒有關鍵字key,查詢失敗。
這種在查詢方向的盡頭設定哨兵,免去了在查詢過程中每一次比較後都要判斷查詢位置是否越界的小技巧,看似與原先的差別不大,但是如果總資料比較多時,效率提公升很大。
對於順序表查詢來說,查詢成功最好的情況就是在第乙個位置就找到了,演算法時間複雜度為o(1),最壞的情況就是在最後乙個位置才找到,需要n次比價,時間複雜度為o(n),當查詢不成功時,需要n+1次比較,時間複雜度為o(n),平均查詢次數為(n+1)/2,所以最終的時間複雜度還是o(n)。
很明顯,順序查詢技術是有很大缺點的,n很大時,查詢的效率極其低下,不過優點也是有的,這個演算法非常簡單,對靜態查詢表的記錄沒有任何要求,在一些小型資料的查詢時,是可以適用的。
資料結構順序表的查詢 資料結構 2 1順序表
線性結構是資料結構中最基礎 最簡單的一種資料結構型別,其中最典型的就是線性表 具有 相同特性 的資料元素的 有限序列 相同特性 所有元素屬於同一資料型別 有限資料元素個數是有限的 序列資料元素由邏輯序號唯一確定 用邏輯序號來確定的特性使得線性表中可以有多個相同值的元素 線性表中所含元素的個數叫做線性...
資料結構之順序表
首先是標頭檔案seqlist.h ifndef seqlist h define seqlist h include includeusing namespace std define elemtype int define seqlist default size 10 typedef struc...
資料結構之順序表
順序表的思想容易了解,但是 不容易掌握,我這裡根據老師所提供的 進行一下簡單的總結 這個 包含順序表的查詢,插入,刪除,建表,輸出資料 includeusing namespace std define ok 1 define error 0 define overflow 2 typedef in...