查詢:根據給定的某個值,在查詢表中確定乙個其關鍵字等於給定值的資料元素(記錄),若表中存在,則稱為查詢成功;若不存在,則查詢不成功,返回空資料或空指標
查詢表:同一型別的資料元素(或記錄)構成的集合
關鍵字:資料元素中某個資料項的值,又叫鍵值
主關鍵字:可以唯一地標識乙個資料(或記錄)的關鍵字
順序查詢又叫線性查詢,表中資料沒有排列資料,從第乙個資料(或最後乙個資料)開始,逐個將資料的關鍵字與給定值進行比對,若某個資料的關鍵字與給定值相同,則查詢成功,如果直到最後乙個(或第乙個)都沒有相同的關鍵字,則查詢失敗。
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 二分查詢針對有效的列表直接進行首尾二分查詢,不斷使得候選區減半,...