栈是线性数据结构,其特点是元素的增加和删除都是入栈和弹栈的形式,遵循先进后出或后进先出的原则

以列表尾部为栈顶,删除和添加的时间复杂度都为O(1)
class Stack(object):
    """以列表尾部为栈顶"""
    def __init__(self):
        self.items = []

    def is_empty(self):
        return self.items == []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        self.items.pop()

    def peek(self):
        return self.items[len(self.items) - 1]

    def size(self):
        return len(self.items)


以列表头部作为栈顶,删除和添加的时间复杂度都为O(n)
class Stack(object):
    """以列表开头作为栈顶"""

    def __init__(self):
        self.items = []

    def is_empty(self):
        return self.items == []

    def push(self, item):
        self.items.insert(0, item)

    def pop(self):
        return self.items.pop(0)

    def peek(self):
        return self.items[0]

    def size(self):
        return len(self.items)