基於線性表的查詢法

2021-08-04 08:39:33 字數 1676 閱讀 5195

順序結構資料型別的定義

#define maxsize 10

typedef struct

record;

typedef struct

recordlist;

順序查詢演算法思想:在表的一端設定乙個稱為「監視哨」的附加單元,存放要查詢元素的關鍵字。從表的另一端開始查詢,如果在「監視哨」找到要查詢元素的關鍵字,返回失敗資訊,否則返回相應下標。

效能分析:假設列表長度為n,那麼查詢到第i個資料元素時需進行n-i+1次比較。

asl = 1/n∑(n-i+1) = (n+1)/2

折半查詢

演算法思想:首先,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。

重複以上步驟,直到找到滿足條件的結果為止,若找不到,則返回失敗。

要求:

1.必須採用順序儲存結構;

2.必須按關鍵字大小有序排列。

圖示分析:

程式示例:

#include 

#define maxsize 10

typedef

struct

record;

typedef

struct

recordlist;

//順序查詢

int seqsearch(recordlist rl, int key)

return i; //查詢成功返回下標,不成功返回0(即查詢到工作單元還未找到待查資料)

}//折半查詢

int midsearch(recordlist rl, int key)

//待查詢的資料》中間值,使low = mid + 1,繼續在右半區間查詢

else

if (rl.data[mid].key > key)

//待查詢的資料《中間值,使high = mid - 1,繼續在左半區間查詢

else

}return0;}

int main(void)

; int input = 0;

printf("請輸入待查詢的資料: ");

scanf("%d", &input);

printf("經順序查詢,待查詢的元素下標為: %d\n", seqsearch(rl, input));

printf("經折半查詢,待查詢的元素下標為: %d\n", midsearch(rl, input));

}

分塊查詢首先將列表分成若干個塊(子表)。一般情況下,塊的長度均勻,最後一塊可以不滿。每塊中元素任意排列,即塊內無序,但塊與塊之間有序。

構造乙個索引表。其中每個索引項對應乙個塊並記錄每塊的起始位置,以及每塊中的最大關鍵字(或最小關鍵字)。索引表按關鍵字有序排列。

查詢 基於線性表

1 順序查詢 對於乙個無序的,即關鍵字沒有排序的線性表來說,用所給的關鍵字與線性表中的所有記錄逐個進行比較,直到成功或者失敗。平均查詢長度 asl n 1 2 ii 最近最少使用法 lur 也叫作移至前端法,如果找到一條記錄就把他移至線性表的最前面,而把其他記錄後退乙個位置。顯然,這種方式使用鍊錶來...

資料結構之查詢 基於線性表的查詢法

用所給的元素與列表的中的各個元素進行比較,若相等返回索引,否則返回錯誤資訊。假設列表長度為 n n 那麼查詢第 i role presentation style position relative i i個元素時需進行n i 1 n i 1 次比較,即ci n i 1c i n i 1,又假設查詢...

線性表查詢

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