程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 隊列的鏈接存儲結構——鏈隊列 圖解和代碼實現

隊列的鏈接存儲結構——鏈隊列 圖解和代碼實現

編輯:C++入門知識

隊列的鏈接存儲結構——鏈隊列  圖解:    

\

 

\

    LinkQueue.h [cpp]   //LinkQueue.h   #ifndef LINKQUEUE_H   #define LINKQUEUE_H      template <class T>   struct Node   {         T data;         Node<T> *next;  //此處<T>也可以省略   };      template <class T>   class LinkQueue   {   public:       LinkQueue( );          //構造函數,初始化一個空的鏈隊列       ~LinkQueue( );      //析構函數,釋放鏈隊列中各結點的存儲空間       void EnQueue(T x);  //將元素x入隊       T DeQueue( );       //將隊頭元素出隊       T GetQueue( );     //取鏈隊列的隊頭元素       bool Empty( );     //判斷鏈隊列是否為空   private:       Node<T> *front, *rear;  //隊頭和隊尾指針,分別指向頭結點和終端結點   };      #endif;         LinkQueue.cpp [cpp]   //LinkQueue.cpp   #include "LinkQueue.h"      /*   * 前置條件:隊列不存在   * 輸    入:無   * 功    能:初始化隊列   * 輸    出:無   * 後置條件:創建一個空隊列   */      template <class T>   LinkQueue<T>::LinkQueue( )   {       Node <T> *s;       s=new Node<T>;       s->next=NULL;       front=rear=s;   }      /*   * 前置條件:隊列存在   * 輸    入:無   * 功    能:銷毀隊列   * 輸    出:無   * 後置條件:釋放隊列所占用的存儲空間   */      template <class T>   LinkQueue<T>::~LinkQueue( )   {       while(front)       {           Node <T> *p;           p=front->next;           delete front;           front=p;       }   }      /*   * 前置條件:隊列已存在   * 輸    入:元素值s   * 功    能:在隊尾插入一個元素   * 輸    出:無   * 後置條件:如果插入成功,隊尾增加了一個元素   */      template <class T>    void LinkQueue<T>::EnQueue(T x)   {       Node<T> *s;       s=new Node<T>;        s->data=x;          //申請一個數據域為x的結點s       s->next=NULL;       rear->next=s;       //將結點s插入到隊尾       rear=s;   }      /*   * 前置條件:隊列已存在   * 輸    入:無   * 功    能:刪除隊頭元素   * 輸    出:如果刪除成功,返回被刪元素值,否則,拋出刪除異常   * 後置條件:如果刪除成功,隊頭減少了一個元素   */      template <class T>   T LinkQueue<T>::DeQueue()   {           Node <T> *p; int x;       if (rear==front) throw "下溢";       p=front->next;        x=p->data;                       //暫存隊頭元素       front->next=p->next;             //將隊頭元素所在結點摘鏈       if (p->next==NULL) rear=front;   //判斷出隊前隊列長度是否為1       delete p;       return x;   }      /*   * 前置條件:隊列已存在   * 輸    入:無   * 功    能:讀取隊頭元素   * 輸    出:若隊列不空,返回隊頭元素   * 後置條件:隊列不變   */      template <class T>    T LinkQueue<T>::GetQueue()   {       if (front!=rear)            return front->next->data;   }      /*   * 前置條件:隊列已存在   * 輸    入:無   * 功    能:判斷隊列是否為空   * 輸    出:如果隊列為空,返回1,否則,返回0   * 後置條件:隊列不變   */      template <class T>    bool LinkQueue<T>::Empty( )   {       if(front==rear)            return 1;       else            return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved