hash.go
package hash import ( "fmt" ) type Emp struct { ID int Name string Next *Emp } //第一个节点就存放员工 type EmpLink { Head *定义HashTable type HashTable { LinkArr [7]EmpLink } 添加员工的方法 func (empl *EmpLink) InsertEmp(emp *Emp) { cur := empl.Head var pre *Emp = nil if cur == nil { empl.Head = emp return } 如果不是一个空链表,找到对应的位置并插入 for { if cur != nil { if cur.ID >= emp.ID { break } pre = cur cur = cur.Next } else { } } pre.Next = emp emp.Next = cur } func (hash *HashTable) Insert(emp *Emp) { 使用散列函数,确定将员工添加到哪个链表 linkNum := hash.HashFunc(emp.ID) hash.LinkArr[linkNum].InsertEmp(emp) } func (empl *EmpLink) FindByID(id int) *Emp { cur :=if cur != nil && cur.ID == id { cur } else } cur = cur.Next } nil } func (hash *HashTable) Find(id Emp { 使用散列函数确定在哪个链表 linkNum := hash.HashFunc(id) hash.LinkArr[linkNum].FindByID(id) } 散列方法 func (hash *HashTable) HashFunc(id int) { return id % } func (empl *EmpLink) ShowLink(num ) { if empl.Head == nil { fmt.Printf(当前%d链表为空\n,num) 否则遍历显示数据 cur := nil { fmt.Printf(链表:%d,员工id:%d,员工名字:%s--> } } fmt.Println(``) } func (hash *HashTable) Show() { for i := 0; i < len(hash.LinkArr); i++ { hash.LinkArr[i].ShowLink(i) } } func (emp *Emp) ShowMe() { fmt.Printf(链表%d找到该员工 %d\n",emp.ID%package main import ( " go_code/data_structure/hashos ) func main() { key := "" id := 0 name := "" var hashTable hash.HashTable { fmt.Println(==========员工菜单==========) fmt.Println(insert 表示添加员工show 表示显示员工find 表示查询员工exit 表示退出员工请输入你的选择:) fmt.Scanln(&key) switch key { case insert: fmt.Println(请输入员工id:) fmt.Scanln(&id) fmt.Println(请输入员工名字:name) emp := &hash.Emp{ ID: id,Name: name,} hashTable.Insert(emp) show: hashTable.Show() find请输入你要查找的id:id) emp := hashTable.Find(id) if emp == nil { fmt.Printf(id=%d的员工不存在\n { 显示雇员信息 emp.ShowMe() } exit: os.Exit() } } }
运行结果:
f:\goproject\src\go_code\data_structure>go run main.go
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
insert
请输入员工id:
1
请输入员工名字:
bob
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
insert
请输入员工id:
8
请输入员工名字:
mike
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
insert
请输入员工id:
15
请输入员工名字:
tom
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
insert
请输入员工id:
57
请输入员工名字:
pop
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
show
当前0链表为空
链表:1,员工id:1,员工名字:bob-->链表:1,员工id:8,员工名字:mike-->链表:1,员工id:15,员工名字:tom-->链表:1,员工id:57,员工名字:pop-->
当前2链表为空
当前3链表为空
当前4链表为空
当前5链表为空
当前6链表为空
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
insert
请输入员工id:
36
请输入员工名字:
bib
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
show
当前0链表为空
链表:1,员工id:1,员工名字:bob-->链表:1,员工id:8,员工名字:mike-->链表:1,员工id:15,员工名字:tom-->链表:1,员工id:36,员工名字:bib-->链表:1,员工id:57,员工名字:pop-->
当前2链表为空
当前3链表为空
当前4链表为空
当前5链表为空
当前6链表为空
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
insert
请输入员工id:
12
请输入员工名字:
viv
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
show
当前0链表为空
链表:1,员工id:1,员工名字:bob-->链表:1,员工id:8,员工名字:mike-->链表:1,员工id:15,员工名字:tom-->链表:1,员工id:36,员工名字:bib-->链表:1,员工id:57,员工名字:pop-->
当前2链表为空
当前3链表为空
当前4链表为空
链表:5,员工id:12,员工名字:viv-->
当前6链表为空
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
find
请输入你要查找的id:
12
链表5找到该员工 12
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
find
请输入你要查找的id:
7
id=7的员工不存在
==========员工菜单==========
insert 表示添加员工
show 表示显示员工
find 表示查询员工
exit 表示退出员工
请输入你的选择:
exit
f:\goproject\src\go_code\data_structure>