225. 用队列实现栈
用两个队列实现栈
import java.util.LinkedList;
import java.util.Queue;
public class Algorithm {
public static void main(String[] args) {
MyStack myStack = new MyStack();
for (int i = 0; i < 10; i++) {
myStack.push(i);
if (i % 2 == 0){
myStack.pop();
}
System.out.println(myStack.top());
}
}
}
class MyStack{
/**
* 定义一个存放元素的队列
*/
Queue<Integer> q1;
/**
* 存储栈顶元素
*/
int topElement;
public MyStack() {
/**
* Queue类是LinkedList类的父类
*/
q1 = new LinkedList<>();
}
public void push(int x) {
q1.add(x);
topElement = x;
}
public int pop() {
/**
* 定义一个辅助队列,负责存储除栈顶元素以外的所有元素
*/
Queue<Integer> q2 = new LinkedList<>();
/**
* 此处不能用for循环,因为队列的大小一直在改变
*/
while (q1.size() > 1) {
/**
* 每次转移元素之前,保存一下当前的元素,最后一次保存的值就是此次pop后的新栈顶元素
*/
topElement = q1.remove();
q2.add(topElement);
}
int tem = q1.remove();
q1 = q2;
return tem;
}
public int top() {
return topElement;
}
public boolean empty() {
return q1.isEmpty();
}
}
用一个队列实现栈
import java.util.LinkedList;
import java.util.Queue;
public class Algorithm {
public static void main(String[] args) {
MyStack myStack = new MyStack();
for (int i = 0; i < 10; i++) {
myStack.push(i);
if (i % 2 == 0){
myStack.pop();
}
System.out.println(myStack.top());
}
}
}
class MyStack{
Queue<Integer> q;
int topElement;
public MyStack() {
q = new LinkedList<>();
}
public void push(int x) {
q.add(x);
topElement = x;
}
/**
* 使用一个队列时,栈顶元素位于队列末尾,当要取出时,将栈顶元素前面的所有元素出队再入队,平移到栈顶元素后面
*/
public int pop() {
for (int i = 0; i < q.size() - 1; i++) {
/**
* 此时新栈顶元素就是最后一次出队再入队的元素
*/
topElement = q.remove();
q.add(topElement);
}
return q.remove();
}
public int top() {
return topElement;
}
public boolean empty() {
return q.isEmpty();
}
}
https://leetcode-cn.com/problems/implement-stack-using-queues/