用队列实现栈
题目
用队列实习栈的下列操作
push(x) —元素x入栈
pop() --移除栈顶元素
top() --获取栈顶元素
empty --判断返回栈是否为空
你可以假设所有操作都是有效操作 (对一个空栈不可能调用pop和top方法)
分析
队列 先进先出
栈 后进先出
比较难的就是push
可以先在队列中添加元素,之后将每一个队列的元素拿出来插到最后,就完成了和栈一样的效果。
代码
public class MyStack {
//创建队列
private Queue<Integer> queue = new LinkedList<Integer>();
public MyStack() {
}
public void push(int x) {
int size = queue.size();
//直接将元素添加到最后
queue.offer(x);
//将队列前面的元素取出来放进去
for (int i = 0; i < size; i++) {
queue.offer(queue.poll());
}
}
public int pop() {
int val = queue.poll();
return val;
}
public int top() {
return queue.peek();
}
public boolean isEmpty() {
return queue.isEmpty();
}
public void test() {
MyStack m = new MyStack();
m.push(1);
m.push(2);
m.push(3);
System.out.println("top->" + m.top());
System.out.println("pop->" + m.pop());
System.out.println("isEmpty->" + m.isEmpty());
}
public static void main(String[] args) {
MyStack m = new MyStack();
m.test();
}
}