コード例 #1
0
class MidStack:

    def __init__(self):
        self.data = ArrayStack()
        self.reorder = ArrayDeque()

    def __len__(self):
        return len(self.data.data)

    def is_empty(self):
        return len(self) == 0
    
    def push(self,e):
        self.data.push(e)

    def top(self):
        return self.data.top()
        
    def pop(self):
        return self.data.pop()
        
    def mid_push(self,e):
        if len(self)%2==0:
            for i in range((len(self)//2), len(self)):
                self.reorder.enqueue_first((self.pop()))
        else:
            for i in range(((len(self)//2)+1), len(self)):
                self.reorder.enqueue_first((self.pop()))
        self.push(e)
        for i in range(len(self.reorder)):
            self.push(self.reorder.dequeue_first())
コード例 #2
0
 def __init__(self):
     self.stac = ArrayStack()
     self.dque = ArrayDeque()
コード例 #3
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)
コード例 #4
0
ファイル: tw1835_hw5_q3.py プロジェクト: taywong00/CS-UY-1134
 def __init__(self):
     self.top_deque = ArrayDeque()
     self.bottom_stack = ArrayStack()
コード例 #5
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)
コード例 #6
0
 def __init__(self):
     self.data = ArrayStack()
     self.reorder = ArrayDeque()
コード例 #7
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys

sys.path.append(
    "/Users/liangy/data-structure-algorithms-python/Stacks-queues-Deques")
from ArrayQueue import ArrayQueue, Empty
from ArrayDeque import ArrayDeque

if __name__ == "__main__":
    D = ArrayDeque()
    Q = ArrayQueue()
    for i in range(1, 9):
        D.add_last(i)
    # step 1
    for _ in range(3):
        Q.enqueue(D.delete_last())
    # step 2
    for _ in range(2):
        D.add_first(D.delete_last())
    # step 3
    for _ in range(3):
        Q.enqueue(D.delete_last())
    # step 4
    D.add_first(D.delete_last())
    # step 5
    for _ in range(3):
        D.add_first(Q.dequeue())
    # step 6
    for _ in range(3):