C++資料結構 13鏈式佇列
阿新 • • 發佈:2018-12-16
先進先出
#ifndef _QueenList_H__ #define _QueenList_H__ template <class T> class Queue{ public: Queue(); ~Queue(); bool IsEmpty() const; const T& GetFront()const; //得到隊首資料 T dequeue(); //刪除隊尾資料 void enqueue(const T& e); //入隊尾佇列 void MakeEmpty(); private: struct ListNode { T element; //節點資料 ListNode *next; //節點指標 ListNode(const T& e,ListNode *n=0):element(e),next(n) {} }; ListNode *Front; //一個前指標 ListNode *Back; //一個後指標 }; template <class T> Queue<T>::Queue() //建構函式 { Front=Back=0; } template <class T> //解構函式 Queue<T>::~Queue() { MakeEmpty(); } template <class T> void Queue<T>::MakeEmpty() //清空 { } template <class T> bool Queue<T>::IsEmpty() const//是否為空 { return Front==0; //判斷隊首是否為0 } template <class T> const T& Queue<T>::GetFront()const //得到隊首資料 { if(IsEmpty()) throw "Queue is Empty"; return Front->element; } template <class T> void Queue<T>::enqueue(const T& e)//入隊尾 { if(IsEmpty()) Front=Back=new ListNode(e); //如果資料為空 插入一個數據 兩個指標指向同一個數 else Back=Back->next=new ListNode(e); //back向後移動一個 } template<class T> T Queue<T>::dequeue() //出佇列 { if(IsEmpty()) throw "Queue is Empty"; T FrontItem=GetFront(); ListNode *temp=Front; Front=Front->next; delete temp; //刪除temp 對應的new return FrontItem; } #endif // _QueenList_H__
#include <iostream> #include "QueenList.h" using namespace std; int main() { Queue<int> q; q.enqueue(10); q.enqueue(11); q.enqueue(12); q.enqueue(13); cout<<q.GetFront()<<endl; cout<<q.dequeue()<<endl; cout<<q.dequeue()<<endl; cout<<q.dequeue()<<endl; cout<<q.dequeue()<<endl; // cout << "Hello world!" << endl; return 0; }