#include <iostream>
#include <stdexcept>
#include <string>
using namespace std;
namespace my_space
{
template<class ElemType>
class queue
{
public:
queue(); //初始化队列
~queue(); //销毁队列
bool empty() const; //判断队列是否为空
int length() const; //返回队列的长度
ElemType gethead() throw(out_of_range); //返回队列的队首元素
void push_back(ElemType e); //插入元素到队尾
ElemType pop_front() throw(out_of_range); //删除队头元素
private:
class qnode
{
public:
ElemType data;
qnode *next;
};
qnode *front;
qnode* rear;
int size;
};
template<class ElemType>
queue<ElemType>::queue() : size(0)
{
front = rear = new qnode;
front -> next = NULL;
}
template<class ElemType>
queue<ElemType>::~queue()
{
while(front)
{
rear = front -> next;
delete front;
front = rear;
}
}
template<class ElemType>
bool queue<ElemType>::empty() const
{
return size == 0;
}
template<class ElemType>
int queue<ElemType>::length() const
{
return size;
}
template<class ElemType>
ElemType queue<ElemType>::gethead() throw(out_of_range)
{
if(empty())
throw("queue is empty");
return front -> next -> data;
}
template<class ElemType>
void queue<ElemType>::push_back(ElemType e)
{
qnode *p = new qnode;
p -> data = e;
p -> next = NULL;
rear -> next = p;
rear = p;
++size;
}
template<class ElemType>
ElemType queue<ElemType>::pop_front() throw(out_of_range)
{
if(empty())
throw("queue is empty");
qnode *p;
p = front -> next;
front -> next = p -> next;
if(rear == p)
rear = front;
ElemType e = p -> data;
delete p;
--size;
return e;
}
}
int main()
{
return 0;
}
#include <iostream>
#include <stdexcept>
using namespace std;
template<class ElemType>
class cqueue
{
public:
cqueue(); //初始化循环队列
~cqueue(); //销毁循环队列
void push_back(ElemType e) throw(out_of_range);//插入元素到队尾
ElemType pop_front() throw(out_of_range); //删除队头元素并返回其值
ElemType get_front() throw(out_of_range); //返回队头元素
bool empty() const; //判断队列是否为空
int length() const; //返回队列的长度
private:
static const int maxqsize = 100; //最大队列长度
class sqQueue
{
public:
ElemType *base; //初始化的动态分配储存空间
int front; //头指针,若队列不空,指向队列头元素
int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置
};
int len;
sqQueue Q;
};
template<class ElemType>
cqueue<ElemType>::cqueue() : len(0)
{
Q.base = new ElemType[maxqsize];
Q.front = Q.rear = 0;
}
template<class ElemType>
cqueue<ElemType>::~cqueue()
{
delete [] Q.base;
len = 0;
Q.front = Q.rear = 0;
}
template<class ElemType>
void cqueue<ElemType>::push_back(ElemType e) throw(out_of_range)
{
if(len == maxqsize - 1)
throw("the queue is full");
Q.base[Q.rear + 1] = e;
Q.rear = (Q.rear + 1) % maxqsize;
++len;
}
template<class ElemType>
ElemType cqueue<ElemType>::pop_front() throw(out_of_range)
{
if(empty())
throw("queue is empty");
Q.front = (Q.front + 1) % maxqsize;
--len;
return Q.base[Q.front];
}
template<class ElemType>
ElemType cqueue<ElemType>::get_front() throw(out_of_range)
{
if(empty())
throw("queue is empty");
return Q.base[Q.front];
}
template<class ElemType>
bool cqueue<ElemType>::empty() const
{
return (len == 0);
}
template<class ElemType>
int cqueue<ElemType>::length() const
{
return len;
}
int main()
{
return 0;
}
转载于:https://my.oschina.net/u/196018/blog/383802