目录
思路:
stk1——输入栈
stk2——输出栈——因为队列是先进先出,所以一旦要输出,则把输入栈中元素存入输出栈,再输出,顺序就是先进先出
不妨举一个例子:
【push,push,pop,peek,push,pop】
【1 ,2 ,null,null, 3 ,null】
1、java
java的栈中,stk.pop()——删除栈顶元素并返回栈顶元素值
java中的栈pop和peek的异同:
相同点:都返回栈顶元素的值
不同点:pop会删除栈顶的值,peek不会删除
class MyQueue {
Deque<Integer> stk1=new LinkedList<>();
Deque<Integer> stk2=new LinkedList<>();
public void push(int x) {
stk1.push(x);
}
public int pop() {
if(stk2.isEmpty())
{
while(!stk1.isEmpty())
stk2.push(stk1.pop());
}
return stk2.pop();
}
public int peek() {
if(stk2.isEmpty())
{
while(!stk1.isEmpty())
stk2.push(stk1.pop());
}
return stk2.peek();
}
public boolean empty() {
return stk1.isEmpty()&&stk2.isEmpty();
}
}
2、c++
stk.pop()——仅仅删除栈顶元素
class MyQueue {
public:
stack<int> stk1,stk2;
void push(int x) {
stk1.push(x);
}
int pop() {
if(stk2.empty())
{
while(!stk1.empty())
{
stk2.push(stk1.top());
stk1.pop();
}
}
int x=stk2.top();
stk2.pop();
return x;
}
int peek() {
int x=this->pop();
stk2.push(x);
return x;
}
bool empty() {
return stk1.empty()&&stk2.empty();
}
};