题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
class Solution
{
public:
int cou = 0;
void push(int node) {
stack1.push_back(node);
stack2.push_back(cou++);
}
int pop() {
int i = 0;
while(stack2[i] == -1)
{
i++;
}
stack2[i] = -1;
return stack1[i];
}
private:
vector<int> stack1;//存数
vector<int> stack2;//地址
};
这个方法是用一个栈存数,用一个栈存数的地址。
用了C++的向量vector容器
push_back( ) 成员函数在向量的末尾插入值,如果有必要会扩展向量的大小
还有另一种思路是一个栈(A)用来push,类比进队列操作;
然后从该栈(A)pop,push进入栈(B),出栈再pop 这时的顺序就和出队列顺序一致了。
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack1.empty()&&stack2.empty()){
throw new RuntimeException("Queue is empty!");
}
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}