本文主要是介绍剑指offer面试题7——用两个栈实现队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
package offer7;import common.Stack;/*** 用两个栈实现一个队列* @author chibozhou*/
public class Queue<T> {//队列当前大小private int curSize;//队列最大容量private int maxSize;//两个栈private Stack<T> stack1;private Stack<T> stack2;/*** 初始化队列* @param maxSize 设置最大容量*/public Queue(int maxSize){//健壮性判断if(maxSize<=0){System.out.println("队列大小不能小于1");return;}//初始化栈stack1 = new Stack<T>(maxSize);stack2 = new Stack<T>(maxSize);this.maxSize = maxSize;}/*** 入队 * @param obj 入队的元素*/public boolean push(T obj){//健壮性判断if(obj==null){System.out.println("入队元素不能为空!");return false;}//队已满if(stack1.getCurSize()>=maxSize){System.out.println("队以满!");return false;}//入队stack1.push(obj);curSize++;return true;}/*** 出队*/public T pop(){//对为空if(curSize==0){System.out.println("队为空!");return null;}//将stack1中的所有元素转移到stack2中,再从stack2栈顶取元素即可while(stack1.getCurSize()>0){stack2.push(stack1.pop());}return stack2.pop();}/*** 打印队列*/@Overridepublic String toString() {System.out.println("Queue---maxSize:"+maxSize+"---curSize:"+curSize+"------");//队列为空if(curSize==0){System.out.println("队列为空");return null;}//若数据都在stack1中,则转到stack2中if(stack1.getCurSize()>=0){while(stack1.getCurSize()>0){stack2.push(stack1.pop());}}//打印stack2中的元素for(int i=0;i<stack2.getCurSize();i++){System.out.println(stack2.top());}System.out.println("Queue--------------------------------------------------");return null;}}
这篇关于剑指offer面试题7——用两个栈实现队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!