From 2de042b741957f1e06fdfb6e3cf9c8219ce4c655 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 4 Oct 2020 11:18:04 +0100 Subject: Add elementary set ds --- set/elementary.go | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ set/tree.go | 7 +++++ tree/tree.go | 7 ----- 3 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 set/elementary.go create mode 100644 set/tree.go delete mode 100644 tree/tree.go diff --git a/set/elementary.go b/set/elementary.go new file mode 100644 index 0000000..63a3fd8 --- /dev/null +++ b/set/elementary.go @@ -0,0 +1,76 @@ +package set + +type ElementaryElem struct { + key int + val interface{} + next *ElementaryElem +} + +type Elementary struct { + root *ElementaryElem +} + +func NewElementary() *Elementary { + return &Elementary{} +} + +func (s Elementary) Empty() bool { + return s.root == nil +} + +func (s Elementary) Set(key int, val interface{}) { + if s.Empty() { + s.root = &ElementaryElem{key, val, nil} + return + } + + elem := s.root + + for { + if elem.key == key { + elem.val = val + return + } + if elem.next == nil { + elem.next = &ElementaryElem{key, val, nil} + return + } + elem = elem.next + } +} + +func (s Elementary) Get(key int) interface{} { + elem := s.root + + for elem != nil { + if elem.key == key { + return elem.val + } + elem = elem.next + } + + return nil +} + +func (s Elementary) Del(key int) interface{} { + if s.Empty() { + return nil + } + + if s.root.key == key { + defer func() { s.root = nil }() + return s.root.val + } + + elem := s.root + + for elem.next != nil { + if elem.next.key == key { + defer func() { elem.next = elem.next.next }() + return elem.next.val + } + elem = elem.next + } + + return nil +} diff --git a/set/tree.go b/set/tree.go new file mode 100644 index 0000000..2f34cc8 --- /dev/null +++ b/set/tree.go @@ -0,0 +1,7 @@ +package tree + +type Tree interface { + Empty() bool + Insert(key int, val interface{}) + Search(key int) interface{} +} diff --git a/tree/tree.go b/tree/tree.go deleted file mode 100644 index 2f34cc8..0000000 --- a/tree/tree.go +++ /dev/null @@ -1,7 +0,0 @@ -package tree - -type Tree interface { - Empty() bool - Insert(key int, val interface{}) - Search(key int) interface{} -} -- cgit v1.2.3