232.用栈实现队列
使用栈实现队列的下列操作:
push(x) – 将一个元素放入队列的尾部。
pop() – 从队列首部移除元素。
peek() – 返回队列首部的元素。
empty() – 返回队列是否为空。
出栈:先把入栈的值转移到出栈的栈里,用来调换顺序
class MyQueue {
Stack<Integer> stackIn;
// 声明一个名为stackIn的栈对象,储存整数类型
// 在java中Stack是一种后进先出的数据结构
Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<>();
// 这行代码初始化了之前声明的 stackIn 变量。
// 它实例化了一个新的 Stack 对象,为存放整数类型的数据做好准备。
// 注释说明了这个栈是用来处理队列的入队操作,即将元素压入栈中。
// 在使用两个栈实现队列的情况下,stackIn 负责接收新加入的元素。
stackOut = new Stack<>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
dumpstackIn();
return stackOut.pop();
}
public int peek() {
dumpstackIn();
return stackOut.peek();
}
public boolean empty() {
return stackIn.isEmpty()&&stackOut.isEmpty();
}
private void dumpstackIn(){
if(!stackOut.isEmpty())
return;
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* boolean param_4 = obj.empty();
*/
225. 用队列实现栈
使用队列实现栈的下列操作:
push(x) – 元素 x 入栈
pop() – 移除栈顶元素
top() – 获取栈顶元素
empty() – 返回栈是否为空
class MyStack {
Queue<Integer>queue1;
Queue<Integer>queue2;
public MyStack() {
queue1 = new LinkedList<>();
queue2 = new LinkedList<>();
}
public void push(int x) {
queue2.offer(x);
while(!queue1.isEmpty()){
queue2.offer(queue1.poll());
}
Queue<Integer>queuetemp;
queuetemp = queue1;
queue1 = queue2;
queue2 = queuetemp;
}
public int pop() {
return queue1.poll();//移除队列的头部元素(等待时间最长的元素)
}
public int top() {
return queue1.peek();//返回队首元素的值(等待时间最长的元素),并不会移除它
}
public boolean empty() {
return queue1.isEmpty();
}
}
/**
* Your MyStack object will be instantiated and called as such:
* MyStack obj = new MyStack();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.top();
* boolean param_4 = obj.empty();
*/