队列的链接存储结构---链队列

来源:互联网 发布: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;}