双队列=>栈
来源:互联网 发布:宁波行知小学总课表 编辑:程序博客网 时间:2024/04/27 02:19
队列
先进先出(FIFO)
栈
后进先出(LIFO)
双队列实现栈
如何用两个队列,仅使用队列的基本操作实现栈。
思路:
1. 进栈操作作使用queue2, 当push数据时,直接把数据enqueue到queue2.
2. 出栈操作时, 依次从queue2中取出一个元素,然后判断此时queue2是否为空,如果不为空则把当前元素enqueue进队列queue1,如果为空,则表示当前元素是最后一个进入队列的元素,则把当前元素返回。
3. 交换queue2和queue1。
效率
可见用双队列实现栈操作,pop操作效率很低,每次pop操作的时间复杂度为O(N),需要把队列中的所有元素全部搬运一遍。
源码参考实现
class StackTwoQueue(object): '''使用双队列实现栈''' def __init__(self): self.__q1 = LinkQueue() self.__q2 = LinkQueue() def push(self, v): self.__q2.enqueue(v) def pop(self): while True: x = self.__q2.dequeue() if self.__q2.isEmpty(): self.__q1, self.__q2 = self.__q2, self.__q1 return x else: self.__q1.enqueue(x) def peek(self): while True: x = self.__q2.dequeue() self.__q1.enqueue(x) if self.__q2.isEmpty(): self.__q1, self.__q2 = self.__q2, self.__q1 return x def isEmpty(self): return self.__q2.isEmpty() def size(self): return self.__q2.size()
阅读全文
0 0
- 双队列=>栈
- 栈,队列,双端队列
- [zz]栈和队列,双端队列
- 单调栈、双端队列、单调队列
- java-队列,双端队列、栈
- 栈和队列、双端队列
- 双队列实现栈
- 双栈实现队列
- 双栈实现 队列
- 双栈模拟队列
- NOIP2008 双栈队列
- 双栈队列
- 双栈队列练习题
- 双栈队列练习
- 双栈队列练习题
- 双栈队列
- 栈和队列--队列
- 栈、队列、优先级队列
- Windows上部署Jenkins遇到的问题
- byte为何范围是-128~127
- 编程第五十六天
- 【Leetcode】389. Find the Difference
- 三维网格精简算法(Quadric Error Metrics)附源码(一)
- 双队列=>栈
- 记录一下这几天eclipse建立maven工程遇到的问题
- Tensorflow学习笔记--使用迁移学习做自己的图像分类器(Inception v3)
- 1.2.1.1 GNU Debugger
- 从LINQ开始之LINQ to Objects(上)
- 1.2.1.1 GNU调试器
- Problem A: 你会定义类吗?
- 基于主分量和支持向量机的人脸识别
- Problem B: 图形计数与求面积