查詢 基於線性表

2021-07-13 02:54:58 字數 2182 閱讀 8763

1、順序查詢

對於乙個無序的,即關鍵字沒有排序的線性表來說,用所給的關鍵字與線性表中的所有記錄逐個進行比較,直到成功或者失敗。

平均查詢長度:asl=(n+1)/2

ii、最近最少使用法(lur):也叫作移至前端法,如果找到一條記錄就把他移至線性表的最前面,而把其他記錄後退乙個位置。顯然,這種方式使用鍊錶來儲存比較好實現。同時,該方法對訪問頻率的區域性變化反應很好,這是因為如果一條記錄在一段時間內被頻繁訪問,在短時間它就會靠近線性表的前邊。現在,搜狗拼音、紫光等輸入法,使用的都是這種方法,把當前常用的字和詞都移至前端,有效的提高了輸入漢字的速度。

iii、轉置(transpose)方法:也叫作調換方法,把找到的記錄與它表中的前一條記錄交換位置。這種方法無論是基於鍊錶儲存還是陣列儲存,都是很好的方法。隨著時間的推移,最常使用的記錄將移動到線性表的前面。曾經被頻繁訪問但以後不會再使用的記錄將會慢慢的落到後面。該方法在大部分情況下對訪問頻率的變化有很好的反應。但是,也會出現一些極端的情況。例如,首先訪問線性表的最後一條記錄i,然後就把這條記錄與倒數第二條記錄j交換位置,使得j稱為最後一條記錄。如果接下來訪問的依然是最後一條記錄j,那麼就會和倒數第二條記錄i交換位置。如果訪問序列恰好就這樣在i和j之間不斷交替,將總是查詢該錶的最後位置,而這兩條記錄始終不能往前移動。不過,這種情況在實際情況中很少出現。

2、折半查詢(二分查詢)

對於任何乙個線性表,若其中的所有資料元素都按照關鍵字的大小呈遞減或遞增排列,則稱為有序表。

折半查詢首先要求查詢表滿足:查詢表採用順序儲存(陣列)結構,並且按關鍵字大小有序排列。

基本查詢過程:每次將待查範圍中間位置上的資料元素的關鍵字與給定值k比較,如果相等就查詢成功;否則利用該位置將整個表劃分成前、後兩個子表,如果中間位置記錄的關鍵字大於待查關鍵字,則繼續在前半部分子表進行查詢,否則就在後半部分子表進行查詢,重複此過程,直到「查詢成功」或「查詢不成功」。

折半查詢是典型的分治類演算法,所以演算法也可以利用遞迴來實現。

平均查詢長度:asl=((n+1)/n)*log2(n+1)-1,當n>50時,asl約等於log2(n+1)-1

折半查詢的有點2在於關鍵字的比較次數比較少,查詢速度快,平均效能較好,但缺點是要求待查表必須為有序表,而且要基於順序結構儲存,這對於插入和刪除操作來說是比較困難的。因此,折半查詢適合於一經建立就很少改動,而且有需要經常查詢的有序查詢表。

3、索引查詢(分塊查詢)

如果線性表既希望有較快的查詢速度,有需要動態變化,則可以採用索引查詢。索引查詢又稱為分塊查詢,它是一種效能介於順序查詢和折半查詢之間的查詢辦法。

基本思想:1、把線性表分成若干塊,每塊包含若干記錄,在每一塊中記錄的存放是任意的,但塊與塊之間必須是有序的(分塊有序)。2、建立乙個索引表,把每塊中的最大關鍵字值以及每塊的第乙個記錄在表中的位置和最後乙個記錄在表中的位置存放在索引項中。所以,索引表是乙個有序表。

查詢時,首先用待查詢的關鍵字在索引表中查詢,確定具有該關鍵字的結點應該在哪乙個分塊中,在索引中查詢的方法可以採用順序查詢或是折半查詢,然後再到相應的分塊中順序查詢,即可得到查詢結果。

第乙個階段以折半查詢asl約為log2(n/i+1)+(i+1)/2;若第一階段以順序查詢asl=(n+i^2)/(2*i)+1

基於線性表的查詢法

順序結構資料型別的定義 define maxsize 10 typedef struct record typedef struct recordlist 順序查詢演算法思想 在表的一端設定乙個稱為 監視哨 的附加單元,存放要查詢元素的關鍵字。從表的另一端開始查詢,如果在 監視哨 找到要查詢元素的關...

線性表查詢

查詢的基本概念 廣義地講 查詢是在具有相同型別的記錄構成的集合中找出滿足給定條件的記錄。給定的查詢條件可能是多種多樣的,為了便於討論,我們把查詢條件限制為 匹配 即在查詢關鍵碼等於給定值的記錄。順序查詢 順序查詢又稱線性查詢,是最基本的查詢技術之一,其基本思想為 從線性表的一端向另外一端逐個將關鍵碼...

查詢 線性表的查詢

標頭檔案 sqlistsearch.h include const int maxsize 100 順序表中最多元素個數 template struct rectype 順序表記錄型別 template struct idxtype 索引表型別 template class sqlistsearch...