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...