ccsun2 sample> g++ testmyq2.cpp ccsun2 sample> ./a.out Size of the queue = 108 5 3 7 7 0 8 8 0 ccsun2 sample> cat -n myqueue.h 1 // myqueue.h -- CopyLeft by tsaiwn@csie.nctu.edu.tw 2 // implement MyQueue as a circular queue 3 #ifndef _MYQUEUE_ 4 #define _MYQUEUE_ 5 template 6 class MyQueue{ 7 enum{ NELEMENT=99 }; 8 HAHA data[NELEMENT]; 9 int phead, ptail; // phead 指向 queue 的頭, ptail指向尾巴+1 10 // 就是說下一個來的就放在 ptail 指的地方 11 // 可是 phead 所指的就是第一個 (head) 所在之處 12 public: 13 MyQueue(void){ phead = ptail = 0; } // initial 沒東西 14 void enque(HAHA); 15 void push(HAHA x) { enque(x); } 16 HAHA deque(void); 17 HAHA pop(void) { return deque( ); } 18 HAHA top(void) { return data[phead]; } 19 HAHA front(void) { return data[phead]; } 20 int empty(void){ return (phead == ptail) ;} // 沒東西在 queue 21 int isfull(void); 22 }; 23 /////////////////////////////////////////////////// 24 template int MyQueue::isfull(void) 25 { return ((ptail+1) % NELEMENT) == phead; } // 故意留一個不用 ! 26 template 27 void MyQueue::enque(HAHA x) 28 { 29 if( isfull() ) { return; } // may want to give some error message? 30 data[ptail] = x; 31 ptail++; 32 ptail %= NELEMENT; /* x %= y; means x = x % y; */ 33 } 34 template 35 HAHA MyQueue::deque(void) 36 { if( !empty() ){ 37 HAHA tmp=data[phead]; 38 phead++; 39 phead %= NELEMENT; // wrap around 40 return tmp; 41 } // if 42 } 43 #endif ccsun2 sample> cat -n testmyq2.cpp 1 //testmyq2.cpp --- CopyLeft by tsaiwn@csie.nctu.edu.tw 2 #include 3 #include "myqueue.h" 4 // see /usr/local/include/g++/queue 5 // .. and .. /usr/local/include/g++/stl_queue.h 6 using namespace std; 7 int main( ) 8 { 9 MyQueue x; 10 x.push(53); 11 x.push(0x33); 12 x.push('7'); 13 x.push(55); // '7' 14 x.push(48); 15 x.push(56); // '8' 16 x.push(56); 17 x.push(48); // '0' 18 cout << "Size of the queue = " << sizeof(MyQueue) << endl; 19 while(! x.empty()) 20 { 21 cout << x.front() << " "; 22 x.pop(); 23 } 24 std::cout << endl; 25 } ccsun2 sample> exit