什么是栈

栈是一种线性数据结构,栈中的元素只能先入后出,最早进入的元素存放的位置叫做栈底,最后进入的元素存放的位置叫做栈顶。

栈的基本操作-入栈、出栈

入栈:入栈操作(push)就是把新元素放入栈中,只允许从栈顶一侧放入元素,新元素的位置将会成为新的栈顶
出栈:出栈操作(pop)就是把元素从栈中弹出,只有栈顶元素才允许出栈,出栈元素的前一个元素将会成为新的栈顶

什么是队列

队列是一种线性数据结构,队中的元素只能先入先出(FIFO),队列的出口端叫作队头,队列的入口端叫作队尾

队列的基本操作-入队、出队

入队:就是把新元素放入队中,只允许在队尾的位置放入元素,新元素的下一个位置将会成为新的队尾

出队:就是把元素移出队列,只允许在队头一侧移出元素,出队元素的后一个元素将会成为新的队头

实现队列入队出队功能

  1. class MyQueue:
  2. def __init__(self, capacity):
  3. self.list = [None] * capacity
  4. self.front = 0
  5. self.rear = 0
  6. def enqueue(self, element):
  7. """入队"""
  8. # (队尾下标+1)%数组长度 = 队头下标
  9. if (self.rear + 1) % len(self.list) == self.front:
  10. raise Exception("队列已满!!")
  11. self.list[self.rear] = element
  12. self.rear = (self.rear + 1) % len(self.list)
  13. def dequeue(self):
  14. """出队"""
  15. if self.rear == self.front:
  16. raise Exception("队列已满!!")
  17. dequeue_element = self.list[self.front]
  18. self.front = (self.front + 1) % len(self.list)
  19. return dequeue_element
  20. def output(self):
  21. i = self.front
  22. while i != self.rear:
  23. print(self.list[i])
  24. i = (i+1) % len(self.list)
  25. if __name__ == '__main__':
  26. myQueue = MyQueue(6)
  27. myQueue.enqueue(3)
  28. myQueue.enqueue(4)
  29. myQueue.enqueue(5)
  30. myQueue.dequeue()
  31. myQueue.output()

栈和队列的应用

双端队列 :双端队列,综合了栈和队列的优点,从队头一端可以入队或出队,从队尾一端也可以入队或出队
优先队列:谁优先级最高,谁先出队