链队

来源:互联网 发布:color finale mac 编辑:程序博客网 时间:2024/06/05 08:07

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

LinkQueue.h具体内容如下:

[cpp] view plaincopy
  1. #include "QueueNode.h"  
  2. template<typename Type> class LinkQueue{  
  3. public:  
  4.     LinkQueue() :m_prear(NULL), m_pfront(NULL){}  
  5.     ~LinkQueue(){  
  6.         MakeEmpty();  
  7.     }  
  8.     void Append(const Type item);   //insert data  
  9.     Type Delete();                  //delete data  
  10.     Type GetFront();                //get data  
  11.     void MakeEmpty();               //make the queue empty  
  12.     void Print();                   //print the queue  
  13.   
  14.     bool IsEmpty() const{  
  15.         return m_pfront == NULL;  
  16.     }  
  17.   
  18. private:  
  19.     QueueNode<Type> *m_prear, *m_pfront;  
  20. };  
  21.   
  22. template<typename Type> void LinkQueue<Type>::MakeEmpty(){  
  23.     QueueNode<Type> *pdel;  
  24.     while (m_pfront){  
  25.         pdel = m_pfront;  
  26.         m_pfront = m_pfront->m_pnext;  
  27.         delete pdel;  
  28.     }  
  29. }  
  30.   
  31. template<typename Type> void LinkQueue<Type>::Append(const Type item){  
  32.     if (m_pfront == NULL){  
  33.         m_pfront = m_prear = new QueueNode<Type>(item);  
  34.     }  
  35.     else{  
  36.         m_prear = m_prear->m_pnext = new QueueNode<Type>(item);  
  37.     }  
  38. }  
  39.   
  40. template<typename Type> Type LinkQueue<Type>::Delete(){  
  41.     if (IsEmpty()){  
  42.         cout << "There is no element!" << endl;  
  43.         exit(1);  
  44.     }  
  45.     QueueNode<Type> *pdel = m_pfront;  
  46.     Type temp = m_pfront->m_data;  
  47.     m_pfront = m_pfront->m_pnext;  
  48.     delete pdel;  
  49.     return temp;  
  50. }  
  51.   
  52. template<typename Type> Type LinkQueue<Type>::GetFront(){  
  53.     if (IsEmpty()){  
  54.         cout << "There is no element!" << endl;  
  55.         exit(1);  
  56.     }  
  57.     return m_pfront->m_data;  
  58. }  
  59.   
  60. template<typename Type> void LinkQueue<Type>::Print(){  
  61.     QueueNode<Type> *pmove = m_pfront;  
  62.     cout << "front";  
  63.     while (pmove){  
  64.         cout << "--->" << pmove->m_data;  
  65.         pmove = pmove->m_pnext;  
  66.     }  
  67.     cout << "--->rear" << endl << endl << endl;  
  68. }  
QueueNode.h具体内容如下:

[cpp] view plaincopy
  1. template<typename Type> class LinkQueue;  
  2.   
  3. template<typename Type>   
  4. class QueueNode  
  5. {  
  6. private:  
  7.     friend class LinkQueue < Type > ;  
  8.     QueueNode(const Type item, QueueNode<Type> *next = NULL)  
  9.         :m_data(item), m_pnext(next){}  
  10. private:  
  11.     Type m_data;  
  12.     QueueNode<Type> *m_pnext;  
  13. };  
main.cpp具体内容如下:

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

图1 运行效果

0 0