写在前面:本篇介绍用C++的模板类来实现一个动态链表
链表的结构:
代码、注释、运行结果
#include <iostream>
using namespace std;
template <class Object>
class Queue
{
public:
Queue(); //构造函数
~Queue(); //析构函数
bool isEmpty(); //判断queue是否为空
void makeEmpty(); //清空queue
Object getFront(); //获取队首内容
void enqueue(const Object &obj); //进入队列尾部
Object dequeue(); //从头部删除一个node
private:
struct linkNode
{
Object element;
linkNode *next;
linkNode(Object ele, linkNode *p = NULL) :element(ele), next(p) {};
};
linkNode *front;
linkNode *back;
};
template <class Object>
Queue<Object>::Queue()
{
front = back = NULL;
}
template <class Object>
Queue<Object>::~Queue()
{
makeEmpty();
}
template <class Object>
bool Queue<Object>::isEmpty()
{
return front == NULL;
}
template <class Object>
void Queue<Object>::enqueue(const Object &obj)
{
if (isEmpty())
{
front = back = new linkNode(obj);
}
else
{
back = back->next = new linkNode(obj);
}
}
template<class Object>
Object Queue<Object>::dequeue()
{
if (isEmpty()) throw "queue is empty";
Object obj = getFront();
linkNode *oldFront = front;
front = front->next;
delete oldFront;
return obj;
}
template<class Object>
Object Queue<Object>::getFront()
{
if (isEmpty()) throw "queue is empty";
return front->element;
}
template <class Object>
void Queue<Object>::makeEmpty()
{
while (!isEmpty())
dequeue();
}
int main()
{
Queue<char> myQ1;
Queue<int> myQ2;
myQ1.enqueue('A');
myQ1.enqueue('B');
myQ1.enqueue('C');
cout << myQ1.getFront() << endl;
myQ1.dequeue();
cout << myQ1.getFront() << endl;
for (int i = 0; i < 8; i++)
myQ2.enqueue(i);
cout << endl << endl;
for (int i = 0; i < 8; i++)
{
cout << myQ2.getFront() << endl;
myQ2.dequeue();
}
return 0;
}
运行结果: