def rpn(expression): # operand: sayi # operation: islem operations = ['+', '*', '-', '/'] elements = expression.split() stack = MyStack() for e in elements: if e in operations: num2 = stack.pop() num1 = stack.pop() if e == '+': result = num1 + num2 elif e == '*': result = num1 * num2 elif e == '-': result = num1 - num2 else: result = num1 / num2 stack.push(result) else: num = int(e) stack.push(num) print(stack.pop())
class MyQueue(): """ Queue implementation using 2 stacks """ def __init__(self): self.latest = MyStack() self.oldest = MyStack() def __len__(self): # Data in Queue should always be in one of the two internal stacks len_latest, len_oldest = len(self.latest), len(self.oldest) if (len_latest > len_oldest): return len_latest return len_oldest def is_empty(self): return self.latest.is_empty() and self.oldest.is_empty() def move(self, from_stack, to_stack): """ Move top element from from_stack (pop) onto to_stack (push) """ to_stack.push(from_stack.pop()) def push(self, data): while (self.oldest.is_empty() != True): self.move(self.oldest, self.latest) self.latest.push(data) def pop(self): while (self.latest.is_empty() != True): self.move(self.latest, self.oldest) return self.oldest.pop()
def test_is_empty(self): stack = MyStack() self.assertTrue(stack.is_empty()) stack.push(1) self.assertFalse(stack.is_empty()) stack.pop() self.assertTrue(stack.is_empty())
class TestMyStack(unittest.TestCase): def setUp(self): # Provide an empty stack self.stack = MyStack() # Provide a filled stack self.len_test_data = 5 self.test_data = [i + 1 for i in range(self.len_test_data)] self.filled_stack = MyStack() for i in self.test_data: self.filled_stack.push(i) def test_instantiation(self): stack = MyStack() self.assertEqual(None, stack.top) self.assertEqual(0, len(self.stack)) def test_push(self): for i in self.test_data: self.stack.push(i) self.assertEqual(i, len(self.stack)) self.assertEqual(i, self.stack.top.key) def test_pop(self): for i in reversed(self.test_data): data = self.filled_stack.pop() self.assertEqual(i - 1, len(self.filled_stack)) self.assertEqual(i, data) def test_peek(self): for i in reversed(self.test_data): data = self.filled_stack.peek() self.assertEqual(i, data) self.filled_stack.pop() def test_is_empty(self): stack = MyStack() self.assertTrue(stack.is_empty()) stack.push(1) self.assertFalse(stack.is_empty()) stack.pop() self.assertTrue(stack.is_empty())