資料結構 各種查詢演算法實現

2021-10-02 02:14:56 字數 3492 閱讀 9745

(1)順序查詢:使用陣列或鍊錶結構。用隨機函式生成16個不重複的字母(』a』~』z』),鍵盤輸入待查詢的字母,返回查詢成功與否,若成功則返回該字母所在的位置(序號),並計算比較次數。

(2)折半查詢:用陣列實現,查詢前元素先排序。計算比較次數。分別用查詢成功、不成功進行測試。

(3)二叉查詢樹:手工輸入10個字母,生成一棵二叉查詢樹,用遞迴演算法列印樹結構或分別輸出先序和中序遍歷序列以確認其結構。鍵盤輸入待查詢的字母,計算比較次數。分別用查詢成功、不成功進行測試。

(1)利用for迴圈,查詢是否有匹配字元,然後輸出位置和比較次數即可

(2)① 首先確定整個查詢區間的中間位置 mid = ( left + right )/2 。

② 用待查關鍵字值與中間位置的關鍵字值進行比較;  若相等,則查詢成功  若大於,則在後(右)半個區域繼續進行折半查詢  若小於,則在前(左)半個區域繼續進行折半查詢。

③ 對確定的縮小區域再按折半公式,重複上述步驟。最後,得到結果:要麼查詢成功, 要麼查詢失敗。

(3)a.根據二分查詢樹特性建立二分查詢樹

b.將結點與查詢值比較,若小,則往左子樹找,若大,則往右子樹找

#include

"pch.h"

#include

#include

#include

#include

#include

using

namespace std;

struct bstree

;int

sqsearch

(vector<

char

> alpha)

;//順序查詢

void

bsearch

(vector<

char

> alpha)

;//二分查詢

void

insertbst

(bstree *

&t,char data)

;//二分查詢樹插入資料

bstree*

searchbst

(bstree *t,

char data,

int&count)

;//二分查詢樹查詢資料

void

createbst

(bstree *

&t);

//建立二分查詢樹

void

preorder

(bstree *

&tree)

;//前序遍歷

void

ldr(bstree *

&tree)

;//中序遍歷

intmain()

} cout <<

"隨機生成的字母如下所示:\n"

;for

(auto c : alpha) cout << c <<

" ";

cout << endl;

cout <<

"**********順序查詢**********"

<< endl;

sqsearch

(alpha)

;sort

(alpha.

begin()

, alpha.

end())

; cout <<

"**********折半查詢**********"

<< endl;

bsearch

(alpha)

;bsearch

(alpha)

; bstree *t;

createbst

(t);

cout <<

"二分查詢樹的前序遍歷:\n"

;preorder

(t);

cout << endl;

cout <<

"二分查詢樹的中序遍歷:\n"

;ldr

(t);

cout

char data;

cout <<

"請輸入要查詢字母:"

; cin >> data;if(

searchbst

(t, data, count)

)else

count =0;

cout <<

"請輸入要查詢字母:"

; cin >> data;if(

searchbst

(t, data, count)

)else

}void

bsearch

(vector<

char

> alpha)

//二分查詢

int low =0;

int high = alpha.

size()

-1;int count =0;

while

(low<=high)

else

if(alpha[mid]

> c) high = mid -1;

//若結點大於搜尋值,則搜左半區

else low = mid +1;

//若結點小於搜尋值,則搜右半區

} cout<<

"查無此字元!\n";}

intsqsearch

(vector<

char

> alpha)

//順序查詢

int count =0;

//比較次數

int i;

for(i =

0; i < alpha.

size()

; i++)}

cout <<

"查無此字元!"

<< endl;

return-1

;//查無字元,返回-1

}void

insertbst

(bstree *

&t,char data)

//二分查詢樹插入資料

else

if(t-

>data < data)

insertbst

(t->rchild, data)

;//若資料大於結點值,往右子樹填充

else

insertbst

(t->lchild, data)

;//若資料小於結點值,往左子樹填充

}bstree*

searchbst

(bstree *t,

char data ,

int&count)

//二分查詢樹查詢資料

void

createbst

(bstree *

&t)}

void

preorder

(bstree *

&tree)

//前序遍歷

}void

ldr(bstree *

&tree)

//中序遍歷

}

實現折半查詢 資料結構與演算法 查詢

相關知識 折半查詢通常是針對順序儲存的線性表,線性表的結點按關鍵碼從小到大排序,後面稱之為折半查詢的順序表。為了簡化討論,假設折半查詢的順序表中每個結點只含乙個關鍵碼,關鍵碼為整數。圖 1 給出了乙個儲存了 4 個關鍵碼的折半查詢的順序表的儲存結構圖。下面描述了線性表順序儲存的一種實現方案。該實現方...

資料結構查詢演算法

又叫線性查詢,是一種基本的查詢演算法。查詢過程 從表中第乙個 或最後乙個 記錄開始,逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,如果查詢到表中最後乙個元素,還沒有找到,則查詢不成功。public intsearch int array int key return ...

資料結構 各種排序演算法比較

一,各種排序演算法比較 各種排序演算法比較 二,相關概念 1 穩定排序和非穩定排序 簡單地說就是所有相等的數經過某種排序方法後,仍能保持它們在排序之前的相對次序,我們就說這種排序方法是穩定的。反之,就是非穩定的。比如 一組數排序前是a1,a2,a3,a4,a5,其中a2 a4,經過某種排序後為a1,...