队列queue特性:先进先出(队尾进,队头出),主要方法poll(取值),push(放值)、getLength(长度)
栈stack特性:先进后出,主要方法poll(取值),push(放值)、getLength(长度)
/** * @Auther: zhangyh * @Date: 2019/1/14 09:57 * @Description: 队列是先进先出(队尾进,队头出),栈是先进后出。 * 定义两个队列:数据队列、辅助队列 * 数据队列存放数据的队列 * 辅助队列辅助功能 * length数据队列的size * push数据直接add到数据队列 * poll把数据队列的前(length-1)个数据放入辅助队列,poll最后一个数据, * 把辅助队列的所有数据放回数据队列。 */ public class Stack<T> { private Queue<T> pQueue = new LinkedList<>();//数据队列 private Queue<T> zQueue = new LinkedList<>();//辅助队列 public T poll() throws Exception { if(pQueue == null){ throw new Exception("空栈"); } T t = null; while (pQueue.size()>1){ zQueue.add(pQueue.poll());//前length-1个数据放入辅助队列 } if(pQueue.size() == 1){ t = pQueue.poll();//取出数据队列的最好一个 while (zQueue.size()>0){ pQueue.add(zQueue.poll());//辅助队列的数据放入数据队列 } } return t; } public void push(T t){ pQueue.add(t); } public long getSize(){ return pQueue.size(); }
/** * @Auther: zhangyh * @Date: 2019/1/14 13:58 * @Description: 先进先出 */ public class Queue<T> { private Stack<T> psStack = new Stack<>();//数据栈 private Stack<T> tStack = new Stack<>();//辅助栈 public void push(T t){ psStack.push(t); } public T poll(){ T t = null; while (psStack.size() > 1){ tStack.push(psStack.pop()); } if(psStack.size() == 1){//最好一个 t = psStack.pop(); while (tStack.size()>0){ psStack.push(tStack.pop()); } } return t; } public long getLength(){ return psStack.size(); }