基於連結串列的雙端佇列的類模板的C++實現
阿新 • • 發佈:2019-01-30
/* 用連結串列實現雙端佇列(儲存整型) 該佇列有以下幾個功能 1.Createdeque輸入n個元素來初始化佇列 2.cleardeque清空整個佇列 3.f_inde(T e)在隊首插入元素e 4.f_outde()隊首元素出隊 5.l_inde(T e)在隊尾插入元素e 6.l_outde隊尾元素出隊 7.empty檢測佇列是否為空 8.length輸出並返回佇列長度 9.display列印從隊首到隊尾的每一元素 該佇列有以下成員: 1.fp隊首指標 2.lp隊尾指標 3.len佇列長度 by chczy 2017/10/16 21:34 */ #include<iostream> #include<algorithm> #include<new> using namespace std; template<class T> struct node { node* nx; node* pr; T data; }; template<class T> class linkdeque { public: linkdeque();//構造空佇列 ~linkdeque() { cout << "destroy the deque!" << endl; }; node<T>* Createdeque(int n);//構造長度為n的佇列 void cleardeque();//清空佇列 node<T>* f_inde(T e);//在隊首插入元素e node<T>* f_outde();//隊首元素出隊 node<T>* l_inde(T e);//在隊尾插入元素e node<T>* l_outde();//隊尾元素出隊 bool empty();//檢測佇列是否為空 int length();//返回佇列長度 void display();//遍歷並列印佇列元素 private: node<T>* fp;//front pointer node<T>* lp;//rare pointer int len; }; template<class T> linkdeque<T>::linkdeque() { fp = NULL; lp = NULL; len = 0; } template<class T> node<T>* linkdeque<T>::Createdeque(int n) { len = n; node<T> *L = new node<T>; L->nx = NULL; L->pr = NULL; node<T> *h = new node<T>; cin >> h->data; L->nx = h; h->pr = L; h->nx = NULL; fp = h; int i = n-1; n -= 1; node<T> *prev; prev = h; while (n--) { node<T> *p = new node<T>; cin >> p->data; prev->nx = p; p->pr = prev; p->nx = NULL; prev = p; if (n == 0) lp = p; } return fp; } template<class T> void linkdeque<T>::cleardeque() { while (!empty()) l_outde(); } template<class T> node<T>* linkdeque<T>::f_inde(T e) { node<T>* p=new node<T>; p->data = e; p->nx = fp; fp->pr = p; p->pr = NULL; fp = p; ++len; return fp; } template<class T> node<T>* linkdeque<T>::f_outde() { node<T> *p = fp; node<T> *s = p->nx; s->pr = NULL; fp = s; delete p; --len; return fp; } template<class T> node<T>* linkdeque<T>::l_inde(T e) { node<T>* p = new node<T>; p->data = e; p->pr = lp; lp->nx = p; p->nx = NULL; lp = p; ++len; return lp; } template<class T> node<T>* linkdeque<T>::l_outde() { node<T> *p=lp; node<T> *s = p->pr; s->nx = NULL; lp = s; delete p; --len; return p; } template<class T> bool linkdeque<T>::empty() { if (len == 0) return 1; else return 0; } template<class T> int linkdeque<T>::length()//列印並返回佇列的長度 { cout << "佇列的長度是:" << endl; cout << len << endl; return len; } template<class T> void linkdeque<T>::display() { if (len == 0) { cout << "no elem!" << endl; return; } int i = 0; node<T> *p = fp; cout << "佇列長為" << len << endl; cout << "佇列中的元素為: "; while (i != len) { cout << p->data << " "; p = p->nx; ++i; } cout << endl; }