資料結構 查詢1

2021-08-19 20:29:47 字數 1460 閱讀 3847

一、基本定義

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