编程语言
首页 > 编程语言> > 2栈->队列 and 2队列->栈 by C++

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