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())
Exemple #2
0
 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())
Exemple #3
0
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()
Exemple #4
0
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())