tsaiwn@magpie % cat -n myque2.h
     1  // myque2.h  -- queue class by tsaiwn@csie.nctu.edu.tw
     2  // g++ -c myque2.cpp
     3  // g++ testmyq2.cpp myque2.o
     4  #ifndef __MYQUE2__
     5  #define __MYQUE2__
     6  class MyQueue {
     7      enum{ NELEMENT=99 };  // good habit
     8      long data[NELEMENT];
     9      int phead, ptail;   // phead V queue eY, ptailV
    10      void initQueue(void){ phead = ptail = 0; }
    11    public:
    12      MyQueue(void) { initQueue( ); }
    13      void enque(long);
    14      long deque(void);
    15      long front(void) { return data[phead]; }
    16      int isempty(void) { return (phead == ptail) ;}
    17      int isfull(void) { return ((ptail+1) % NELEMENT) == phead; } 
    18      ////// //////  `N circular queue F覡
    19      void push(long x) { enque(x); }
    20      long pop(void) { return deque( ); }
    21      long top(void) { return front( ); }
    22      int empty(void) { return isempty( );}
    23      int full(void) { return isfull( );}
    24  }; // class MyQueue
    25  ////// ////// //////
    26  #endif
tsaiwn@magpie % cat -n myque2.cpp
     1  // myque2.cpp  -- ŧigb myque2.h
     2  // CopyLeft by tsaiwn@csie.nctu.edu.tw
     3  #include "myque2.h"
     4  // some implementations are in myque2.h
     5  ////// ////// //////
     6  void MyQueue::enque(long x) {
     7      if( isfull() ) { return; }  // may want to give some error message?
     8      data[ptail] = x;
     9      ptail++;
    10      ptail %=  NELEMENT;    /* x %= y;  means x = x % y; */
    11  }
    12  long MyQueue::deque(void) {  
    13     if( !isempty() ) {
    14        long tmp=data[phead];
    15        phead++; phead %= NELEMENT;
    16        return tmp;
    17     } // if !isempty
    18  }
tsaiwn@magpie % g++ -c myque2.cpp  ;  nm myque2.o
00000056 T _ZN7MyQueue5dequeEv
00000000 T _ZN7MyQueue5enqueEl
00000000 W _ZN7MyQueue6isfullEv
00000000 W _ZN7MyQueue7isemptyEv
tsaiwn@magpie % cat -n testmyq2.cpp
     1  //testmyq2.cpp -- copyLeft by tsaiwn@csie.nctu.edu.tw
     2  // HU #ifndef OΨ check O_ GNU  g++ ?
     3  // YOhϥ¦gk! Ҧp Turbo C++ 3.0 u{¦gk!
     4  #ifndef __GNUG__
     5    #include <iostream.h>
     6  #else
     7    #include<iostream>
     8    using namespace std;
     9  #endif
    10  #include "myque2.h"
    11  ////// ////// ////// ////// ////// //////
    12  int main( ) {
    13      MyQueue xo;
    14      xo.enque(53);
    15      xo.push(770);
    16      xo.push(880);
    17      while(!xo.empty( ) ) {
    18         cout << xo.top( ) << " "; xo.pop( );
    19      }
    20      cout << endl;   // new line
    21      return 0;
    22  }
tsaiwn@magpie % g++ testmyq2.cpp myque2.o
tsaiwn@magpie % ./a.out
53 770 880
tsaiwn@magpie % echo p623
