雙向鏈表(C++)

來源:互聯網
上載者:User

下面是繼續寫的資料結構中雙向鏈表的類(還有部分有些問題,待將所有的資料結構實現之後統一測試和修改)(記得未測試哦。)

//公元2013年3月17日//Single List--By Paul#ifndef _DoubleList_#define _DoubleList_#include<iostream>using namespace std;template<typename Type> class DoubleList;//結點類template<typename Type> class ListNode{private: Type data; ListNode *Previous; ListNode *Next;private:friend class DoubleList<Type>;ListNode():Previous(NULL),Next(NULL){}ListNode(const Type item,ListNode<Type> *Pprevious=NULL,ListNode<Type> *Nnext=NULL):data(item),Prevoius(Pprevious),Next(Nnext){}~ListNode(){Previous=NULL;Next=NULL;}public:Type GetData();};template<typename Type> Type ListNode<Type>:: GetData(){return this.data;}//雙鏈表類template<typename Type> class DoubleList{private:ListNode<Type> *head;public:DoubleList():head(new ListNode<Type>()){head->Previous=head;head->Neat=head;}~DoubleList(){MakeEmaty();delete head;}public:void MakeEmpty();  // make the List Emptyint Length();ListNode<Type> *Find(int n=0);   //尋找第n個數的值ListNode<Type> *FindData(Type item);bool Insert(Type item,int n=0); //插入Type Remove(int n=0);Type Get(int n=0);void Print();};//函數的實現template<typename Type> void DoubleList<Type>::MakeEmpty(){ListNode<Type> *pmove=head->Next;ListNode<Type> *pdel;while(pmove!=head){pdel=pmove;pmove=pdel->Next;delete pdel;}head->Next=head;head->Previous=head;}template<typename Type> int DoubleList<Type>::Length(){ListNode<Type> *Pprevious=head->Previous,*Nnext=head->Next;int count=0;while(1){if(Pprevious->Next==Nnext){break;}if(Pprevious==Nnext&&Pprevious!=head){count++;break;}count+=2;Pprevious=Pprevious->Previous;Nnext=Nnext->Next;}return count;}template<typename Type> ListNode<Type>* DoubleList<Type>::Find(int n=0){if(n<0){cout<<"需要尋找的數值不存在"<<endl;return NULL;}ListNode<Type> *pmove=head->Next;for(int i=0;i<n;i++){pmove=pmove->Next;if(pmove==head){cout<<"需要尋找的數值不存在"<<endl;return NULL;}}return pmove;}template<typename Type> bool DoubleList<Type>::Insert(Type item,int n){if(n<0){cout<<"你的實如不合法"<<endl;return 0;}ListNode<Type> *newnode=new ListNode<Type>(item),*pmove=head;if(newnode==NULL){cout<<"Application Error"<<endl;exit(1);}for(int i=0;i<n;i++){pmove=pmove->Next;if(pmove==head){cout<<"this is out of boundry"<<endl;return 0;}}//插入資料newnode->Next=pmove->Next;newnode->Previous=pmove;pmove->Next=newnode;newnode->Next->Previous=newnode;return 1;}template<typename Type> Type DoubleList<Type>::Remove(int n=0){if(n<0){cout<<"This n is out of boundry"<<endl;exit(1);}ListNode<Type> *pmove=head,*pdel;for(int i=0;i<n;i++){pmove=pmove->Next;if(pmove==head){cout<<"the n is out of boundry"<<endl;exit(1);}}//刪除資料pdel=pmove;pmove->Previous->Next=pdel->Next;pmove->Next->Previous=pdel->Previous;Type temp=pdel->data;delete pdel;return temp;}template<typename Type> Type DoubleList<Type>::Get(int n=0){if(n<0){cout<<"this n is out of boundry"<<endl;exit(1);}ListNode<Type> *pmove=head;for(int i=0;i<n;i++){pmove=pmove->Next;if(pmove==head){cout<<"the n is out of boundry"<<endl;exit(1);}}return pmove->data;}template<typename Type> void DoubleList<Type>::Print(){ListNode<Type> *pmove=head->Next;cout<<"head";while(pmove!=head){cout<<"----->"<<pmove->data;pmove=pmove->Next;}cout<<"----->over"<<endl<<endl;}template<typename Type> ListNode<Type>* DoubleList<Type>::FindData(Type item){ListNode<Type> *Pprevious=head->Previous,*Nnext=head->Next;while(Pprevious->Next!=Nnext&&Pprevious!=Nnext){if(Pprevious->data==item){return Pprevious;}if(Nnext->data==item){return Nnext;}Pprevious=Pprevious->Previous;Nnext=Nnext->Next;}cout<<"Can't find the elelment"<<endl;return NULL;}#endif

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.