问题:队列1 队列2;构建一个栈
参考:https://blog.csdn.net/sassaaa/article/details/72719357
思路:
需要明确栈为:先进后出 队列为:先进先出
1)push abc进队列1
2)从队列1的ab出到队列2,再将队列1的c出队列
3)下一次,再执行pop时;将队列2的a出到队列1,将队列2的b出队列
4)如此循环执行123步骤即可
class Stack{
public:
public:
void in(const int &k);
int del();
private:
queue<int> que1;
queue<int> que2;
};
void Stack::in(const int &k) {
que1.push(k);
}
int Stack::del() {
int res;
if (que1.empty())//队列1为空 说明执行到第3步了 从que2模仿出栈
{
if (que2.empty())
throw runtime_error("no elements to delete !!!");
while(que2.size()>1)
{
int tem = que2.front();
que1.push(tem);
que2.pop();
}
res = que2.front();
que2.pop();
}
else //que1内有数 把不出栈的数暂存到que2中,再从que1模仿栈
{
while (que1.size()>1)
{
int tem = que1.front();
que2.push(tem);
que1.pop();
}
res = que1.front();
que1.pop();
}
return res;
}