コード例 #1
0
class MidStack:
    def __init__(self):
        self.stac = ArrayStack()
        self.dque = ArrayDeque()

    def __len__(self):
        return len(self.stac) + len(self.dque)

    def is_empty(self):
        return len(self.stac) == 0 and len(self.dque) == 0

    def top(self):
        if (self.is_empty()):
            raise Exception("Stack is empty")
        return self.dque.last()

    def push(self, val):
        if self.is_empty():
            self.stac.push(val)
        elif len(self) % 2 == 0:
            self.stac.push(self.dque.first())
            self.dque.dequeue_first()
            self.dque.enqueue_last(val)
        elif len(self) % 2 == 1:
            self.dque.enqueue_last(val)

    def pop(self):
        if self.is_empty():
            raise Exception("Stack is empty")
        else:
            if len(self.stac) == 1 and len(self.dque) == 0:
                return self.stac.pop()
            elif len(self) % 2 == 0:
                return self.dque.dequeue_last()
            elif len(self) % 2 == 1:
                self.dque.enqueue_first(self.stac.top())
                self.stac.pop()
                return self.dque.dequeue_last()

    def mid_push(self, val):
        if len(self) % 2 == 0:
            self.stac.push(val)
        else:
            self.dque.enqueue_first(val)
コード例 #2
0
ファイル: tw1835_hw5_q3.py プロジェクト: taywong00/CS-UY-1134
class MidStack:
    def __init__(self):
        self.top_deque = ArrayDeque()
        self.bottom_stack = ArrayStack()

    def __len__(self):
        return len(self.top_deque) + len(self.bottom_stack)

    def is_empty(self):
        return len(self) == 0

    def push(self, e):
        if (len(self) % 2 == 1):  # even len
            # top deque has one more than bottom stack
            # then shift last deque member to top of stack and enqueue first val to deque
            last_deque = self.top_deque.last()
            self.bottom_stack.push(last_deque)
            self.top_deque.dequeue_last()

        self.top_deque.enqueue_first(e)

    def top(self):
        if (self.is_empty()):
            raise Exception("Stack is empty")
        return self.top_deque.first()

    def pop(self):
        if (self.is_empty()):
            raise Exception("Stack is empty")
        else:
            if (len(self) % 2 == 0):  # top and bottom have same
                # make sure that the top always has one more than the bottom
                top_stack = self.bottom_stack.pop()
                self.top_deque.enqueue_last(top_stack)
            return self.top_deque.dequeue_first()

    def mid_push(self, e):
        if (len(self) % 2 == 0):  # top and bottom have same num elem
            self.top_deque.enqueue_last(e)
        else:  # top has one more than bottom, make even
            self.bottom_stack.push(e)