~使用两个栈实现一个队列~
2017-04-16 19:24
281 查看
栈和队列最常考的面试题之一: 使用两个栈实现一个队列
主要思路:
1)建立两个栈input与output,其中input用于入队列,output用于出队列;
2)当元素要入队列时,直接当元素压入input中;
3)当元素要出队列时,先判断output中是否有元素。若是有,可以直接将output中的栈顶元素出队列;若是没有,则先将input中的元素入到output中,再将output的栈顶元素出队列;
4)判断队列是否为空,依次判断input与output是否为空,若有其中一个栈不为空,则队列就不为空。
废话少说,直接上代码啦!!
主要思路:
1)建立两个栈input与output,其中input用于入队列,output用于出队列;
2)当元素要入队列时,直接当元素压入input中;
3)当元素要出队列时,先判断output中是否有元素。若是有,可以直接将output中的栈顶元素出队列;若是没有,则先将input中的元素入到output中,再将output的栈顶元素出队列;
4)判断队列是否为空,依次判断input与output是否为空,若有其中一个栈不为空,则队列就不为空。
废话少说,直接上代码啦!!
#include <stack> template <class T> class DoubleStackToQueue { public: void Push(const T& data) { input.push(data); } void Pop() { if(!output.empty()) { output.pop(); } else { if(!input.empty()) { while(input.size() - 1) { output.push(input.top()); input.pop(); } input.pop(); } } } bool Empty() { if(!(input.empty() && output.empty())) { return false; } return true; } T& Front() { if(!output.empty()) { return output.top(); } if(!input.empty()) { while(!input.empty()) { output.push(input.top()); input.pop(); } return output.top(); } } T& Back() { if(!input.empty()) { return input.top(); } if(!output.empty()) { while(!input.empty()) { input.push(output.top()); output.pop(); } return input.top(); } } void Print() { if(!Empty()) { cout<<Front()<<" "; Pop(); } } protected: stack<T> input, output; };
相关文章推荐
- cc150:使用两个栈实现一个队列(两种方法比较)
- 使用两个队列实现一个栈
- 使用两个队列实现一个栈
- 使用两个队列实现一个栈,使用两个栈实现一个队列!
- 剑指offer 7---使用两个栈实现一个队列
- 算法导论 使用两个队列实现一个栈
- 剑指offer 7---使用两个队列实现一个栈
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
- ~使用两个栈实现一个队列(优化版)~
- 【题目5】如何使用两个栈来实现一个队列
- 013使用两个栈实现一个队列(keep it up)
- 使用两个栈实现一个队列
- 数据结构-使用两个栈实现一个队列
- ~使用两个队列实现一个栈~
- 使用两个队列实现一个栈
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
- 使用两个队列实现一个栈,使用两个栈实现一个队列!
- 使用两个栈来实现一个队列简单的push和pop
- 算法面试题:使用两个堆栈实现一个队列
- 使用两个栈实现一个队列