diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..75f06cb1 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,31 +1,76 @@ class Queue + MAX_SIZE = 20 + def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = Array.new(MAX_SIZE) + @front = @rear = -1 end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + if (@front == 0 && @rear == MAX_SIZE - 1) || (@rear == (@front - 1) % (MAX_SIZE - 1)) + raise ArgumentError.new("The queue is full") + elsif (@front == -1) && (@rear == -1) + @front = 0 + @rear = 0 + elsif @rear == MAX_SIZE - 1 && @front != 0 + @rear = 0 + else + @rear += 1 + end + + @store[@rear] = element + end def dequeue - raise NotImplementedError, "Not yet implemented" + if @store.empty? + raise ArgumentError.new("the Queue is empty") + end + + data = @store[@front] + + @store[@front] = nil + + if (@front == @rear) + @front == -1 + @rear == -1 + elsif (@front == MAX_SIZE - 1) + @front = 0 + else + @front += 1 + end + + return data end def front - raise NotImplementedError, "Not yet implemented" + return @store[@front] end def size - raise NotImplementedError, "Not yet implemented" + if @rear >= @front + return @rear - @front + else + MAX_SIZE - @front + @back + end end def empty? - raise NotImplementedError, "Not yet implemented" + return @front.nil? || @front == @rear end def to_s - return @store.to_s + queue = [] + + 20.times do |i| + index = (i + @front) % MAX_SIZE + + if @store[index] + queue << @store[index] + end + end + + return queue.to_s end end diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..e875b92f 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,21 @@ 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 @store.empty? + + return @store.remove_first end def empty? - raise NotImplementedError, "Not yet implemented" + return @store.empty? end def to_s