按照后进先出原理进行数据存储的线性容器
image.png

栈结构的实现:

  1. Stack()创建一个新的空栈
  2. push(item)添加一个新的元素item到栈顶压栈
  3. pop()弹出栈顶元素
  4. peek()返回栈顶元素
  5. is_empty()判断栈是否为空
  6. size()返回栈的元素个数

构造栈

  1. 创建一个叫做栈的类
  2. 创建栈的容器;用列表初始化容器,列表可以存放元素
  3. 列表需要私有化__list(不能让外部的直接操作内部容器)
    1. class Stack(object):
    2. def __init__(self):
    3. self.__list=[]

压栈push

将我们的元素,从尾部进行添加事件复杂度为O(1)【头部插入时O(n))】
调用list的append方法,并且传入元素item

  1. def push(self):
  2. self.__list.append(item)

弹栈pop

调用list的pop方法

  1. def pop(self):
  2. return self.__list.pop()

返回栈顶元素peek

  1. 返回列表的尾元素[-1]
  2. 考虑列表为空,那么就返回None
  1. def peek(self):
  2. if self.__list:
  3. return self.__list[-1]
  4. else:
  5. return None

判断列表是否为空is_empty

当list=[]即为空
或者
返回not list

  1. def is_empyt(self):
  2. return self.__list==[]
  3. #return not self.__list

返回栈元素的个数size

直接调用列表的len()函数即可

  1. def size(self):
  2. return (len(self.__list))
  1. #定义一个类封装栈
  2. #构造栈的对象添加元素
  3. class Stack(object):
  4. #初始化构造容器
  5. def __init__(self):
  6. self.__list=[]
  7. #压栈
  8. def push(self,item):
  9. self.__list.append(item)
  10. #弹栈
  11. def pop(self):
  12. return self.__list.pop()
  13. #取栈顶元素
  14. def peek(self):
  15. if self.__list:
  16. return self.__list[-1]
  17. else:
  18. return None
  19. #判空
  20. def is_empty(self):
  21. return self.__list == []
  22. # return not self.__list
  23. #栈的元素个数
  24. def size(self):
  25. return len(self.__list)
  26. if __name__ == '__main__':
  27. #构造对象
  28. stack = Stack()#实例化
  29. stack.push(2)
  30. print(stack.size())
  31. print(stack.is_empty())
  32. stack.push(3)
  33. print(stack.peek())
  34. print(stack.pop())
  35. print(stack.size())