golang数据结构之散哈希表(Hash)
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找到该员工 %dn",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:goprojectsrcgo_codedata_structure>go run main.go f:goprojectsrcgo_codedata_structure> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |