目錄
題目:
用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數appendTail和deleteHead,分別完成在隊列尾部插入節點和在隊列頭部刪除節點的功能。template <typename T> class CQueue
{
public :
CQueue(void);
~CQueue(void);
void appendTail(const T& node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
}
思路:
從上述隊列的聲明中可以看出,一個隊列包含了兩個棧stack1和stack2,因此這道題的意圖是要求我們操作這兩個”先進後出“的棧實現一個”先進先出“的隊列CQueue.步驟:
1.stack1用來保存入隊列數據.2.當stack2不爲空時,在stack2中的棧頂元素是最先進入隊列的元素,可以彈出。當stack2爲空時,我們把stack1中的元素逐個彈出並壓入stack2。由於先進入隊列的元素被壓到stack1的底端,經過彈出和壓入操作之後就處於stack2的頂端,又可以直接彈出。
代碼:
package test;
import java.util.Stack;
public class CQueue<T> {
private Stack<T> stack1 = new Stack<>();
private Stack<T> stack2 = new Stack<>();
//隊列添加元素
public void appendTail(T t) {
stack1.push(t);
}
//隊列刪除元素
public T deleteHead() {
if(stack2.size() <= 0) {
while(stack1.size() > 0) {
T data = stack1.pop();
stack2.push(data);
}
}
return stack2.pop();
}
public static void main(String[] args) {
CQueue<Integer> cQueue = new CQueue<>();
cQueue.appendTail(1);
cQueue.appendTail(2);
cQueue.appendTail(3);
System.out.println(cQueue.deleteHead());
}
}