// myque3.h -- template queue class by tsaiwn@csie.nctu.edu.tw #ifndef __MYQUE3__ #define __MYQUE3__ template class MyQueue { enum{ NELEMENT=99 }; // good habit HAHA data[NELEMENT]; int phead, ptail; // phead 指向 queue 的前頭, ptail指向尾巴 void initQueue(void){ phead = ptail = 0; } public: MyQueue(void) { initQueue( ); } void enque(HAHA); HAHA deque(void); HAHA front(void) { return data[phead]; } int isempty(void) { return (phead == ptail) ;} int isfull(void) { return ((ptail+1) % NELEMENT) == phead; } ////// ////// 注意 circular queue 的表達方式 void push(HAHA x) { enque(x); } HAHA pop(void) { return deque( ); } HAHA top(void) { return front( ); } int empty(void) { return isempty( );} int full(void) { return isfull( );} }; // class MyQueue ////// ////// ////// template void MyQueue::enque(HAHA x) { if( isfull() ) { return; } // may want to give some error message? data[ptail] = x; ptail++; ptail %= NELEMENT; /* x %= y; means x = x % y; */ } template HAHA MyQueue::deque(void) { if( !isempty() ) { HAHA tmp=data[phead]; phead++; phead %= NELEMENT; return tmp; } // if !isempty } #endif