From d28b47c43ef73efbe06f77acea077bee9ccec492 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 5 Dec 2020 08:35:12 +0000 Subject: rename set to search --- search/elementary.go | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 search/elementary.go (limited to 'search/elementary.go') diff --git a/search/elementary.go b/search/elementary.go new file mode 100644 index 0000000..a9d367e --- /dev/null +++ b/search/elementary.go @@ -0,0 +1,79 @@ +package set + +type ElementaryElem struct { + key int + val int + 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 int) { + 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) (int, error) { + elem := s.root + + for elem != nil { + if elem.key == key { + return elem.val, nil + } + elem = elem.next + } + + return 0, NotFound +} + +func (s *Elementary) Del(key int) (int, error) { + if s.Empty() { + return 0, NotFound + } + + if s.root.key == key { + defer func() { + s.root = s.root.next + }() + return s.root.val, nil + } + + elem := s.root + for elem.next != nil { + if elem.next.key == key { + defer func() { + elem.next = elem.next.next + }() + return elem.next.val, nil + } + elem = elem.next + } + + return 0, NotFound +} -- cgit v1.2.3