class QueueUsingStacks():
    def __init__(self):
        from calvin.data_structure.stack import Stack
        self.stack1=Stack()
        self.stack2=Stack()

    def isEmpty(self):
        return self.stack1.isEmpty() and self.stack2.isEmpty()

    def enqueue(self, item):
        self.stack1.push(item)

    def dequeue(self):
        self.__rotateStack()
        return self.stack2.pop()

    def peek(self):
        self.__rotateStack()
        return self.stack2.peek()

    def __rotateStack(self):
        if (self.isEmpty()):
            raise Exception("queue is empty!")

        if self.stack2.isEmpty():
            while not self.stack1.isEmpty():
                self.stack2.push(self.stack1.pop())

    def size(self):
        return self.stack1.size() + self.stack2.size()
Beispiel #2
0
 def dfs_iterative(self, root):
     s = Stack()
     s.push(root)
     while s.size() > 0:
         vertex = s.pop()
         self.vertices.append(vertex.get_vertex())
         for neighbor in vertex.get_child():
             if neighbor and neighbor.state == State.UNVISITED:
                 s.push(neighbor)
                 vertex.state = State.VISITED
Beispiel #3
0
 def simplifyPath(self, path):
     s = Stack()
     skip = {"..", ".", ""}
     for dir in path.split("/"):
         if (dir == ".." and not s.isEmpty()):
             s.pop()
         elif dir not in skip:
             s.push(dir)
     res = ""
     siter = iter(s)
     for elem in siter:
         res = "/" + elem + res
     return "/" if not res else res
Beispiel #4
0
 def __string_bs_caps(self, s):
     BACKSLASH = False
     CAPSLOCK = False
     st = Stack()
     for char in s:
         if char == '\\':
             BACKSLASH = not BACKSLASH
         else:
             if BACKSLASH and char == 'b':
                 st.pop()
                 BACKSLASH = not BACKSLASH
             elif BACKSLASH and char == 'c':
                 CAPSLOCK = not CAPSLOCK
                 BACKSLASH = not BACKSLASH
             else:
                 st.push(char.upper() if CAPSLOCK else char)
                 if CAPSLOCK:
                     CAPSLOCK = not CAPSLOCK
     result = ''
     for i in range(st.size()):
         result = st.pop() + result
     return result
Beispiel #5
0
    def baseball_game(self, arr):
        if arr is None:
            return None

        sum = 0
        stack = Stack()
        for x in arr:
            if x.isdigit() or (x[0] == '-' and x[1:].isdigit()):
                sum += int(x)
                stack.push(x)
            elif x == 'C':
                sum -= int(stack.pop())
            elif x == 'D':
                sum += 2 * int(stack.peek())
                stack.push(2 * int(stack.peek()))
            elif x == '+':
                curr = stack.pop()
                prev = 0
                if not stack.isEmpty():
                    prev = stack.pop()
                sum += (int(curr) + int(prev))
                stack.push(int(curr) + int(prev))
                stack.push(curr)
        return sum
    def test_sort(self):
        s1 = Stack()
        s1.push(1)
        s1.push(2)
        s1.push(4)
        s1.push(9)
        s1.push(12)
        s1.push(11)
        s1.push(3)
        expected = [1, 2, 3, 4, 9, 11, 12]
        for i in enumerate(iter(self.fixture.sort(s1))):
            self.assertEqual(expected[i[0]], i[1])

        s1.push(1)
        s1.push(2)
        s1.push(4)
        s1.push(9)
        s1.push(12)
        s1.push(11)
        s1.push(3)
        self.fixture.sortStack(s1)
        for i in range(s1.size()):
            self.assertEqual(expected[i], s1.pop())
class TestStack(unittest.TestCase):
    def setUp(self):
        self.fixture = Stack()
        self.assertTrue(self.fixture.isEmpty())

    def test_iter(self):
        self.fixture.push(1)
        self.fixture.push(2)
        self.fixture.push(3)
        stackiter = iter(self.fixture)
        expected = [1, 2, 3]
        for i in stackiter:
            self.assertEqual(expected.pop(), i)

    def test_push_various_types(self):
        self.fixture.push(6)
        self.fixture.push(True)
        self.fixture.push('cat')
        self.assertEqual('cat', self.fixture.peek())
        self.assertFalse(self.fixture.isEmpty())
        self.assertEqual(3, self.fixture.size())

    def test_pop_items_out(self):
        self.fixture.push(6)
        self.fixture.push(True)
        self.fixture.push('cat')
        self.assertEqual('cat', self.fixture.peek())
        self.fixture.pop()
        self.assertEqual(True, self.fixture.peek())
        self.fixture.pop()
        self.assertEqual(6, self.fixture.peek())
        self.fixture.pop()
        self.assertTrue((self.fixture.isEmpty()))
        self.assertRaises(IndexError, self.fixture.pop)
        self.assertRaises(Exception, self.fixture.peek)

    def test_sort(self):
        s1 = Stack()
        s1.push(1)
        s1.push(2)
        s1.push(4)
        s1.push(9)
        s1.push(12)
        s1.push(11)
        s1.push(3)
        expected = [1, 2, 3, 4, 9, 11, 12]
        for i in enumerate(iter(self.fixture.sort(s1))):
            self.assertEqual(expected[i[0]], i[1])

        s1.push(1)
        s1.push(2)
        s1.push(4)
        s1.push(9)
        s1.push(12)
        s1.push(11)
        s1.push(3)
        self.fixture.sortStack(s1)
        for i in range(s1.size()):
            self.assertEqual(expected[i], s1.pop())