剑指offer : 用两个栈实现队列

题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

首先我们对栈和队列的特点进行了解:

栈:先进后出

队列:先进先出

因此要用两个栈来实现队列,我们可以用stack1来进行pushstack2进行pop

将stack2中顶部元素保存然后pop

result = stack2.top();
stack2.pop();

但这里要注意的问题是 stack1和stack2 的元素顺序不能打乱

必须确保stack2的元素pop完毕,再将stack1 的元素 push到stack2 中。

举例: 

stack1:6  5  4  3  2  1

stack2:  9  8  7

我们要的顺序为   9  8  7  6  5  4  3  2  1

但如果我们先将stack1压入  就会得到: 6  5  4  3  2  1  9  8  7

代码:

class Solution
{
public:
	void push(int node) 
	{
		stack1.push(node);   //直接压入即可
	}

	int pop()
	{
		//如果栈2有元素则先行弹出
		int result = 0;
		if (!stack2.empty())
		{
			result = stack2.top();
			stack2.pop();
		}
		//栈2中没有元素,且栈1中有元素,将栈1中的元素弹出后再压入栈2,弹出栈2的顶部元素即为出队
		else if (!stack1.empty())
		{
			while (!stack1.empty())
			{
				stack2.push(stack1.top());
				stack1.pop();
				
			}
			result = stack2.top();
			stack2.pop();
		}
		return result;
	}

private:
	stack<int> stack1;
	stack<int> stack2;
};

猜你喜欢

转载自blog.csdn.net/Shile975/article/details/88803013