#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
using namespace std;
template<typename Type>
class Queue;
template<typename Type>
class QueueItem{
public:
QueueItem(const Type&);
friend class Queue<Type>; //声明为友元才能访问私有元素item和next
private:
Type item;
QueueItem *next;
};
template<typename Type>
QueueItem<Type>::QueueItem(const Type& t):item(t)
{
next = 0;
}
template<typename Type>
class Queue{
public:
Queue():front(0),back(0),_size(0){}
~Queue();
Type& remove();
void add(const Type&);
bool is_empty(){
return front == 0;
}
int size(){
return _size;
}
private:
QueueItem<Type> *front,*back;
int _size;
};
template<typename Type>
Queue<Type>::~Queue()
{
while(!is_empty())
{
remove();
_size--;
}
}
template<typename Type>
void Queue<Type>::add(const Type& val)
{
QueueItem<Type> *pt = new QueueItem<Type>(val);
if(is_empty())
{
front = back = pt; //front指向队首
}
else
{
back->next = pt; //back始终指向队尾,在队尾添加元素
back = pt;
}
_size++;
}
template<typename Type>
Type& Queue<Type>::remove()
{
if(is_empty())
{
cerr << "Error in remove() in Queue.h" <<endl;
exit(-1);
}
QueueItem<Type>* pt = front;//先进先出
front = front->next;
Type val = pt->item;
delete pt;
_size--;
return val;
}
#endif
队列的更好的实现方法(链式结构)
最新推荐文章于 2024-03-29 19:54:57 发布