#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
#include <memory>
using namespace std;
template<typename Type>
class Queue
{
public:
Queue():_capacity(0),_size(0){};
Queue(int);
~Queue();
void add(Type element);
Type remove();
bool is_full(); //判断是否为满
bool is_empty(); //判断是否为空
int size(); //返回队列大小
int capacity(); //返回队列容量
void resize(int); //修改队列容量
private:
int _size,_capacity;
Type* _queue;
};
template<typename Type>
Queue<Type>::Queue(int size)
{
_capacity = size;
_queue = new Type[_capacity];
_size = 0;
}
template<typename Type>
Queue<Type>::~Queue()
{
if (_size == 0)
{
return;
}
delete[] _queue; //要使用memory头文件,否则执行最后会出错
_queue = NULL;
}
template<typename Type>
void Queue<Type>::add(Type element)//队尾插入元素
{
if (is_full())
{
cerr << "Queue is full!/n"<<endl;
exit(-1);
}
_queue[_size] = element;
_size ++;
}
template<typename Type>
Type Queue<Type>::remove() //移除队首元素
{
if (is_empty())
{
cerr << "Queue is empty!/n"<<endl;
exit(-2);
}
Type first = _queue[0];
_queue ++;
_size--;
return first;
}
template<typename Type>
bool Queue<Type>::is_full() //返回队列是否为满
{
return _size==_capacity;
}
template<typename Type>
bool Queue<Type>::is_empty() //判断队列是否为空
{
return _size == 0;
}
template<typename Type>
int Queue<Type>::capacity()//返回队列的容量
{
return _capacity;
}
template<typename Type>
int Queue<Type>::size() //返回队列中元素的个数
{
return _size;
}
template<typename Type>
void Queue<Type>::resize(int newsize)
{
if (is_empty()) //如果队列为空,直接分配
{
_capacity = newsize;
_queue = new Type[_capacity];
}
delete[] _queue; //删除之后再分配新的内存,是否需要拷贝之前存储的元素?
_capacity = newsize;
_queue = new Type[_capacity];
}
#endif
C++写的队列类模板(Queue.h)
最新推荐文章于 2024-04-14 22:04:26 发布