用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
给出两个栈,stack1和stack2,完成一个队列,由于队列是先进先出,而栈是新进后出,后进新出,所以根据这个性质。
把栈stack1当做队列的头部分,把stack2当做队列的尾部分,
stack1实现队列的插入元素功能,stack2实现队列的尾删功能。
对于stack1的插入元素功能,实现的代码
void push(int node) {
stack1.push(node);
}
重点是对于队列的尾删操作,我的想法是先把stack1的元素全部取出,然后再放入stack2中,这样就会实现stack1的元素全部逆置。
比如stack1从栈底元素到栈顶依次为1,2,3,4,5.
依次从stack1中取出元素放入stack2中,就会实现元素的逆序,stack2的栈底到栈顶的依次为5,4,3,2,1
这样在stack2栈中取元素,就实现了队列的先进先出,后进后出的原则。
代码如下:
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(stack2.size()==0)
{
while(stack1.size()!=0)
{
stack2.push(stack1.top());
stack1.pop();
}
int i=stack2.top();
stack2.pop();
return i;
}
else
{
int i=stack2.top();
stack2.pop();
return i;
}
}
private:
stack<int> stack1;
stack<int> stack2;
};