您的位置:首页 > 职场人生

剑指offer面试题7——用两个栈实现队列

2016-03-05 18:17 381 查看
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();
}

/**
* 打印队列
*/
@Override
public 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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: