From c26fac80aead3eed2d40d74ea379c6e58f12b3bf Mon Sep 17 00:00:00 2001 From: Rachael Gomez Date: Mon, 5 Jul 2021 13:11:37 -0700 Subject: [PATCH] all tests passing --- lib/queue.rb | 58 ++++++++++++++++++++++++++++++++++++++++++++-------- lib/stack.rb | 8 ++++---- 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..6a0a33d9 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,31 +1,73 @@ class Queue + MAX_SIZE = 20 def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = Array.new + @front = -1 + @back = -1 end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + if @front == 0 && @back == MAX_SIZE - 1 || @back == @front - 1 % MAX_SIZE - 1 + raise ArgumentError + elsif @store.empty? + @front = 0 + @back = 0 + elsif @back == MAX_SIZE - 1 && @front != 0 + @back = 0 + else + @back += 1 + end + + @store[@back] = element end def dequeue - raise NotImplementedError, "Not yet implemented" + if @store.empty? + raise ArgumentError + end + + removed_num = @store[@front] + @store[@front] = nil + + if @front == @back + @front = -1 + @back = -1 + elsif @front + 1 == MAX_SIZE + @front = 0 + else + @front += 1 + end + + return removed_num end def front - raise NotImplementedError, "Not yet implemented" + return @store[@front] end def size - raise NotImplementedError, "Not yet implemented" + return 0 if @front == -1 + return @front < @rear ? @rear - @front + 1 : MAX_SIZE - @front + @rear end def empty? - raise NotImplementedError, "Not yet implemented" + return @front == @back end def to_s - return @store.to_s + list = Array.new + + @store[@front...MAX_SIZE].each do |item| + list.push(item) if item + end + + if @back < @front + @store[0..@back].each do |item| + list.push(item) if item + end + end + + return list.to_s end end diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..72e6f4b0 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,19 @@ 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" + @store.remove_first end def empty? - raise NotImplementedError, "Not yet implemented" + return @store.empty? end def to_s