其實, 若用 C++ 我們就不必自己設計 Stack(堆疊)和Queue(佇列)等資料結構,
因為 C++ Class library 中已經有 stack 和 queue; 其實還很多!
stack, queue, 和 vector, list, 和許多好用的資料結構以及 sort 函數等,
都是 C++ STL (Standard Template Library) 的一部份,且都是 template (樣板);
所謂樣板類別(template class)又稱為泛型(Generic type; 泛用型別), 
就是說我們使用時再決定型別(type), 或是說可把 type 當作參數!
   STL起初是 HP 兩位工程師(一位是女共匪 Meng Lee :-)參考資料結構課本,
寫了之後丟在 Internet 上給大家免費使用的, 後來受邀加入 C++ 標準程式庫中! 
但其 stack 和 queue 的函數名稱與用法與一般資料結構課本上講的稍有不同; 
例如, 一般pop不是void function, 會順便傳回 top( ) 的元素; 
又如, 一般queue的加入刪除為 enqueue (或 addqueue) 與 dequeue.
以下用程式庫中 queue 擴充成 MyQueue, 並寫enqueue/dequeue 函數
其實只換了幾個函數名稱 :-)  仿照資料結構課本的名稱 :-) 
   如果我們連女共匪寫的 stack/queue 都不會用, 那就太丟臉了! 
更多關於 Stack/Queue/Vector/List的資料請看 e3.nctu 的教材區!
ccsun2 sample> cat -n stk.cpp
    1 //stk.cpp -- 使用女共匪寫的 stack, by tsaiwn@csie.nctu
    2 #include<iostream>
    3 #include<stack>
    4 using namespace std;
    5 // see  /usr/local/include/g++/stack
    6 // .. and ..  /usr/local/include/g++/stl_stack.h
    7 int main( ) {
    8     stack<int> x;   // 整數堆疊, 內部是 <deque>
    9     x.push(880);
   10     x.push(770);
   11     x.push(53);
   12     while(! x.empty( ) ){
   13        cout << x.top( ) << " ";
   14        x.pop( );  // 女共匪寫的 pop( ) 是 void
   15     }// while
   16     std::cout << endl;    // endl 就是 "\n"
   17 } /******
   18 D:\test> g++ stk.cpp 
   19 D:\test> a.exe 
   20 53 770 880
   21 **********************/   
ccsun2 sample> g++ stk.cpp
ccsun2 sample> ./a.out
53 770 880 

ccsun2 sample> cat -n que9.cpp  
    1 //que9.cpp --- CopyLeft by tsaiwn@csie.nctu.edu.tw
    2 //把女共匪寫的  <queue> 拿來"擴充"成 MyQueue
    3 #include<iostream>
    4 #include<queue>
    5 // see  /usr/local/include/g++/queue
    6 // .. and ..  /usr/local/include/g++/stl_queue.h
    7 using namespace std;
    8 template <class T>
    9 class MyQueue: public queue<T>{
   10     public:
   11        void enqueue(T x){ queue<T>::push(x); }
   12        void dequeue(void){ MyQueue<T>::pop(); }  // OK
   13        T head(void){ return queue<T>::front(); }
   14        bool isempty() { return MyQueue<T>::empty(); }
   15        // size_t size() { return queue<T>::size(); } // 有繼承過來
   16 };
   17 int main( ) {
   18    MyQueue<char> x;
   19    x.enqueue(53);     // 48+ 5
   20    x.enqueue(0x33);   // '3'
   21    x.enqueue('7');
   22    x.enqueue(55);    // 48 + 7
   23    x.enqueue(48);    // 48 == '0'
   24    x.push(56);    // 48 + 8
   25    x.push(56);    // '8'
   26    x.enqueue(48);
   27    cout << "Size of the queue = " << x.size() << endl;
   28    while(! x.isempty( ) ) {
   29       cout << x.head( ) << " ";
   30       x.dequeue();
   31    }
   32    std::cout << endl;
   33 } // main(  
ccsun2 sample> g++ que9.cpp 
ccsun2 sample> ./a.out 
Size of the queue = 8
5 3 7 7 0 8 8 0 
ccsun2 sample>