数据结构与算法之队列
- 先进先出,只能在队尾插入,队首删除
- 应用领域:两个队列实现栈、树的BFS(宽度优先遍历);
用两个队列实现一个栈(剑指offer---面试题7习题)
题目:用两个队列实现一个栈。栈的声明如下:请实现它的两个函数push和pop,分别完成在入栈和出栈的功能;
1 template <typename T> class CStack 2 { 3 public: 4 CStack(void); 5 ~CStack(void); 6 7 void push(const T& node); 8 T pop(); 9 10 private: 11 queue<T> queue1; 12 queue<T> queue2; 13 }
解题思路:
一个非空队列和一个空队列;
(1)入栈时,选择一个非空队列queue入队;
(2)出栈时,把非空队列的size-1个元素一次出队并入队到另一个空队列中,再将之前的非空队列出队;
(3)出栈时,若queue1和queue2都为空,则返回错误;
从上往下打印二叉树(剑指offer---面试题23)
详情见“树”专栏;
把二叉树打印成多行(剑指offer---面试题60)
详情见“树”专栏;
滑动窗口的最大值(剑指offer---面试题65)
详情见“数组”专栏:双端队列deque;