題目:
用兩個棧實現一個隊列。隊列的聲明如下:請實現他的兩個函數appendTail和deleteHead, 分別完成在隊列尾部插入節點和在隊列頭部刪除節點的功能。
package Solution;
import java.util.Stack;
/**
* 劍指offer面試題7:用兩個棧實現隊列
* 題目:用兩個棧實現一個隊列。隊列的聲明如下:請實現他的兩個函數appendTail和deleteHead,
* 分別完成在隊列尾部插入節點和在隊列頭部刪除節點的功能。
* @author GL
*
*/
public class No7QueueWithTwoStacks {
private static Stack<Object> stack1=new Stack<Object>();
private static Stack<Object> stack2=new Stack<Object>();
/*
* 加入隊列中的元素只加入到棧1中
*/
public static void appendTail(Object item){
stack1.push(item);
System.out.println("壓入棧元素:"+item);
}
/*
* 刪除一個元素時,檢查棧2是否為空,棧2不為空則彈出棧2棧頂元素
* 棧2為空,則把棧1中的元素全部彈出、壓入到棧2中,然后從棧2棧頂彈出元素
*/
public static void deleteHead(){
if(!stack2.empty())
System.out.println("彈出棧元素:"+stack2.pop());
else{
if(stack1.empty())
throw new RuntimeException("隊列為空");
while(!stack1.empty()){
Object item=stack1.pop();
stack2.push(item);
}
deleteHead();
}
}
public static void main(String[] args) {
//向空的隊列中添加元素
appendTail(1);
//向非空的隊列中添加元素
appendTail(2);
appendTail(3);
//向非空的隊列中刪除元素
deleteHead();
deleteHead();
appendTail(4);
deleteHead();
appendTail(5);
deleteHead();
deleteHead();
deleteHead();
}
}