雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。如下圖,定義了16個陣列,每個陣列用來存放一條鍊錶. 在插入資料時, 首先會通過將元素值對陣列個數取模來找到該元素位於哪個鍊錶(陣列), 然後再按照鍊錶的插入方式插入也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。
我們google公司的乙個上機題來學習hash表:
有乙個公司,當有新的員工來報道時,要求將該員工的資訊加入(id,性別,年齡,名字,住址…),當輸入該員工的id時,要求查詢到該員工的所有資訊.要求:
**實現
/**
* 雜湊表實現資料的儲存
* * @author timepause
* @create 2020-02-09 10:53
*/public
class
hashdemo
}/**
* 用鍊錶存放雇員資訊
*/class
emplinkedlist
// 如果新增的不是第乙個雇員,則使用乙個輔助指標,幫助定位到最後
emp curemp = head;
while
(true
)//否則則將指標後移
curemp = curemp.next;
}// 在鍊錶末尾新增emp
curemp.next = emp;}/
*** 刪除節點元素
*@param no
*/public
void
del(
int no)
else
//如果是正常情況. 刪除節點
emp curemp = head;
// 輔助變數flag,代表查詢的元素是否存在
boolean flag =
false
;while
(true)if
(curemp.next.id==no)
curemp=curemp.next;}if
(flag)
else
}//遍歷顯示鍊錶雇員的基本資訊
public
void
list
(int no)
system.out.
print
("第 "
+(no+1)
+" 鍊錶的資訊為");
emp curemp = head;
//輔助指標
while
(true
) curemp = curemp.next;
//後移,遍歷
} system.out.
println()
;}// 根據id查詢雇員, 如果找到就返回emp,如果沒找到就返回null
public emp findempbyid
(int id)
// 如果鍊錶不為空, 則進行鍊錶的查詢
// 首先建立乙個輔助變數
emp curemp = head;
while
(true
)//如果到鍊錶尾部還沒有找到, 則將當前元素置為空並返回
if(curemp.next==null)
curemp = curemp.next;
//後移
}return curemp;}}
/*** 建立hashtab,管理多條鍊錶 */
class
hashtab
}// 編寫雜湊函式, 適用於簡單取模
public
inthashfun
(int id)
//新增雇員
public
void
add(emp emp)
/** * 刪除雇員
*/public
void
del(
int no)
// 遍歷所有的鍊錶, 通過遍歷hashtab
public
void
list()
}//根據輸入的id,查詢雇員
public
void
findempbyid
(int id)
else
}}
在測試**時,在main()方法中編寫乙個介面來測試
public
static
void
main
(string[
] args)}}
}
資料結構與演算法 雜湊表
對映在數學上相當於乙個函式f x a b。雜湊表的核心是乙個雜湊函式 hash function 這個函式規定了集合a中的元素如何對應到集合b中的元素。根據設定的雜湊函式 h key 和處理衝突的方法 將一組關鍵字映像到乙個有限的連續的位址集 區間 上,並以關鍵字在位址集中的 像 作為相應記錄在表中...
資料結構與演算法 雜湊表
雜湊表也叫雜湊表,hash表是一種根據關鍵字值 key value 而直接進行訪問的資料結構。是把記錄的儲存位置和記錄的關鍵字之間建立對應關係的一種儲存結構。雜湊表又叫 雜湊表,速度很快,最常用的一種儲存機構是順序表 鍊錶的結構 主結構是順序表,每個順序表中的元素又對應一張鍊錶。雜湊表的常用資料結構...
資料結構與演算法 雜湊函式與雜湊表
1.雜湊函式的特點 1 理論上輸入域是無窮大的,輸出域是固定的。2 雜湊一般是16位的,每一位是0 9 a f 的隨機數所以一共16的16次方種也就是2 64種 3 雜湊函式輸出的值會均勻分布。比如說輸入域是0 98,輸出域是0 2,我們輸入99個數字,那麼所有輸入的值 3後,0 1 2後面基本都有...