diff --git a/lib/problems.rb b/lib/problems.rb index 5085953d..1c3eb9fc 100644 --- a/lib/problems.rb +++ b/lib/problems.rb @@ -1,13 +1,52 @@ require_relative './stack.rb' -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n) - n is chars in string +# Space Complexity: O(1/2n) --> O(n) - n is chars in string def balanced(string) - raise NotImplementedError, "Not implemented yet" + return true if string.empty? + return false if string.length % 2 != 0 + + s = Stack.new + open_bracs = ["(", "[", "{"] + close_bracs = [")", "]", "}"] + + string.each_char do |char| + if open_bracs.include?(char) + s.push(char) + elsif close_bracs.include?(char) + compare = s.pop + if open_bracs.find_index(compare) != close_bracs.find_index(char) + return false + end + end + end + + return true end # Time Complexity: ? # Space Complexity: ? def evaluate_postfix(postfix_expression) - raise NotImplementedError, "Not implemented yet" + operands = ["*", "**", "/", "%", "+", "-"] + s= Stack.new + + postfix_expression.each_char do |char| + if operands.include?(char) + first = s.pop + second = s.pop + result = eval("#{second}#{char}#{first}") + s.push(result) + else + s.push(char) + end + end + + return s.pop end + +# p balanced("{[{}{}]}") +# p balanced("{[{}{}]") +# p balanced("{()}[)") + +# p evaluate_postfix("35+6*") #48 +# p evaluate_postfix("53+62/*35*+") #39 \ No newline at end of file diff --git a/lib/queue.rb b/lib/queue.rb index 828217c6..14f81ce4 100644 --- a/lib/queue.rb +++ b/lib/queue.rb @@ -1,31 +1,72 @@ class Queue - + def initialize - # @store = ... - raise NotImplementedError, "Not yet implemented" + @store = Array.new(50) + @front = -1 + @back = -1 end - + def enqueue(element) - raise NotImplementedError, "Not yet implemented" + if((@front == 0 && @back == @store.length - 1) || (@front == @back + 1)) + raise ArgumentError + elsif @front == -1 && @back == -1 + @front = 0 + @back = 0 + end + + @store[@back] = element + @back = (@back + 1) % @store.length end - + def dequeue - raise NotImplementedError, "Not yet implemented" + if @front == -1 + raise ArgumentError + end + + data = @store[@front] + @store[@front] = nil + @front = (@front + 1) % @store.length + + if @front == @back + @front = -1 + @back = -1 + end + + return data end - + def front - raise NotImplementedError, "Not yet implemented" + return @store[@front] end - + def size - raise NotImplementedError, "Not yet implemented" + if self.empty? + raise ArgumentError + end + + return @back - @front end - + def empty? - raise NotImplementedError, "Not yet implemented" + if @front == -1 && @back == -1 + return true + else + return false + end end - + def to_s - return @store.to_s + return @store[@front...@back].to_s end end + +# q = Queue.new +# q.enqueue(0) +# q.enqueue(1) +# q.enqueue(2) +# q.enqueue(3) +# p q +# p q.size +# p q.dequeue +# p q.size +# p q.front \ No newline at end of file diff --git a/lib/stack.rb b/lib/stack.rb index cfc6ef0f..d1ca0c0c 100644 --- a/lib/stack.rb +++ b/lib/stack.rb @@ -1,22 +1,30 @@ +require_relative 'linked_list' + 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) end - + def pop - raise NotImplementedError, "Not yet implemented" + return nil if self.empty? + element = @store.remove_last() + return element end - + def empty? - raise NotImplementedError, "Not yet implemented" + return @store.empty? end - + def to_s return @store.to_s end end + +# stack = Stack.new +# stack.push(5) +# stack.push(10) +# p stack \ No newline at end of file