一、基本定義
1.關鍵字:是資料元素中摸個資料項的值,又稱鍵值,他可以標識乙個資料元素
2.靜態查詢表:只作查詢操作的查詢表
3.動態查詢表:在查詢中插入或刪除元素
二、順序表查詢(線性查詢)
1.過程:從表的第乙個(或最後乙個)記錄開始,逐個進行記錄的關鍵字和給定值的比較,若某個記錄的關鍵字和給定值相等,則查詢成功。
2.演算法:a為陣列,n為要查詢的陣列個數,key為關鍵字
int sequential_search(int *a,int n, int ket)
int i;
for(i=0;i
return i; //返回0則說明查詢失敗
4.複雜度
查詢的最好情況時第乙個位置就找到 複雜度:o(1)
最壞的情況需要你比較n次 複雜度 o(n)
最終時間複雜度o(n)
三、有序表查詢
.折半查詢
1.前提:線性表中的關鍵碼有序,線性表採用順序儲存
2.演算法:取中間值作為比較物件,若給定值與中間記錄相等則查詢成功,若給定值小於中間記錄,則在中間記錄的左半區繼續查詢,若大於中間記錄則在右邊繼續查詢
int binary_search(int *a,int n, int key)
{ int mid,low,high;
int low=0;
int high=n;
while(low<=high)
{mid=(low+high)/2;
if(a[mid]
low=mid+1;
else if (a[mid]>key)
high=mid-1;
else
return mid;
return 0;
3.複雜度
由二叉樹性質的值,具有n個結點的完全二叉樹深度為(logn)向下取整+1,折半查詢雖然不是完全二叉樹,但最壞情況查詢次數仍然是(logn)向下取整+1
時間複雜度o(logn)
四、線性索引查詢
1.索引就是把乙個關鍵字與它對應的記錄相關聯的過程
線性索引就是講索引集合組織為線性結構,也成索引表。主要介紹三種:稠密索引、分塊索引和倒排索引
2.稠密索引
3.分塊索引
塊內無序,塊間有序
定義分塊索引的索引結構分三個資料項:
最大關鍵碼:儲存每一塊中的最大關鍵字
儲存塊中的記錄個數,以便於迴圈利用
用於指向塊首資料元素的指標,便於開始對這一塊進行遍歷
平均查詢長度:
將n個記錄分成m塊,每個塊中有t條記錄 n=m*t,m=n/t
塊間查詢長度(m+1)/2,塊內查詢長度(t+1)/2
所以l=(m+1)/2+(t+1)/2=(m+t)/2+1=(n/t+t)/2+1
最佳情況是m=t,l=t+1=sqrt(n)+1
分塊索引的效率比順序查詢高,但是低於折半查詢
資料結構與演算法(查詢)1
演算法如下 define listsze 20 typedef struct elemtype typedef struct stable 查詢過程 int searchseq stable st,keytype k 在順序表中查詢關鍵字等於k的元素,若找到則函式值為該元素在表中的位置,否則為0 a...
資料結構(三)查詢演算法(1)順序查詢
一片儲存空間的中的資料既可能是有序的 也可能是無序的,有序可以是公升序 降序 分塊公升序等等 對於無序存放的陣列只能通過順序查詢的方法找到想要的資料 順序查詢就是從資料空間的一端到另一端,逐個資料進行比對,直至找到想要的資料 按照這種說法,最終可能出現兩種情況 找到元素,找不到,超出邊界 這樣每次需...
查詢 資料結構
分類 資料結構與演算法 c c 2012 07 24 16 17 614人閱讀收藏 舉報幾種查詢演算法 順序查詢,折半查詢,分塊查詢,雜湊表 一 順序查詢的基本思想 從表的一端開始,向另一端逐個按給定值kx 與關鍵碼進行比較,若找到,查詢成功,並給出資料元素在表中的位置 若整個表檢測完,仍未找到與k...