查詢基本概念:
列表:由同一型別的資料元素組成的集合。
關鍵碼:資料元素中的某個資料項,可以標識列表中的乙個或一組資料元素。
鍵值:關鍵碼的值。
主關鍵碼:可以唯一地標識乙個記錄的關鍵碼。
次關鍵碼:不能唯一地標識乙個記錄的關鍵碼。
查詢 :在具有相同型別的記錄構成的集合中找出滿足給定條件的記錄。
查詢的結果 :若在查詢集合中找到了與給定值相匹配的記錄,則稱查詢成功;查詢成功返回查詢到的記錄的位置或值,否則,稱查詢失敗,查詢失敗,要返回乙個不成功的標誌:例如空指標或0.
靜態查詢 :不涉及插入和刪除操作的查詢 。
動態查詢 :涉及插入和刪除操作的查詢。
查詢結構 :面向查詢操作的資料結構
查詢資料結構:
線性表:適用於靜態查詢,主要採用順序查詢技術、折半查詢技術。
樹表:適用於動態查詢,主要採用二叉排序樹的查詢技術。
雜湊表:靜態查詢和動態查詢均適用,主要採用雜湊技術。
線性表的查詢技術
普通的順序查詢:
const int maxsize = 100;
class linesearch //析構函式為空
int seqsearch(int k); //順序查詢
int binsearch1(int k); //折半非遞迴查詢
int binsearch2(int low, int high, int k); //折半遞迴查詢
private:
int data[maxsize]; //查詢集合為整型
int length; //查詢集合的元素個數
};linesearch :: linesearch(int a[ ], int n)
順序查詢:
從線性表的一端向另一端逐個將關鍵碼與給定值進行比較,
若相等,則查詢成功,給出該記錄在表中的位置;
若整個表檢測完仍未找到與給定值相等的關鍵碼,則查詢失敗,給出失敗資訊。
int linesearch :: seqsearch(int k)
哨兵順序查詢:
int linesearch :: seqsearch(int k)
單鏈表的順序查詢:
int linksearch::seqsearch2(node *first, int k)
if (p==null)
return 0; //查詢失敗,返回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]相對應的折半查詢判定樹
查詢成功:在表中查詢任一記錄的過程,即是折半查詢判定樹中從根結點到該記錄結點的路徑,和給定值的比較次數等於該記錄結點在樹中的層數。
查詢不成功:
查詢失敗的過程就是走了一條從根結點到外部結點的路徑,
和給定值進行的關鍵碼的比較次數等於該路徑上內部結點的個數(失敗情況下的平均查詢長度等於樹的高度)。
查詢 線性表的查詢
標頭檔案 sqlistsearch.h include const int maxsize 100 順序表中最多元素個數 template struct rectype 順序表記錄型別 template struct idxtype 索引表型別 template class sqlistsearch...
線性表查詢
查詢的基本概念 廣義地講 查詢是在具有相同型別的記錄構成的集合中找出滿足給定條件的記錄。給定的查詢條件可能是多種多樣的,為了便於討論,我們把查詢條件限制為 匹配 即在查詢關鍵碼等於給定值的記錄。順序查詢 順序查詢又稱線性查詢,是最基本的查詢技術之一,其基本思想為 從線性表的一端向另外一端逐個將關鍵碼...
查詢 基於線性表
1 順序查詢 對於乙個無序的,即關鍵字沒有排序的線性表來說,用所給的關鍵字與線性表中的所有記錄逐個進行比較,直到成功或者失敗。平均查詢長度 asl n 1 2 ii 最近最少使用法 lur 也叫作移至前端法,如果找到一條記錄就把他移至線性表的最前面,而把其他記錄後退乙個位置。顯然,這種方式使用鍊錶來...