队列的链接存储结构---链队列
来源:互联网 发布:mac pink you think 编辑:程序博客网 时间:2024/06/13 05:18
#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;}