http://wiki.jikexueyuan.com/project/for-offer/images/7.png" alt="" />
[java] view plaincopyprint?
public class Test07 {
/**
* 用兩個(gè)棧模擬的隊(duì)列
* 用兩個(gè)核實(shí)現(xiàn)一個(gè)隊(duì)列。隊(duì)列的聲明如下,諸實(shí)現(xiàn)它的兩個(gè)函數(shù)appendTail和deleteHead,
* 分別完成在隊(duì)列尾部插入結(jié)點(diǎn)和在隊(duì)列頭部刪除結(jié)點(diǎn)的功能。
*/
public static class MList<T> {
// 插入棧,只用于插入的數(shù)據(jù)
private Stack<T> stack1 = new Stack<>();
// 彈出棧,只用于彈出數(shù)據(jù)
private Stack<T> stack2 = new Stack<>();
public MList() {
}
// 添加操作,成在隊(duì)列尾部插入結(jié)點(diǎn)
public void appendTail(T t) {
stack1.add(t);
}
// 刪除操作,在隊(duì)列頭部刪除結(jié)點(diǎn)
public T deleteHead() {
// 先判斷彈出棧是否為空,如果為空就將插入棧的所有數(shù)據(jù)彈出棧,
// 并且將彈出的數(shù)據(jù)壓入彈出棧中
if (stack2.isEmpty()) {
while (!stack1.isEmpty()) {
stack2.add(stack1.pop());
}
}
// 如果彈出棧中還沒有數(shù)據(jù)就拋出異常
if (stack2.isEmpty()) {
throw new RuntimeException("No more element.");
}
// 返回彈出棧的棧頂元素,對(duì)應(yīng)的就是隊(duì)首元素。
return stack2.pop();
}
}
}