【面试题】剑指Offer-7-两个栈实现一个队列
2017-03-14 13:05
513 查看
题目概述
用两个栈实现一个队列解题思路
栈的特点是后进先出,而队列是先进先出;为了用两个栈实现一个队列,我们还是需要两个栈来实现其中一个栈为sin,主要操纵入队;另一个栈为sout,主要用来从此出队
图解
代码实现
//两个栈实现一个队列 template<typename T> class QueueBTS { public: void Push(const T& x) { sin.push(x); } void Pop() { assert(!sin.empty() || !sout.empty()); if (sout.empty()) { while (!sin.empty()) { sout.push(sin.top()); sin.pop(); } } sout.pop(); } const T& Front() { assert(!sin.empty() || !sout.empty()); if (sout.empty()) { while (!sin.empty()) { sout.push(sin.top()); sin.pop(); } } return sout.top(); } protected: stack<T> sin;//入列的栈 stack<T> sout;//出列的栈 };
题目扩展
两个队列实现一个栈解题思路
这里我们也是,定义两个队列,第一个队列qin主要负责元素的入栈;第二个队列qout负责出栈图解
代码实现
//两个队列实现一个栈template<typename T>
class StackBTQ
{
public:
void Push(const T& x)
{
//入栈的元素直接push到qin里面
qin.push(x);
}
void Pop()
{
assert(!qin.empty() || !qout.empty());
//qin队列为空
if (qin.empty())
{
while (qout.size() > 1)
{
qin.push(qout.front());
qout.pop();
}
qout.pop();
}
else//qin队列不为空
{
while (qin.size() > 1)
{
qout.push(qin.front());
qin.pop();
}
qin.pop();
}
}
T Top()
{
assert(!qin.empty() || !qout.empty());
//qin队列为空
if (qin.empty())
{
while (qout.size() > 1)
{
qin.push(qout.front());
qout.pop();
}
return qout.front();
}
else//qin队列不为空
{
while (qin.size() > 1)
{
qout.push(qin.front());
qin.pop();
}
return qin.front();
}
}
protected:
queue<T> qin;
queue<T> qout;
};
相关文章推荐
- 剑指offer之面试题7用两个栈实现一个队列
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作
- 【剑指offer】面试题七:用两个栈实现队列
- 【剑指offer】两个队列实现一个栈
- 剑指offer—编程题7(用两个栈实现一个队列)
- 【剑指offer】面试题:两个队列实现栈
- 剑指offer---面试题7 用两个栈实现队列
- 剑指offer-->面试题7 用两个栈实现队列
- 剑指offer_面试题7_用两个栈实现队列(让我熟悉了类模板的使用)
- 【剑指Offer学习】【面试题7:用两个栈实现队列】
- 剑指Offer:面试题7 用两个栈实现队列
- 剑指Offer----面试题七:用两个栈实现队列
- [剑指offer][面试题07-扩展]用两个队列实现栈
- 剑指offer面试题7:用两个栈实现队列
- 剑指offer 面试题7 两个栈实现队列
- 剑指offer面试题7——用两个栈实现队列
- [剑指offer][面试题07]用两个栈实现队列
- 【九度OJ1512】|【剑指offer7】用两个栈实现一个队列
- 剑指offer之面试题7:用两个栈实现队列
- 【剑指offer】面试题7:两个栈实现队列