队列(C++模版类实现)
- by Hector
[CODE=cplusplus]
/*//////////////////////////////////////////////////////////////////////////////
// 名 称 (Unit Name) : 队列 Queue.h 头文件
// 作 者 (Author) : Hector(张伟)
// 邮 箱 (E-mail) : ourys@qq.com
// 支 持 (Support) : http://www.ourys.com
// 备 注 (Remarks) :
//////////////////////////////////////////////////////////////////////////////*/
#ifndef _QUEUE_H
#define _QUEUE_H
#define QUEUE_INIT_SIZE 100 //初始队列的最大长度
#define QUEUEINCREMENT 10 //每次新增的长度
template
class Queue{
public:
Queue(); //构造函数,创建一个新的队列
bool EnQueue(DataType e); //插入一个值为e的队尾元素
bool GetHead(DataType &e); //取出队头元素
bool DeQueue(DataType &e); //删除队头元素
bool QueueEmpty(); //判断是否非空
bool Clear(); //清空队列
~Queue(); //销毁队列
private:
DataType *front;
DataType *rear;
int queuesize;
};
/*———— 构造函数,创建一个新的队列 ————–*/
template
Queue
{
if(!(front=(DataType*)malloc(QUEUE_INIT_SIZE*sizeof(DataType)))) exit(1);
rear=front;
queuesize=QUEUE_INIT_SIZE;
}
/*———— 插入一个值为e的队尾元素 ————–*/
template
bool Queue
{
if(rear-front>=queuesize){
if(!(front=(DataType*)realloc(front,(queuesize+QUEUEINCREMENT)*sizeof(DataType)))) exit(1);
rear=front+queuesize;
queuesize+=QUEUEINCREMENT;
}
*rear++=e;
return true;
}
/*———— 取出队头元素 ————–*/
template
bool Queue
{
if(rear==front) return false;
e=*front;
return true;
}
/*———— 删除队头元素 ————–*/
template
bool Queue
{
if(rear==front) return false;
e=*front;
DataType* temp;
temp=front;
while(temp!=rear) //为了删除后的空间继续利用,所有元素都向前移一位
{
*temp=*(temp+1);
temp++;
}
rear–;
return true;
}
/*———— 判断是否非空 ————–*/
template
bool Queue
{
return rear==front? 1:0;
}
/*———— 清空队列 ————–*/
template
bool Queue
{
rear=front;
return true;
}
/*———— 销毁队列 ————–*/
template
Queue
{
free(front);
}
#endif
/*—————- 基本测试文件 ——- Author:Hector ——-*/
#include
#include “Queue.h”
using namespace std;
int main()
{
Queue
int temp;
for(int i=2;i<10;i++)
{
my.EnQueue(i);
my.GetHead(temp);
cout<
for(int i=2;i<10;i++)
{
my.DeQueue(temp);
cout<
my.DestroyQueue();
return 0;
}
[/CODE]