一个比较实用的循环队列

来源:互联网 发布:网络如何挣钱 编辑:程序博客网 时间:2024/06/05 16:40

最近任务比较繁重,没什么时间写博客,只能勉强附上之前写的一个还算比较实用的循环队列,工程上可以用得上,敬请笑纳大笑

#pragma once#include <string>using namespace std;#include "Mutex.h"#define CirQueueSize 1000;template <class ELEMENT_TYPE>   //循环队列模板类class CirQueue{public:CirQueue(void)  //默认大小:CirQueueSize{Array=NULL;MAXSIZE = CirQueueSize;Array = new ELEMENT_TYPE[MAXSIZE];front = 0;rear  = front;if(Array == NULL)lastError="开辟内存空间失败!";elselastError="";}CirQueue(unsigned int size){Array=NULL;MAXSIZE = size;Array = new ELEMENT_TYPE[size];front = 0;rear  = front;if(Array == NULL)lastError="开辟内存空间失败!";elselastError="";}~CirQueue(void){if(Array!=NULL)delete[] Array;}int Length()//循环队形长度{return (rear + MAXSIZE - front)%MAXSIZE;}bool isEmpty()//循环队形是否空{Mutex::Lock lock(_mutex);return front == rear;}bool isFull()//循环队形是否满{return Length() == MAXSIZE - 1;}void clear()//循环队形清空{Mutex::Lock lock(_mutex);front=rear;}ELEMENT_TYPE& operator[](int index){return Array[index];}bool enQueue(const ELEMENT_TYPE& element)//入队{Mutex::Lock lock(_mutex);if(isFull()){lastError="队列数据已满,插入数据失败!";return false;}Array[rear] = element;             //深复制rear = (rear + 1) % MAXSIZE;return true;}bool deQueue(ELEMENT_TYPE& element)     //出队{Mutex::Lock lock(_mutex);if(front == rear){lastError="队列为空,读取数据失败!";return false;}element = Array[front];             //深复制front = (front+1) % MAXSIZE;return true;}std::string lastError;private:int front; //头 int rear;  //尾int MAXSIZE;//元素总数ELEMENT_TYPE * Array;Mutex _mutex;//互斥变量};

关于互斥变量Mutex类是使用Qt库封装的互斥类,可以考虑使用其他的如boost库或标准库来实现。

原创粉丝点击