#include <iostream> using namespace std; const int QueueSize = 100; template <class DataType> struct Node { DataType data[QueueSize]; Node* next; }; template <class DataType> class LinkQueue { private: Node* front, *rear; public: LinkQueue(); ///构造函数,初始化一个空的链队列 ~LinkQueue(); /// 析构函数,释放链队列中各节点的存储空间 void EnQueue(DataType x); ///入队操作,将元素x入队 DataType DeQueue(); ///出队操作,将队头元素出队 DataType GetQueue() { return front->data; } ///取链队列的队头元素 int Empty() { if (front == rear) return 1; else return 0; } ///判断链队列是否为空 }; template <class DataType> LinkQueue<DataType>::LinkQueue() { Node* s; s = new Node; s->next = NULL; /// 创建一个头结点s front = rear = s; ///将队头指针和队尾指针都指向头结点s } template <class DataType> LinkQueue<DataType>::~LinkQueue() { Node* p, *q; p = front; while (p) { q = p; p = p->next; delete q; } } template <class DataType> void LinkQueue<DataType>::EnQueue(DataType x) { Node* s; s = new Node; s->data = x; ///申请一个数据域为x的结点s s->next = NULL; rear->next = NULL; ///将结点s插入队尾 rear = s; } template <class DataType> DataType LinkQueue<DataType>::DeQueue() { if (front == rear) throw "下溢"; Node* p; p = front->next; x = p->data; ///暂存队头元素 front->next = p->next; ///将队头元素所在结点摘链 if (p->next == NULL) rear = front; ///判断出队前队列长度是否为1 delete p; return x; } int main() { return 0; }