数据结构[Golang实现]---------MapTable

该文描述了一个基于链地址法解决冲突的哈希表实现,包括生成哈希函数GenerateHash以及添加、获取、设置和删除元素的方法。HashItem结构体存储键值对,HashTable数据结构利用256个槽位存储链表。
摘要由CSDN通过智能技术生成

目录

1.结构定义

2.GenerateHash()

3.Add()

4.Get()

5.Set()

6.Remove()


import "hash/fnv"

1.结构定义

type HashItem struct {
	key   string
	value int
	next  *HashItem
}
type HashTable struct {
	data [256]*HashItem
}

2.GenerateHash()

func GenerateHash(s string) uint8 {
	hash := fnv.New32a()
	hash.Write([]byte(s))
	return uint8(hash.Sum32() % 256)

}

3.Add()

func (table *HashTable) Add(key string, i int) {
	position := GenerateHash(key)
	if table.data[position] == nil {
		table.data[position] = &HashItem{key: key, value: i}
	}
	current := table.data[position]
	if current.next != nil {
		current = current.next
	}
	current.next = &HashItem{key: key, value: i}

}

4.Get()

func (table *HashTable) Get(key string) (int, bool) {
	position := GenerateHash(key)
	current := table.data[position]
	for current != nil {
		if current.key == key {
			return current.value, true
		}
		current = current.next

	}
	return 0, false
}

5.Set()

func (table *HashTable) Set(key string, i int) bool {
	position := GenerateHash(key)
	current := table.data[position]
	for current != nil {
		if current.key == key {
			current.value = i
			return true
		}
		current = current.next
	}
	return false
}

6.Remove()

func (table *HashTable) Remove(key string) bool {
	position := GenerateHash(key)
	if table.data[position] == nil {
		return false
	}
	if table.data[position].key == key {
		table.data[position] = table.data[position].next
		return true
	}
	current := table.data[position]
	for current.next != nil {
		if current.next.key == key {
			current.next = current.next.next
			return true
		}
		current = current.next
	}
	return false
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值