diff options
| -rw-r--r-- | set/elementary.go | 76 | ||||
| -rw-r--r-- | set/tree.go (renamed from tree/tree.go) | 0 |
2 files changed, 76 insertions, 0 deletions
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/tree/tree.go b/set/tree.go index 2f34cc8..2f34cc8 100644 --- a/tree/tree.go +++ b/set/tree.go |
