队列——链式存储结构及其基本运算

来源:互联网 发布:mac 删除文件夹 编辑:程序博客网 时间:2024/05/16 17:58

该文章主要介绍队列的链式存储结构以及相关运算。

头文件:LinkQueue.h

template <typename T>struct LinkNode//链队数据结点类型{T data;//结点数据域LinkNode *next;//指向下一个结点};template <typename T>struct LinkQueue//链队结点类型{LinkNode<T> *front;//指向队头结点LinkNode<T> *rear;//指向队尾结点};template <typename T>class LinkQueueClass//链队类模板{LinkQueue<T> *Q;//链队结点Qpublic://=================链队基本运算算法============================LinkQueueClass();//构造函数~LinkQueueClass();//析构函数bool QueueEmpty();//判断队列是否为空void enQueue(T e);//进队算法bool deQueue(T &e);//出队算法};

源文件:LinkQueue.cpp

#include <iostream>#include "LinkQueue.h"//=================链队基本运算算法============================template <typename T>LinkQueueClass<T>::LinkQueueClass()//构造函数{Q = new LinkQueue<T>();Q->front = NULL;Q->rear = NULL;}template <typename T>LinkQueueClass<T>::~LinkQueueClass()//析构函数{LinkNode<T> *pre = Q->front, *p;if (pre != NULL){if (pre == Q->rear)delete pre;else{p = pre->next;while (p != NULL){delete pre;pre = p;p = p->next;}delete pre;}delete Q;}}template <typename T>bool LinkQueueClass<T>::QueueEmpty()//判断队列是否为空{return(Q->rear == NULL);}template <typename T>void LinkQueueClass<T>::enQueue(T e)//进队算法{LinkNode<T> *p = new LinkNode<T>();p->data = e;p->next = NULL;if (Q->rear == NULL)Q->front = Q->rear = p;else{Q->rear->next = p;Q->rear = p;}}template <typename T>bool LinkQueueClass<T>::deQueue(T &e)//出队算法{LinkNode<T> *p;if (Q->rear == NULL)return false;p = Q->front;if (Q->front == Q->rear)Q->front = Q->rear = NULL;elseQ->front = Q->front->next;e = p->data;delete p;return true;}

主函数:main.cpp

#include "LinkQueue.cpp"using namespace std;//=================链队基本运算算法======================void main(){LinkQueueClass<char> lq;//定义一个字符链队lqchar e;cout << "建立一个空队lq\n";cout << "队lq" << (lq.QueueEmpty()?"空":"不空") << endl;cout << "元素a进队\n"; lq.enQueue('a');cout << "元素b进队\n"; lq.enQueue('b');cout << "元素c进队\n"; lq.enQueue('c');cout << "元素d进队\n"; lq.enQueue('d');cout << "元素e进队\n"; lq.enQueue('e');cout << "队lq" << (lq.QueueEmpty()?"空":"不空") << endl;cout << "所有元素出队次序:";while (!lq.QueueEmpty())//队不空循环{lq.deQueue(e);//出队元素ecout << e << " ";//输出元素e}cout << endl;cout << "销毁队lq" << endl;}


阅读全文
0 0