您的位置:首页 > 理论基础 > 数据结构算法

c++ 数据结构 循环队列

2016-12-05 15:35 531 查看
1.头文件:

# include<iostream>
# include<assert.h>
template <class T>
class SeqQueue{
private:
T* elements;              //存放队列元素的数组
int rear,front;           //队尾指针和对头指针
int maxSize;              //队列可容纳的最大元素个数
public:
SeqQueue(int sz=10);          //构造函数
~ SeqQueue(){ delete[]elements;}    //析构函数
bool EnQueue(const T& x);         //进队函数
bool DeQueue(T& x);               //出队函数
bool getFront(T& x);             //取队头元素
void makeEmpty(){front=rear=0;}     //把队置空
bool isEmpty(){return (front==rear)?true:false;}    //判断队空
bool isFull(){return ((rear+1)%maxSize==front)?true:false;}    //判断队满
int getSize(){return (rear-front+maxSize)%maxSize;}            //求队中元素个数
friend ostream& operator<<(ostream& ostr,SeqQueue<T>& Q);        //输出运算符重载
};
2.原文件:

# include"SeqQueue.h"
# include<iostream>
using namespace std;
template<class T>
SeqQueue<T>::SeqQueue(int sz):rear(0),front(0),maxSize(sz){
elements=new T[maxSize];
assert(elements!=NULL); //断言机制:如果不满足括号内条件将终止程序的执行
}
template<class T>
bool SeqQueue<T>::EnQueue(const T& x){
if(isFull()) return false;
else
elements[rear]=x;
rear=(rear+1)%maxSize; //加一再取余是为了rear指向队列最后一个元素(下标maxSize-1),再进一下标就到了0
return true;
}
template<class T>
bool SeqQueue<T>::DeQueue(T& x){
if(isEmpty()) return false;
else
x=elements[front];
front=(front+1)%maxSize;
return true;
}
template<class T>
bool SeqQueue<T>::getFront(T& x){
if(isEmpty())  return false;
else
x=elements[front];
return true;
}
template<class T>
ostream& operator<<(ostream& ostr,SeqQueue<T>& Q){
ostr<<"front="<<Q.front<<" "<<"rear="<<Q.rear<<endl;
for(int i=Q.front;i!=Q.rear;i=(i+1)%Q.maxSize)
ostr<<i<<": "<<Q.elements[i]<<endl;
return ostr;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: