golang實現hash表(雜湊)

2021-10-10 10:39:03 字數 2954 閱讀 2892

使用hash原理,模擬資料庫儲存資料,直接操作記憶體編輯資料,

package main

import

("errors"

"fmt"

"os"

)//hash鍊錶的基本使用

//思路

//1、建立乙個hash結構體,裡面儲存自己自定義數量的鍊錶陣列

//2、建立乙個鍊錶,用來儲存使用者資料

//3、每次插入前先計算插入的哪乙個陣列,根據id從小到大依次插入,這樣做是為了查詢快

//定義方法

type hashfunc inte***ce

//使用者資料鏈表

type link struct

//hashtable

type hashtable struct

func

(this *link)

publish

(link *link)

(*link,

error

)//插入的元素小於第乙個元素時

tmp := this

if this.id > link.id

else

if tmp.next.id < link.id

else

} link.next = tmp.next

tmp.next = link

}return this,

nil}

//獲取插入表id

func

gethashindex

(id int

)int

//新增元素方法

func

(this *hashtable)

push

(link *link)

error

this.table[index]

= k return

nil}

//查詢方法

func

(this *hashtable)

find

(id int)(

*link,

error

) tmp := this.table[index]

forelse

else}}

}//刪除方法

func

(this *hashtable)

del(id int

)error

//判斷第乙個元素是否等於需要刪除的元素

if tmp.id == id

//第乙個元素不等於需要刪除的元素,所以從第二個開始查詢

forif tmp.next.id == id

else}}

//修改方法

func

(this *hashtable)

update

(id int

,name string

)error

forif tmp.next !=

nilelse

}return errors.

new(

"id is not find")}

//檢視所有元素

func

(this *hashtable)

each()

forelse

} fmt.

println

("------------------------------------")}

}func

main()

hashtale.table =

&table

link :=

&link

fmt.

println

("程式已啟動。。。"

)var flag int

forswitch flag

res, err := hashtale.

find

(link.id)

if err !=

nilelse

case3:

fmt.

print

("成員id:")_

, err := fmt.

scan

(&link.id)

if err !=

nil fmt.

print

("成員name:")_

, err = fmt.

scan

(&link.name)

if err !=

nilif err := hashtale.

update

(link.id,link.name)

;err !=

nilcase4:

fmt.

print

("成員id:")_

, err := fmt.

scan

(&link.id)

if err !=

nilif err := hashtale.

del(link.id)

;err !=

nilcase5:

fmt.

print

("成員id:")_

, err := fmt.

scan

(&link.id)

if err !=

nil fmt.

print

("成員name:")_

, err = fmt.

scan

(&link.name)

if err !=

nilif err := hashtale.

push

(link)

;err !=

nilelse

case0:

os.exit(0

)}fmt.

println()

}}

雜湊(hash 雜湊表)

可以認為雜湊有著陣列的思想,它將所有的資料段拼成乙個陣列 順序表 進行儲存,通過雜湊函式,可以基本上以o 1 的時間複雜度來查詢和儲存資料。通過資料段中的唯一關鍵字 key 經過某種演算法,得出此資料段在整個雜湊陣列 順序表 中的的下標,然後直接取元素即可。有資料結構如下 資料段 key,value...

Hash表(雜湊表 雜湊表)

雜湊函式 乙個把查詢表中的關鍵字對映成該關鍵字對應的位址的函式,記為hash key addr。位址可以是陣列下標,索引,或記憶體位址等 衝突 雜湊函式可能會把兩個和兩個以上的不同關鍵字對映到同一位址。衝突不可避免,所以要設計好的處理衝突的方法。同義詞 發生碰撞的不同關鍵字為同義詞。雜湊表 根據關鍵...

Hash和雜湊 雜湊 表

hash又稱為雜湊,是把任意長度的輸入 又叫做預對映pre image 通過雜湊演算法變成固定長度的輸出,該輸出就是雜湊值。hash演算法還有乙個特點,就是很難找到逆向規律。在同一函式下,如果兩個雜湊值是不相同的,那麼這兩個雜湊值的原始輸入也是不同的。hash演算法又被稱為雜湊演算法。雖然被稱為演算...