Skip to content

Commit

Permalink
Add Hash Table
Browse files Browse the repository at this point in the history
  • Loading branch information
ua-nick committed Apr 2, 2018
1 parent 057b9d4 commit 60bdc1e
Showing 1 changed file with 77 additions and 0 deletions.
77 changes: 77 additions & 0 deletions HashTable/HashTable.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package main

import "hash/fnv"

type TableItem struct {
key string
data int
next *TableItem
}

type HashTable struct {
data [256]*TableItem
}

func (table *HashTable) Add(key string, i int) {
position := generateHash(key)
if table.data[position] == nil {
table.data[position] = &TableItem{key: key, data: i}
return
}
current := table.data[position]
for current.next != nil {
current = current.next
}
current.next = &TableItem{key: key, data: i}
}

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

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

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
}

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

0 comments on commit 60bdc1e

Please sign in to comment.