雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。
谷歌面試題:使用hashtable實現雇員管理系統。
要求:不使用資料庫,盡量節省記憶體,速度越快越好;
新增時,保證按雇員的id從低到高插入。
思路分析:
使用鍊錶來實現雜湊表,該煉表不帶表頭(即:鍊錶的第乙個節點就存放雇員資訊)
**實現增刪改查(顯示所有員工,按id查詢)
package main
import
("fmt"
"os"
)//定義emp
type emp struct
func
(this *emp)
showme()
//這裡的emplink 不帶表頭,即第乙個結點就存放雇員
type emplink struct
//1. 新增員工的方法, 保證新增時,編號從小到大
func
(this *emplink)
insert
(emp *emp)
//如果不是乙個空鍊錶,給emp找到對應的位置並插入
//思路是 讓 cur 和 emp 比較,然後讓pre 保持在 cur 前面
for pre = cur //保證同步
cur = cur.next
}else
}//退出時,我們看下是否將emp新增到鍊錶最後
pre.next = emp
emp.next = cur
}//顯示鍊錶的資訊
func
(this *emplink)
showlink
(no int
)//變數當前的鍊錶,並顯示資料
cur := this.head // 輔助的指標
forelse
} fmt.
println()
//換行處理
}//根據id查詢對應的雇員,如果沒有就返回nil
func
(this *emplink)
findbyid
(id int
)*emp
else
if cur ==
nil cur = cur.next
}return
nil}
//定義hashtable ,含有乙個鍊錶陣列
type hashtable struct
//給hashtable 編寫insert 雇員的方法.
func
(this *hashtable)
insert
(emp *emp)
//編寫方法,顯示hashtable的所有雇員
func
(this *hashtable)
showall()
}//編寫乙個雜湊方法
func
(this *hashtable)
hashfun
(id int
)int
//編寫乙個方法,完成查詢
func
(this *hashtable)
findbyid
(id int
)*emp
func
main()
hashtable.
insert
(emp)
case
"show"
: hashtable.
showall()
case
"find"
: fmt.
print
("請輸入id號:"
) fmt.
scanln
(&id)
emp := hashtable.
findbyid
(id)
if emp ==
nilelse
case
"exit"
: os.
exit(0
)default
: fmt.
println
("輸入錯誤")}
}}
執行結果如下圖:
資料結構 雜湊
裝填因子 key的個數與表長的比值。雜湊表查詢成功的平均查詢長度,查詢失敗的平均查詢長度都是期望,期望怎麼求,平均查詢長度就怎麼求。雜湊表這裡有兩種實現方式 線性開型定址雜湊,鍊錶雜湊。1.線性開型定址雜湊 陣列實現,資料個數不大於表長,放乙個元素時,若發生衝突,則順次線性掃瞄直到找到乙個空位。2....
資料結構 雜湊
關鍵 不比較關鍵碼,直接搜尋得到需要的數。特點 與搜尋樹不一樣,雜湊結構元素的儲存位置與關鍵碼直接對應,可以不用進行比較遍歷。如圖,建立乙個陣列,把a 4 中的資料按特定的規則儲存到相應的位置,比如a i n,到時候搜尋資料的時候可以按照同樣的規律直接找到這個位置,如果這個位置有數,則存在。比如按照...
資料結構 雜湊
將元素的儲存位置和該元素的關鍵碼通過某種函式建立一一對應的關係,構造出來的儲存結構稱之為雜湊表,轉換時借助的函式稱之為雜湊函式,在理想情況下,根據關鍵碼搜尋元素時可以不經過任何比較,一次性從表中查詢到所要搜尋的元素 但是在通過雜湊函式進行元素儲存位置確立的時候會出現,不同元素的關鍵碼通過雜湊函式計算...