diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..79e93d62 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,16 +1,42 @@ class Queue def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = Array.new(10) + @front = -1 + @back = -1 end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + #Circular buffer method + #Check if queue is empty + if @front == -1 && @back == -1 + @front = 0 + @back = 1 + end + + #Check if queue is full + if ((@back + 1) % @store.length) == @front + raise ArgumentError.new("Queue is full!") + end + + @store[@back] = element + #Make it wrap around when it reaches the end & use modulo to not go over the end + @back = (@back + 1) % @store.length end def dequeue - raise NotImplementedError, "Not yet implemented" + if @front == @back + raise ArgumentError.new("Queue is empty!") + end + + #Store the current first element in a temp + temp = @store[@front] + #Make the front element nil + @store[@front] = nil + + @front = (@front + 1) % @store.length + + return temp end def front diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..0fe983b2 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,23 @@ +require_relative './linked_list.rb' + class Stack def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = LinkedList.new end def push(element) - raise NotImplementedError, "Not yet implemented" + @store.add_last(element) + return @store end def pop - raise NotImplementedError, "Not yet implemented" + return @store.remove_last if @store.get_first != nil end def empty? - raise NotImplementedError, "Not yet implemented" + if @store.get_first == nil + return true + end end def to_s diff --git a/test/stack_test.rb b/test/stack_test.rb index df5046c8..d0324553 100644 --- a/test/stack_test.rb +++ b/test/stack_test.rb @@ -17,7 +17,6 @@ end it "pushes multiple somethings onto a Stack" do - skip s = Stack.new s.push(10) s.push(20) @@ -26,13 +25,11 @@ end it "starts the stack empty" do - skip s = Stack.new s.empty?.must_equal true end it "removes something from the stack" do - skip s = Stack.new s.push(5) removed = s.pop @@ -41,7 +38,6 @@ end it "removes the right something (LIFO)" do - skip s = Stack.new s.push(5) s.push(3)