From 042fb405909c5f831bcd2a865b9e704c8b7869e7 Mon Sep 17 00:00:00 2001 From: Angele Zamarron Date: Mon, 2 Mar 2020 22:42:40 -0800 Subject: [PATCH 1/5] passing stack tests --- lib/stack.rb | 12 +++++++----- test/stack_test.rb | 5 ----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..faf57916 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,19 +1,21 @@ +require 'linked_list' class Stack + # first in, last out, like a pile of books 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() end def empty? - raise NotImplementedError, "Not yet implemented" + return @store ? true : false end def to_s diff --git a/test/stack_test.rb b/test/stack_test.rb index df5046c8..2cf9d5d9 100644 --- a/test/stack_test.rb +++ b/test/stack_test.rb @@ -10,14 +10,12 @@ end it "pushes something onto a empty Stack" do - skip s = Stack.new s.push(10) s.to_s.must_equal "[10]" end it "pushes multiple somethings onto a Stack" do - skip s = Stack.new s.push(10) s.push(20) @@ -26,13 +24,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 +37,6 @@ end it "removes the right something (LIFO)" do - skip s = Stack.new s.push(5) s.push(3) From 08353eaf5c7b4aac946da5db347b5bdab2f36b55 Mon Sep 17 00:00:00 2001 From: Angele Zamarron Date: Mon, 2 Mar 2020 23:27:06 -0800 Subject: [PATCH 2/5] queue in progress --- lib/queue.rb | 27 ++++++++++++++++++++++++--- test/queue_test.rb | 7 ------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..1ac714ba 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,12 +1,26 @@ class Queue def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + # first in, first out, like a check-out line + @store = Array.new(20) + # pointers to @store nodes + @front = @back = -1 end def enqueue(element) - raise NotImplementedError, "Not yet implemented" + # if empty then add element node to index 0 + if @front == -1 && @back == -1 + @front = 0 + @back = 0 + end + # if queue is full + if @front == ((@back + 1) % @store.length) + return nil + end + + @store[@back] = element + @back = (@back + 1) % @store.length + return @store[@back] end def dequeue @@ -26,6 +40,13 @@ def empty? end def to_s + # from front to end + if @front < @back + @store = @store[@front...@back] + # from back to end, then start to front + else + @store = @store[@back..-1] + @store[0...@front] + end return @store.to_s end end diff --git a/test/queue_test.rb b/test/queue_test.rb index 8a7dcd9c..0f5036be 100644 --- a/test/queue_test.rb +++ b/test/queue_test.rb @@ -11,14 +11,12 @@ end it "adds something to an empty Queue" do - skip q = Queue.new q.enqueue(10) q.to_s.must_equal "[10]" end it "adds multiple somethings to a Queue" do - skip q = Queue.new q.enqueue(10) q.enqueue(20) @@ -27,13 +25,11 @@ end it "starts the size of a Queue at 0" do - skip q = Queue.new q.empty?.must_equal true end it "removes something from the Queue" do - skip q = Queue.new q.enqueue(5) removed = q.dequeue @@ -42,7 +38,6 @@ end it "removes the right something (LIFO)" do - skip q = Queue.new q.enqueue(5) q.enqueue(3) @@ -53,7 +48,6 @@ end it "properly adjusts the size with enqueueing and dequeueing" do - skip q = Queue.new q.empty?.must_equal true q.enqueue(-1) @@ -65,7 +59,6 @@ end it "returns the front element in the Queue" do - skip q = Queue.new q.enqueue(40) q.enqueue(22) From 7ec7c333dc36ae355bc9909a49961001303cd5c8 Mon Sep 17 00:00:00 2001 From: Angele Zamarron Date: Thu, 5 Mar 2020 11:02:54 -0800 Subject: [PATCH 3/5] completed dq and fixed test to expect correct results --- lib/queue.rb | 18 +++++++++++++++--- test/queue_test.rb | 3 +-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/queue.rb b/lib/queue.rb index 1ac714ba..ecb6c182 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -2,7 +2,7 @@ class Queue def initialize # first in, first out, like a check-out line - @store = Array.new(20) + @store = Array.new(30) # pointers to @store nodes @front = @back = -1 end @@ -24,7 +24,19 @@ def enqueue(element) end def dequeue - raise NotImplementedError, "Not yet implemented" + # if empty return nil + if @front == -1 && @back == -1 + return nil + end + # if queue is not empty return the first element in the list (at front) + # and remove it from queue + dequeued = @store[@front] + @front += 1 + # if it was the last one, set front and back to -1 + if @front == @back + @front = @back = -1 + end + return dequeued end def front @@ -36,7 +48,7 @@ def size end def empty? - raise NotImplementedError, "Not yet implemented" + return @front == @back && @back == -1 end def to_s diff --git a/test/queue_test.rb b/test/queue_test.rb index 0f5036be..6ba1af43 100644 --- a/test/queue_test.rb +++ b/test/queue_test.rb @@ -85,7 +85,6 @@ q.enqueue(130) q.enqueue(140) q.enqueue(150) - q.enqueue(150) q.enqueue(160) q.enqueue(170) q.enqueue(180) @@ -94,6 +93,6 @@ q.enqueue(210) q.dequeue - expect(q.to_s).must_equal('[40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240]') + expect(q.to_s).must_equal('[40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210]') end end From 5005b18e026a0d4cfb151534ed38c9ede80f867f Mon Sep 17 00:00:00 2001 From: Angele Zamarron Date: Thu, 5 Mar 2020 11:07:08 -0800 Subject: [PATCH 4/5] fixed stack .empty? method - would have always returned true --- lib/stack.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/stack.rb b/lib/stack.rb index faf57916..71dea12d 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -15,7 +15,7 @@ def pop end def empty? - return @store ? true : false + return @store.empty? end def to_s From 8a65359a7a32751dd7bcc843a65f849f16bacbca Mon Sep 17 00:00:00 2001 From: Angele Zamarron Date: Thu, 5 Mar 2020 13:23:15 -0800 Subject: [PATCH 5/5] trying to get the queue to add to the last spot and not move the back pointer if full - having problems --- lib/queue.rb | 43 +++++++++++++++++++++++++++++++------------ test/queue_test.rb | 25 +++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/lib/queue.rb b/lib/queue.rb index ecb6c182..38893c44 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -2,7 +2,7 @@ class Queue def initialize # first in, first out, like a check-out line - @store = Array.new(30) + @store = Array.new(19) # pointers to @store nodes @front = @back = -1 end @@ -10,17 +10,21 @@ def initialize def enqueue(element) # if empty then add element node to index 0 if @front == -1 && @back == -1 + puts "setting front and back to 0" @front = 0 @back = 0 end # if queue is full - if @front == ((@back + 1) % @store.length) - return nil + if @front == @back && !@store[@front].nil? + puts "adding #{element}, queue will be full" + puts "(@front: #{@front}, @back: #{@back}" end - + puts "adding #{element} to @back located at index #{@back}" + puts "@front: #{@front}" @store[@back] = element @back = (@back + 1) % @store.length - return @store[@back] + puts "moved @back to #{@back}" + return element end def dequeue @@ -31,11 +35,14 @@ def dequeue # if queue is not empty return the first element in the list (at front) # and remove it from queue dequeued = @store[@front] - @front += 1 + @store[@front] = nil + @front = (@front + 1) % @store.length # if it was the last one, set front and back to -1 - if @front == @back + if @front == @back && @store[@back].nil? + puts "it was the last one, resetting queue" @front = @back = -1 end + puts "removed #{dequeued} from queue, @front: #{@front}, @back: #{@back}" return dequeued end @@ -44,7 +51,14 @@ def front end def size - raise NotImplementedError, "Not yet implemented" + # from front to end + if @front < @back + size = @store[@front...@back].length + # from back to end, then start to front + else + size = @store[@back..-1] + @store[0...@front] + end + return size end def empty? @@ -54,11 +68,16 @@ def empty? def to_s # from front to end if @front < @back - @store = @store[@front...@back] - # from back to end, then start to front + print_store = @store[@front...@back] + # from front to end, then 0 to back else - @store = @store[@back..-1] + @store[0...@front] + print_store = @store[@front..-1] + @store[0...@back] end - return @store.to_s + puts "front and back:" + puts @front + puts @back + puts "actual @store:" + puts @store.to_s + return print_store.to_s end end diff --git a/test/queue_test.rb b/test/queue_test.rb index 6ba1af43..2781631d 100644 --- a/test/queue_test.rb +++ b/test/queue_test.rb @@ -29,6 +29,31 @@ q.empty?.must_equal true end + it "calculates size correctly" do + q = Queue.new + q.enqueue(10) + q.enqueue(20) + q.enqueue(30) + expect(q.size).must_equal 3 + q.dequeue + expect(q.size).must_equal 2 + q.enqueue(40) + q.enqueue(50) + q.enqueue(60) + q.enqueue(70) + q.enqueue(80) + q.enqueue(90) + q.enqueue(100) + q.enqueue(110) + q.enqueue(120) + expect(q.size).must_equal 11 + q.dequeue + q.dequeue + q.dequeue + q.dequeue + expect(q.size).must_equal 7 + end + it "removes something from the Queue" do q = Queue.new q.enqueue(5)