1、栈实现队列
栈结构:先进后出(FILO);
队列结构:先进先出(FIFO);
所以想要用栈实现队列的效果,自然而然地就想到两个栈实现一个队列;
代码如下:
两个栈,一个入队,一个出队
public class QueueOfStack {
private Stack mS1 = new Stack(); //进栈
private Stack mS2 = new Stack(); //出栈
/**
* 进队列
* @param e
*/
public void push(Object e) {
mS1.push(e);
}
/**
* 出队列
* @return
*/
public Object pop() {
if(mS2.isEmpty()) {
while (!mS1.isEmpty()) {
mS2.push(mS1.pop());
}
}
return mS2.pop();
}
}
2、队列实现栈
出栈时,先pop到最后插入的元素再pop,即可实现FILO的效果
public class StackOfQueue {
private LinkedList<Integer> queue = new LinkedList();
/**
* 进栈
* @param e
*/
public void push(int e) {
queue.add(e);
}
/**
* 出栈
* @return
*/
public Integer pop() {
if(!queue.isEmpty()) {
while (queue.size()>1) {
queue.pop();
}
return queue.pop();
}
return null;
}
public Integer peek() {
return queue.peek();
}
}