資料結構 靜態查詢

2022-04-08 02:59:05 字數 2471 閱讀 1809

主要討論順序表、有序表、索引表和雜湊表查詢的各種實現方法,以及相應查詢方法在等概率情況下的平均查詢長度。

查詢表(search table):相同型別的資料元素(物件)組成的集合,每個元素通常由若干資料項構成。

關鍵字(key,碼):資料元素中某個(或幾個)資料項的值,它可以標識乙個資料元素。若關鍵字能唯一標識乙個資料元素,則關鍵字稱為主關鍵字(primary key) ;將能標識若干個資料元素的關鍵字稱為次關鍵字(secondary key) 。

查詢/檢索(searching):根據給定的k值,在查詢表中確定乙個關鍵字等於給定值的記錄或資料元素。◆ 查詢表中存在滿足條件的記錄:查詢成功;結果:所查到的記錄資訊或記錄在查詢表中的位置。

◆ 查詢表中不存在滿足條件的記錄:查詢失敗。

根據查詢表的操作方式,分為靜態查詢表和動態查詢表。

靜態查詢表(static search): 只對查詢表進行如下操作:

(1)檢視某個特定的資料元素是否在查詢表中,

(2)檢索某個特定元素和各種屬性。

動態查詢表(dynamic search):在查詢過程中,可進行如下操作:

(1)可以將查詢表中不存在的資料元素插入,

(2)從查詢表中刪除已存在的某個記錄。

為了提高查詢的效率,除了應用好的查詢演算法外,也會為查詢設立專門的資料結構來儲存資料,比如表、樹等等。

查詢表的儲存結構:

查詢表是一種非常靈活的資料結構,可以用多種方式來儲存。

根據儲存結構的不同,查詢方法可分為三大類:

① 順序表和煉表的查詢:將給定的k值與查詢表中記錄的關鍵字進行比較, 找到要查詢的記錄;

② 雜湊表的查詢:根據給定的k值直接訪問查詢表, 從而找到要查詢的記錄;

③ 索引查詢表的查詢:首先根據索引確定待查詢記錄所在的塊 ,然後再從塊中找到要查詢的記錄。

一般地,認為記錄的關鍵字是一些可以進行比較運算的型別,如整型、字元型、實型等,本章以後各節中討論所涉及的關鍵字、資料元素等的型別描述如下:

典型的關鍵字型別說明是:

typedef float keytype ; /* 實型 */

typedef int keytype ; /* 整型 */

typedef char keytype ; /* 字元型 */

資料元素型別的定義是:

typedef struct rectype

rectype ;靜態查詢表的抽象資料型別定義如下:adt static_searchtable adt static_searchtable

線性表是查詢表最簡單的一種組織方式,本節介紹幾種主要的關於線性表的查詢方法。

適用場合:針對查詢表中的元素沒有按關鍵字進行排序(即無序線性表)

1 查詢思想

從表的一端(第乙個或 最後乙個)開始逐個將記錄的關鍵字和給定k值進行比較,若某個記錄的關鍵字和給定k值相等,查詢成功;否則,若掃瞄完整個表,仍然沒有找到相應的記錄,則查詢失敗。順序表的型別定義如下:

#define max_size 100

typedef struct sstable

sstable ;int seq_search ( sstable st , keytype key)

前提條件:查詢表中的所有記錄是按關鍵字有序(公升序或降序) 。

查詢過程中,先確定待查詢記錄在表中的範圍,然後逐步縮小範圍(每次將待查記錄所在區間縮小一半),直到找到或找不到記錄為止。

1 查詢思想

用low、high和mid表示待查詢區間的下界、上界和中間位置指標,初值為low=1,high=n。

⑴ 取中間位置mid:mid=?(low+high)/2? ;

⑵ 比較中間位置記錄的關鍵字與給定的k值:

① 相等: 查詢成功;

② 大於:待查記錄在區間的前半段,修改上界指標: high=mid-1,轉⑴ ;

③ 小於:待查記錄在區間的後半段,修改下界指標:low=mid+1,轉⑴ ;

直到越界(low>high),查詢失敗。

2 演算法實現

int bin_search(sstable st , keytype key)

return(f) ;

}int fib_search(rectype st , keytype key , int n)

/* 在有序表st中用fibonacci方法查詢關鍵字為key的記錄 */

index;

int block_search(rectype st , index ind , keytype key , int n , int b)

/* 在分塊索引表中查詢關鍵字為key的記錄 */

/*表長為n ,塊數為b */

j=ind[i].startpos ;

while ((jn||!eq(st[j].key, key) )

return(j);

}

資料結構 靜態查詢

靜態查詢表,意思是針對這個表進行靜態查詢,何為靜態,那就是不能動態修改表中內容,不能對錶進行增加 刪除。靜態查表表,有哪幾種基本辦法呢?順序查詢法 折半查詢法 分塊查詢法 順序查詢法,從佇列頭部逐個比對到末尾就可以了。儲存資料可以使用陣列或鍊錶,資料通常沒有非遞增 非遞減關係 折半查詢 針對有嚴格大...

資料結構 靜態查詢表

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

資料結構 靜態查詢表

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