資料結構 線性表的查詢技術

2021-10-01 04:26:47 字數 2434 閱讀 6500

#include

using

namespace std;

const

int maxsize =

100;

class

linesearch

//析構函式為空

intseqsearch

(int k)

;//順序查詢

intbinsearch1

(int k)

;//折半非遞迴查詢

intbinsearch2

(int low,

int high,

int k)

;//折半遞迴查詢

private

:int data[maxsize]

;//查詢集合為整型

int length;

//查詢集合的元素個數

};

linesearch ::

linesearch

(int a,

int n)

基本思想:

從線性表的一端向另一端逐個將關鍵碼與給定值進行比較,

若相等,則查詢成功,給出該記錄在表中的位置;

若整個表檢測完仍未找到與給定值相等的關鍵碼,則查詢失敗,給出失敗資訊。

int linesearch ::

seqsearch

(int k)

改進(帶哨兵的)

基本思想:設定「哨兵」。

哨兵就是待查值,

將哨兵放在查詢方向的盡頭處,

免去了在查詢過程中每一次比較後都要判斷查詢位置是否越界,從而提高查詢速度。

}適用條件:

線性表中的記錄必須按關鍵碼有序;

必須採用順序儲存。

基本思想:

在有序表中(low, high,low<=high),

取中間記錄作為比較物件,

若給定值與中間記錄的關鍵碼相等,則查詢成功;

若給定值小於中間記錄的關鍵碼,則在中間記錄的左半區繼續查詢;

若給定值大於中間記錄的關鍵碼,則在中間記錄的右半區繼續查詢。

不斷重複上述過程,直到查詢成功,或所查詢的區域無記錄,查詢失敗。

非遞迴

int linesearch ::

binsearch1

(int k)

return0;

//查詢失敗,返回0

}

遞迴法

int linesearch ::

binsearch2

(int low,

int high,

int k)

}

判定樹:折半查詢的過程可以用二叉樹來描述,

樹中的每個結點對應有序表中的乙個記錄,

結點的值為該記錄在表中的位置。

通常稱這個描述折半查詢過程的二叉樹為折半查詢判定樹,簡稱判定樹。

⑴ 當n=0時,折半查詢判定樹為空;

⑵ 當n>0時,

折半查詢判定樹的根結點為mid=(n+1)/2,

根結點的左子樹是與有序表r[1] ~ r[mid-1]相對應的折半查詢判定樹,

根結點的右子樹是與r[mid+1] ~ r[n]相對應的折半查詢判定樹。

任意結點的左右子樹中結點個數最多相差1

任意結點的左右子樹的高度最多相差1

任意兩個葉子所處的層次最多相差1

查詢成功:在表中查詢任一記錄的過程,即是折半查詢判定樹中從根結點到該記錄結點的路徑,和給定值的比較次數等於該記錄結點在樹中的層數。

查詢成功時的平均查詢長度asl:

查詢不成功:

查詢失敗的過程就是走了一條從根結點到外部結點的路徑,

和給定值進行的關鍵碼的比較次數等於該路徑上內部結點的個數(失敗情況下的平均查詢長度等於樹的高度)。

資料結構之線性表的查詢

話不多說,直接上 1 include stdafx.h 2 include3 using namespace std 4 define maxsize 10056 int f 100 7 8 無哨兵順序查詢,a為陣列,n為要查詢的陣列個數,key為要查詢的關鍵字 9int sequential se...

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...

資料結構 線性表

參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...