2栈->队列 and 2队列->栈 by C++
作者:互联网
最近面试老被问到“2栈->队列”和“2队列->栈”的问题,为了后面不犯错误,下面就来好好总结一下。
预备知识:栈遵循“后进先出”原则,队列遵循“先进先出”原则。
一、如何用二个栈实现一个队列功能?
先用一个栈stack1去模仿队列存元素,然后通过判读另一个栈stack2是否为空,为空则将stack1中的元素依次存入stack2,最后用栈stack2去模仿队列取元素。
解题代码如下:
//两个栈实现一个队列的功能:
class Solution{
public:
//定义将数据推入队列的函数
void push(int node) {
stack1.push(node);
}
//定义将数据推出队列的函数
int pop() {
int front;
//当栈2为空时,才将栈1中的元素全部倒到栈2中
if(stack2.empty())
{
while(!stack1.empty())
{
front=stack1.top();
stack1.pop();
stack2.push(front);
}
}
front = stack2.top();
stack2.pop();
return front;
}
private:
stack<int> stack1;
stack<int> stack2;
};
二、如何用二个队列实现一个栈功能?
先用一个队列queue1去模仿栈存元素,然后当需要模仿栈取元素时,将queue1中除了最后一个元素,其余均存入queue2中,最后将queue1中最后一个元素取出模仿栈取元素。
解题代码如下:
//两个队列实现一个栈的功能:
class Solution{
public:
//定义将数据推入栈的函数
void push(int node) {
queue1.push(node);
}
//定义将数据推出栈的函数
int pop() {
int front;
while(queue1.size() > 1)
{
top = queue1.front();
queue2.push(top);
queue1.pop();
}
if(queue1.size() == 1)
{
top = queue1.front();
queue1.pop();
return top;
}
while(queue2.size() > 1)
{
top = queue2.front();
queue1.push(top);
queue2.pop();
}
if(queue2.size() == 1)
{
top = queue2.front();
queue2.pop();
return top;
}
return -1;
}
private:
queue<int> queue1;
queue<int> queue2;
};
日积月累,与君共进,增增小结,未完待续。
标签:队列,top,queue2,C++,queue1,pop,front 来源: https://blog.csdn.net/Vensmallzeng/article/details/100627647