#ifndef SEQQUEUE_H #define SEQQUEUE_H #include #include using namespace std; #include "Queue.h" template class SeqQueue : public Queue { public: SeqQueue(int sz = 10); ~SeqQueue() { delete[] elements; } bool EnQueue(const T& x); //若队列不满,则将x进队列,否则队列溢出处理 bool DeQueue(T& x); //若队列不空,则退出队头元素由x返回 bool getFront(T& x); //若队列不空,则返回对头元素的值 void makeEmpty() //置空操作 { front = rear = 0; } bool IsEmpty()const //判断队列空否,空返回true { return (front == rear )?true:false; } bool IsFull()const //判断队列满否,满返回true { return ((rear+1)%maxSize == front) ? true : false; // } int getSize()const { return (rear - front + maxSize)%maxSize; } friend ostream& operator << (ostream& os,SeqQueue& Q); //重载输出操作符 T getData(int i)const { return elements[i]; } protected: T * elements; int rear,front; int maxSize; }; template SeqQueue::SeqQueue(int sz /* = 10 */):front(0),rear(0),maxSize(sz) { elements = new T[maxSize]; assert(elements != NULL); } template bool SeqQueue::EnQueue(const T& x) { if(IsFull() == true) return false; elements[rear] = x; rear = (rear+1) % maxSize; return true; } template bool SeqQueue::DeQueue(T& x) { if(IsEmpty() == true) return false; x = elements[front]; front = (front +1 )%maxSize; return true; } template bool SeqQueue::getFront(T& x) { if(IsEmpty() == true) return false; x = elements[front]; return true; } template ostream& operator<< (ostream& os,SeqQueue& Q) { os<< "front = "<