diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..7e1fd241 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,31 +1,56 @@ class Queue + MAX_SIZE = 20 + def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = Array.new + @head = @tail = 0 end + # add value to tail def enqueue(element) - raise NotImplementedError, "Not yet implemented" + # using mod to account for cicular increment 20 % 20 = 0 + # check if queue is full + raise ArgumentError.new("Queue is full, cannot add element") if @head == (@tail + 1) % MAX_SIZE + # otherwise add element as tail value + + @store[@tail] = element + @tail = (@tail + 1) % MAX_SIZE + + return @store end def dequeue - raise NotImplementedError, "Not yet implemented" + raise ArgumentError.new("Queue is empty, cannot delete element") if @head == @tail + + removed_element = @store[@head] + # @store[@head] = nil + # @store = @store.compact + @head = (@head + 1) % MAX_SIZE + + return removed_element end def front - raise NotImplementedError, "Not yet implemented" + return @store[@head] end def size - raise NotImplementedError, "Not yet implemented" + return 0 end def empty? - raise NotImplementedError, "Not yet implemented" + return @head == @tail end def to_s + # TODO: refactor dequeue to not have to have this conditional + # has to do with removing nil which affects the index. This is P2. P1: Graduate! + if @tail >= @head + @store = @store[@head...@tail] + else + @store = @store[@head...MAX_SIZE] + (@store[0...@tail]) + end return @store.to_s end end diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..f83da154 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,20 @@ class Stack def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = LinkedList.new end def push(element) - raise NotImplementedError, "Not yet implemented" + @store.add_first(element) end def pop - raise NotImplementedError, "Not yet implemented" + return nil if self.empty? + element = @store.remove_first + return element end def empty? - raise NotImplementedError, "Not yet implemented" + return @store.empty? end def to_s