DataStructure 8 查詢技術

2021-07-04 00:21:39 字數 1557 閱讀 1602

8.1概述

(1)查詢方式分類:

靜態查詢:不涉及插入、刪除操作的查詢

動態查詢:涉及插入、刪除操作的查詢

(2)查詢結構:

①線性表:適用於靜態查詢,主要採用順序查詢技術,折半查詢技術.

②樹表:適用於動態查詢,主要採用二叉排序樹查詢技術.

③雜湊表:靜態查詢和動態查詢均適用,主要採用雜湊技術.

(3)查詢演算法的效能:

n為問題規模,查詢集合中的記錄個數;

pi為查詢第i個記錄的概率;

ci為查詢第i個記錄所需的關鍵碼的比較次數;

顯然,ci與演算法緊密相關,決定於演算法;pi與演算法無關,決定於具體應用.如果pi已知,則平均查詢長度asl只是問題規模n的函式.

8.2 線性表的查詢技術

(1)順序表的順序查詢演算法

基本思想:  

從線性表的一端向另一端逐個將關鍵碼與給定值比較. 若相等,則查詢成功,給出該記錄在表中的位置; 若整個表檢測完仍為找到       與給定值相等的關鍵碼,則查詢失敗.

//改進的順序查詢演算法

int locate2(seqlist *l,elemtype e)

return i;}

(2)單鏈表的順序查詢演算法

int locate(linklist *l,elemtype e)

i++;

p=p->next;

}return 0;}

平均查詢長度: o(n)

(3) 折半查詢

要求:

線性表的記錄必須按關鍵碼有序,並且必須採用順序儲存.

基本思想:

在有序區中,取中間記錄作為比較物件,若給定值與中間記錄的關鍵碼相等,則查詢成功;

若給定值小於中間記錄的關鍵碼,則在中間記錄的左半區繼續查詢;若給定值大於中間記錄的關鍵碼,則在中         間記錄的右半區繼續查詢.

不斷重複上述過程,直到查詢成功,或所查詢的區域無記錄,查詢失敗.

(3)折半查詢非遞迴演算法

//折半查詢要滿足兩個條件,記錄必須按關鍵碼有序,必須採用順序儲存結構

int binsearch(seqlist *l,elemtype e)

//否則查詢成功,返回查詢的位置

else if(e==p[mid])

}return 0;}

(3)折半查詢遞迴演算法

int binsearch2(seqlist *l,int low,int high,elemtype e)

else}}

平均查詢長度: o(log2ⁿ)

Oracle 資料型別為date 日期查詢技巧

問題描述 字段儲存為帶有時分秒格式的日期形式,現需要查詢某天或某日期區間內資料,即查詢條件無時分秒。select from empwhere to date to char createdate,yyyy mm dd yyyy mm dd to date 2018 03 04 yyyy mm dd ...

Oracle 資料型別為date 日期查詢技巧

date型別是oracle中儲存日期類的一種常用型別,其處理也是在資料庫使用中比較多需要注意的地方。如我們可以使用to char函式將其轉化為任意時間格式的字串,也可使用to date函式轉化相應的字串為日期格式。本篇主要介紹這樣一種使用情況。問題描述 字段儲存為帶有時分秒格式的日期形式,現需要查詢...

資料結構 8 查詢 線性查詢

int sequential search int a,int n,int key n是要查詢的長度,key是關鍵字 return 0 int sequential search2 int a,int n,int key n是要查詢的長度,key是關鍵字 return i int binary se...