链队

来源:互联网 发布:网络不稳定怎么回事 编辑:程序博客网 时间:2024/05/16 00:53

    今天,我们一起用C++写一个链对,具体如下所示。

LinkQueue.h具体内容如下:

#include "QueueNode.h"template<typename Type> class LinkQueue{public:LinkQueue() :m_prear(NULL), m_pfront(NULL){}~LinkQueue(){MakeEmpty();}void Append(const Type item);   //insert dataType Delete();                  //delete dataType GetFront();                //get datavoid MakeEmpty();               //make the queue emptyvoid Print();                   //print the queuebool IsEmpty() const{return m_pfront == NULL;}private:QueueNode<Type> *m_prear, *m_pfront;};template<typename Type> void LinkQueue<Type>::MakeEmpty(){QueueNode<Type> *pdel;while (m_pfront){pdel = m_pfront;m_pfront = m_pfront->m_pnext;delete pdel;}}template<typename Type> void LinkQueue<Type>::Append(const Type item){if (m_pfront == NULL){m_pfront = m_prear = new QueueNode<Type>(item);}else{m_prear = m_prear->m_pnext = new QueueNode<Type>(item);}}template<typename Type> Type LinkQueue<Type>::Delete(){if (IsEmpty()){cout << "There is no element!" << endl;exit(1);}QueueNode<Type> *pdel = m_pfront;Type temp = m_pfront->m_data;m_pfront = m_pfront->m_pnext;delete pdel;return temp;}template<typename Type> Type LinkQueue<Type>::GetFront(){if (IsEmpty()){cout << "There is no element!" << endl;exit(1);}return m_pfront->m_data;}template<typename Type> void LinkQueue<Type>::Print(){QueueNode<Type> *pmove = m_pfront;cout << "front";while (pmove){cout << "--->" << pmove->m_data;pmove = pmove->m_pnext;}cout << "--->rear" << endl << endl << endl;}
QueueNode.h具体内容如下:

template<typename Type> class LinkQueue;template<typename Type> class QueueNode{private:friend class LinkQueue < Type > ;QueueNode(const Type item, QueueNode<Type> *next = NULL):m_data(item), m_pnext(next){}private:Type m_data;QueueNode<Type> *m_pnext;};
main.cpp具体内容如下:

#include <iostream>using namespace std;#include "LinkQueue.h"int main(){LinkQueue<int> queue;int init[10] = { 1, 3, 6, 8, 9, 2, 0, 5, 4, 7 };for (int i = 0; i < 10; i++){queue.Append(init[i]);}queue.Print();queue.Delete();queue.Print();cout << queue.GetFront() << endl;queue.Print();queue.MakeEmpty();queue.Print();queue.Delete();cin.get();return 0;}
运行效果如图1所示:

图1 运行效果

0 0