# stack,后进先出(LIFO: Last In First Out)


class Stack(object):
    """
    使用列表实现的顺序栈
    """

    def __init__(self):
        """创建一个新的空栈"""
        self.data = []

    def push(self,item):
        """入栈,进栈,压栈"""
        self.data.append(item)

    def pop(self):
        """出栈,退栈"""
        return self.data.pop()

    def peek(self):
        """返回栈顶元素"""
        return self.data[-1]

    def is_empty(self):
        """判断栈是否为空"""
        return self.data == []

    def size(self):
        """返回栈的元素个数"""
        return len(self.data)


if __name__ == '__main__':
    stack = Stack()
    stack.push(1)
    stack.push(2)
    stack.push(3)
    print(stack.peek())
    print(stack.pop())
    print(stack.pop())
    print(stack.pop())