資料結構 靜態查詢表

2022-03-11 10:31:58 字數 2578 閱讀 7196

從查詢說起:

在英漢字典中查詢某個英文單詞的中文解釋;在新華字典中查詢某個漢字的讀音、含義;在對數表、平方根表中查詢某個數的對數、平方根;郵遞員送信件要按收件人的位址確定位置等等。

從計算機、計算機網路中查詢特定的資訊,就需要在計算機中儲存包含該特定資訊的表。查詢是許多程式中最消耗時間的一部分。因而,乙個好的查詢方法會大大提高執行速度。

►先討論靜態查詢表:

靜態查詢表應該是查詢中最為簡單的。僅僅是在固定的表中對元素的查詢,而不涉及修改表中的元素

我們討論的是 在無序表、順序表中的遍歷查詢和快速的折半查詢

方式:從查詢表的一端依序與表中的元素進行比較。

**是很簡單的,直接給出,以便後續分析:

#include typedef 

intkeytype;

typedef

struct

elemtype;

typedef

struct

sstable;

intsq_search(sstable st, keytype key)

int init_search(sstable &st,int

length)//初始化表

int creat_search(sstable &st,int

length)//建立表

}int

main()

說明:請注意,我們在0號位置留空,在這裡僅僅是為了直觀顯示索引位置

但是我們還可以優化這段**,那就是設定監視哨。

所謂監視哨,就是將空出來的下標為0的這個元素的值設為key.   

分析:這樣我們就不用多次判斷i是否越界,因為就算靜態表中找不到,也會在0位置上配對成功,返回0!

while (i>=1&&st.elem[i].key!=key) i--;

改為:st.elem[

0].key = key; //

監視哨:下標為0的位置存放待查詢的元素

while (st.elem[i].key!=key)

我們來分析一下演算法複雜度:

方式:在有序表上查詢的時候,我們可以對無序查詢進行優化:

int   i =st.length;  

st.elem[

0].key =key;

while (key < st.elem[i].key) i--;

if (key ==st.elem[i].key)

return

i;

return

0

即當st.elem[i].key<= st.elem[0].key 的時候我們就停止查詢!

為什麼呢?因為st.elem[i].key<= st.elem[0].key的時候是兩種可能,要麼小於,既然《就無須再比了,要是=也就得出結果了!

方法:我們把要查詢的值x與陣列的中間值mid進行比較,如果說x總之,先確定待查記錄所在的範圍(區間),若待查記錄等於表中間位置上的記錄,則查詢成功;否則,縮小查詢範圍,即若待查記錄小於中間位置上的元素,則下一次到前半區間進行查詢,若待查記錄大於中間位置上的元素,則下一次到後半區間進行查詢。

核心**如下:

while (low<=high)
我們分析一下這個結束條件: while(low<=high)

當low=high的時候,我們已經可以確定這是能夠進行比較的最後乙個元素了,因為此時不可能再對陣列進行左右劃分!

如果此時,mid元素不等於key的話,可以判定查詢失敗!

若此時midkey,hi-1就會小與low

所以自然就會結束迴圈!

資料結構 靜態查詢表

從查詢說起 在英漢字典中查詢某個英文單詞的中文解釋 在新華字典中查詢某個漢字的讀音 含義 在對數表 平方根表中查詢某個數的對數 平方根 郵遞員送信件要按收件人的位址確定位置等等。從計算機 計算機網路中查詢特定的資訊,就需要在計算機中儲存包含該特定資訊的表。查詢是許多程式中最消耗時間的一部分。因而,乙...

資料結構 靜態查詢表

此為本人在學習資料結構時所寫的,各個功能能夠實現,有demo,node.h,tree.h,tree.cpp四個檔案,使用說明如下 按照要求,先進行建樹操作 然後按照輸出的介面選擇查詢操作即可 輸入的資料6 5 4 2 1 3 6。表示建立了一棵二叉鍊錶樹 54 6 21 3 在查詢時輸入 1,則進行...

資料結構 靜態查詢表

順序表與線性鍊錶都可以表示靜態查詢表。兩者的實現靜態查詢表相似,這裡以順序表為例。順序查詢就是從表中最後乙個記錄開始,逐個進行記錄關鍵字與給定值的比較,若某個記錄的關鍵字和給定值比較相等,則查詢成功,反之失敗。對於順序查詢有一種技巧可以優化效率。查詢之前先將key賦值給elem 0 搜尋從後向前搜尋...