堆栈

"""
deque,又叫双端队列,因为既可以先进先出也可以后进先出
以下使用列表模拟

Python内置了真正的双端队列,请参考
https://docs.python.org/zh-cn/3/library/collections.html#collections.deque
"""


class Deque(object):
    """双端队列"""

    def __init__(self):
        """创建一个空的双端队列"""
        self.data = []

    def add_front(self, item):
        """从队头加入一个item元素"""
        self.data.insert(0,item)

    def add_rear(self, item):
        """从队尾加入一个item元素"""
        self.data.append(item)

    def remove_front(self):
        """从队头删除一个item元素"""
        return self.data.pop(0)

    def remove_rear(self):
        """从队尾删除一个item元素"""
        return self.data.pop()


if __name__ == '__main__':
    deque = Deque()
    # 当成栈使用
    deque.add_rear(1)
    deque.add_rear(2)
    deque.add_rear(3)
    print(deque.remove_rear())
    print(deque.remove_rear())
    print(deque.remove_rear())

    # 当成队列使用
    deque.add_front(1)
    deque.add_front(2)
    deque.add_front(3)
    print(deque.remove_rear())
    print(deque.remove_rear())
    print(deque.remove_rear())