5.数据结构---队列

一、队列

1.队列类型

  • FIFO:先进先出
  • LIFO:后进先出(等同于栈)
  • 优先级队列
  • 双端队列:LIFO和FIFO结合,可以从队首和队尾添加和删除元素
  • 循环队列:队首和队尾相连(可用来解决假溢出)

2.Python自带Queue模块【线程不安全,需加锁】

支持三种队列类型:

  • FIFO(queue.queue)
  • LIFO(queue.LifoQueue)
  • 优先级队列(queue.PriorityQueue)【优先级队列越低越先出来】【堆】

3.Python自带Deque模块【线程安全,因为GIL】

支持双端队列

4.循环队列

队尾出来进队首,双端队列的rotate可以实现循环队列。

 

二、算法

1.两个队列实现栈

题目:使用队列实现栈的下列操作:
  push(x) -- 元素 x 入栈
  pop() -- 移除栈顶元素
  top() -- 获取栈顶元素
  empty() -- 返回栈是否为空
思路:

  插入:直接在非空的queue中添加新元素

  删除:将一个非空的queue中的数依次从队首到队尾放入空的queue中,直到只剩下一个数,将最后一个数弹出。

  

2.两个栈实现队列

题目:使用栈实现队列的下列操作:

  push(x) -- 将一个元素放入队列的尾部。
  pop() -- 从队列首部移除元素。
  peek() -- 返回队列首部的元素。
  empty() -- 返回队列是否为空。

思路:        

  插入:在stack1中添加新元素

  删除:删除元素前,先判断stack2是否为空,如果不为空,直接弹出stack2;否则,将stack1中的所有元素全部放入stack2中,再弹出栈顶元素

3.报数淘汰

  

 

 

 

 

 

 

参考文献:

【1】Python数据结构2-----队列和堆 - Lee_yl - 博客园

posted @   nxf_rabbit75  阅读(216)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
一、队列1.队列类型2.Python自带Queue模块【线程不安全,需加锁】3.Python自带Deque模块【线程安全,因为GIL】4.循环队列二、算法1.两个队列实现栈2.两个栈实现队列3.报数淘汰
点击右上角即可分享
微信分享提示