数学之于编程,真可谓是密不可分的啊。今天写了循环队列之后,发现利用求模来得到队首与队尾的编号是一种常用的方法。 #ifndef CIRCULARQUEUE_H #define CIRCULARQUEUE_H const static int INIT_SIZE=5; template<typename T> class CircularQueue { T CQueue[INIT_SIZE]; int front; int rear; public: CircularQueue(); int EnQueue(T elem); T DeQueue(); int getFront()const; int getRear()const; }; template<typename T> CircularQueue<T>::CircularQueue() { for(int i=0;i<INIT_SIZE;++i)CQueue[i]=NULL; front=0; rear=0; } template<typename T> int CircularQueue<T>::EnQueue(T elem) { if((rear+1)% INIT_SIZE==front)return -1; CQueue[rear]=elem; rear=(rear+1)%INIT_SIZE; return 0; } template<typename T> T CircularQueue<T>::DeQueue() { if((front==rear))return -1; T elem=CQueue[front]; front=(front+1)%INIT_SIZE; return elem; } template<typename T> int CircularQueue<T>::getFront()const { return front; } template<typename T> int CircularQueue<T>::getRear()const { return rear; } #endif // circular queue.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "curcular queue.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { CircularQueue<int> A; int i=5; while(i!=0) { A.EnQueue(i); --i; } A.DeQueue(); A.EnQueue(9); cout<<A.getFront()<<" "<<A.getRear()<<"/n"; system("pause"); return 0; }