資料結構 查詢06

2021-09-20 18:55:44 字數 1470 閱讀 6098

查詢(或檢索)是在給定資訊集上尋找特定資訊元素的過程。

待查詢的資料單位(或資料元素)稱為記錄。記錄由若干資料項(或屬性)組成,如學生記錄:

其中,「學號」、「姓名」、「性別」、「年齡」等都是記錄的資料項。若某個資料項的值能標識(或識別)乙個或一組記錄,稱其為關鍵字(key)。若乙個key能唯一標識乙個記錄,稱此key為主key。如「學號」的值給定就唯一對應乙個學生,不可能多個學生的學號相同,故「學號」在學生記錄裡可作為主key。若乙個key能標識一組記錄,稱此key為次key。如「年齡」值為20時,可能有若干同學的年齡為20歲,故「年齡」可作次key。下面主要討論對主key的查詢。

查詢定義及方法

查詢的定義:

設記錄表l=(r1 r2……rn),其中ri(l≤i≤n)為記錄,對給定的某個值k,在表l中確定key=k的記錄的過程,稱為查詢。若表l中存在乙個記錄ri的key=k,記為ri.key=k,則查詢成功,返回該記錄在表l中的序號i(或ri 的位址),否則(查詢失敗)返回0(或空位址null) 。

查詢的方法:

查詢方法很多,有順序查詢、折半查詢、分塊查詢、樹表查詢及hash表查詢等等。查詢演算法的優劣將影響到計算機的使用效率,應根據應用場合選擇相應的查詢演算法。

所謂順序表(sequential table),是將表中記錄(r1 r2……rn)按其序號儲存於一維陣列空間。其特點是相鄰記錄的物理位置也是相鄰的。

記錄ri的型別描述如下:

typedef struct

retype;

順序表查詢演算法實現

順序表查詢特點:

可以對無序記錄表查詢,但是效率是最低的,查詢某記錄幾乎要掃瞄整個表,當表長n很大時,會令人無法忍受。

平均查詢長度: asl=o(n)。

int searchfun(int a, int n, int x)			//順序查詢函式

} return f;

}

當記錄的key按關係≤或≥有序時,則對給定值k,逐步確定待查記錄所在區間,每次將搜尋空間減少一半(折半),直到查詢成功或失敗為止。

演算法思想:

設兩個指標(或游標)low、high,分別指向當前待查詢表的上界(表頭)和下界(表尾)。對於表(r1 r2……rn),初始時low=0、high=n-1,令:mid=指向當前待查詢表中間的那個記錄。下面舉例說明折半查詢的過程。

折半查詢特點:

只能對有序記錄表查詢,效率相對較高。

平均查詢長度: asl=o(log2(n+1)),大大優於o(n)。

int searchfun(int a, int n, int x)				//折半查詢

return -1; //未查找到

}

資料結構 06 查詢

目錄 一 靜態查詢表 二 動態查詢表 三 雜湊表 四 各種查詢演算法的適用場景 五 二分查詢 折半查詢 查詢表分為靜態查詢表 動態查詢表和雜湊表。主要有 順序表 順序查詢 有序順序表 順序查詢 折半查詢 插值查詢 索引順序表 分塊查詢 倒排表動態查詢表主要有二叉樹和樹結構兩種型別。二叉樹 二叉排序樹...

record 06 資料結構

author hasee date 2018 1 11 資料結構是用於進行程式中一組存在特定聯絡的資料的管理 通過資料結構來管理資料,更利於這一組資料的後續操作 四種資料結構 列表 元組 字典 字串 序列 列表 元組 字串 對序列可進行索引和切片操作 列表和字典可變,可以進行增刪改查 而元組和字串不...

查詢 資料結構

分類 資料結構與演算法 c c 2012 07 24 16 17 614人閱讀收藏 舉報幾種查詢演算法 順序查詢,折半查詢,分塊查詢,雜湊表 一 順序查詢的基本思想 從表的一端開始,向另一端逐個按給定值kx 與關鍵碼進行比較,若找到,查詢成功,並給出資料元素在表中的位置 若整個表檢測完,仍未找到與k...