题目描述:
用两个栈实现队列。队列的声明如下,请实现它的两个函数appendTail 和 deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
解题思路:
首先,栈的规则是先进后出,队列的规则是先进先出。经过两侧先进后出之后就变成了先进先出。所以,两次进栈出栈,便成了队列。
代码如下:
import java.util.Stack;
public class CQueue<T> {
private Stack<T> stack1;
private Stack<T> stack2;
public CQueue(){
this.stack1 = new Stack<T>();
this.stack2 = new Stack<T>();
}
public void appendTail(T element){
stack1.push(element);
}
public T deleteTail() throws Exception{
if(stack2.size() <= 0){
//如果stack2为空,将stack1中的全部弹出,放入stack2中
while(stack1.size() > 0){
T data = stack1.pop();
stack2.push(data);
}
}
if(stack2.size() == 0){
throw new Exception("Queue is Empty");
}
T head = stack2.pop();
return head;
}
public boolean isEmpty(){
if(stack1.size() == 0 && stack2.size() == 0){
return true;
}
return false;
}
public static void main(String[] args) {
CQueue<Integer> queue = new CQueue<Integer>();
for(int i = 0; i < 10; i++){
queue.appendTail(i);
}
try {
while(!queue.isEmpty())
System.out.println(queue.deleteTail());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}