小白學資料結構與演算法(6) 查詢

2021-10-10 10:08:00 字數 3302 閱讀 8164

查詢:根據給定的某個值,在查詢表中確定乙個其關鍵字等於給定值的資料元素(記錄),若表中存在,則稱為查詢成功;若不存在,則查詢不成功,返回空資料或空指標

查詢表:同一型別的資料元素(或記錄)構成的集合

關鍵字:資料元素中某個資料項的值,又叫鍵值

主關鍵字:可以唯一地標識乙個資料(或記錄)的關鍵字

順序查詢又叫線性查詢,表中資料沒有排列資料,從第乙個資料(或最後乙個資料)開始,逐個將資料的關鍵字與給定值進行比對,若某個資料的關鍵字與給定值相同,則查詢成功,如果直到最後乙個(或第乙個)都沒有相同的關鍵字,則查詢失敗。

2.1 從第乙個開始順序表查詢**:

int

sequence_serach

(int

* a,

int n,

int key)

return0;

}

2.2 從最後乙個元素開始順序查詢表

int

sequence_serach

(int

* a,

int n,

int key)

3.1 二分查詢法

int

sequence_serach

(int

* a,

int n,

int key)

else

if(a[mid]

>key)

else

return mid;

//若相等,則說明

}return0;

}

3.2 插值查詢法

將二分查詢法中的

mid=

(low+high)/2

;

改為:

mid=low+

(high-low)

*(key-a[low])/

(a[high]

-a[low]);

//插值

3.3 斐波那契查詢

注意:使用改方法時需要使用事先已計算好的斐波那契陣列,即f=

int

feibonaqie_serach

(int

* a,

int n,

int key)

else

if(key)else

}return0;

}

分塊索引:將資料集分成若干塊,並且這些塊,塊內無序,塊間有序

5.2 查詢

/*二叉樹資料結構*/

typedef

struct bitnode

bitnode,

*bitree;

/*二叉排序樹查詢*/

status searchbst

(bitree t,

int key, bitree f, bitree* p)

else

if(t->data == key)

else

if(key < t->data)

return

searchbst

(t->lchild, key, t, p)

;else

return

searchbst

(t->rchild, key, t, p)

;}

5.3 插入

status insertbst

(bitree* t,

int key)

else

return false;

//樹中已有key資料,插入失敗

}

5.4 根據插入程式,可以寫出二叉排序樹的建立程式

void

createbst

(bitree* t)

;for

(i=0

;i<

10;i++

)insertbst

(t, a[i]);

}void

bianli

(bitree t)

//中序遍歷,會按大小順序列印出樹的值

void

main()

//建立二叉排序樹主程式

接下來,我們來實現乙個雜湊表的查詢演算法,步驟:構造雜湊表結構->確定雜湊函式->插入資料構建雜湊表->實驗雜湊表的查詢

step 1. 構建雜湊表結構

#define success 1

#define unsuccess 0

#define hashsize 12

//定義雜湊表長度為陣列長度

#define nullkey -32768

typedef

struct hashtable

hashtable;

int m=

0;

step2:構造雜湊函式,這裡使用的是除留餘數法構造

int

hash

(int key)

step3:插入資料,構建雜湊表

/*初始化雜湊表*/

status inithashtable

(hashtable* h)

return ok;

}/*插入關鍵字進雜湊表*/

void

inserthash

(hashtable* h,

int key)

status searchhashtable

(hashtable h,

int key,

int* addr)

return success;

}

資料結構與演算法(查詢)

1 查詢表 用於查詢的資料集合,由同一型別的資料元素組成,經常進行的操作 2 靜態查詢表 無需動態修改查詢表的操作,都是靜態查詢表。適合的查詢方法有順序查詢 折半查詢 雜湊查詢。3 動態查詢表 需要動態插入或刪除的操作。適合的查詢方法有二叉排序樹查詢 雜湊查詢。4 關鍵字 資料元素中唯一表示該元素的...

資料結構與演算法 查詢演算法

1.線性查詢,從頭到尾去遍歷,找到符合的則返回 2.二分法查詢 前提 目標陣列有序 package math public class dichotomy int k new dichotomy show arr,8 system.out.println k public int show int ...

資料結構與演算法 查詢演算法

第二章 查詢和排序演算法 課時1 列表查詢 1 列表查詢的含義 從物件中查詢某乙個特定的元素 2 列表查詢的方式包含兩種 順序查詢和二分查詢 3 順序查詢演算法 從開始一直搜尋到最後乙個元素進行查詢,for迴圈,時間複雜度為o n 4 二分查詢針對有效的列表直接進行首尾二分查詢,不斷使得候選區減半,...