生活随笔
收集整理的這篇文章主要介紹了
(C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
http://blog.csdn.net/fisherwan/article/details/25649073
? 鏈表(三)實現(xiàn)雙向鏈表操作,代碼如下:
[cpp]?view plain
?copy <span?style="font-size:18px;"?deep="5">#include?<iostream>?? #include?<stdio.h>?? using?namespace?std;?? ?? ?? class?Node?{?? public:?? ????int?data;?? ????Node?*pPre,?*pNext;?? };?? ?? ?? class?DoubleLinkList?{?? public:?? ????DoubleLinkList()?{?? ????????head?=?new?Node;?? ????????head->data?=?0;?? ????????head->pNext?=?NULL;?? ????????head->pPre?=?NULL;?? ????}?? ????~DoubleLinkList()?{delete?head;}?? ????void?CreateLinkList(int?n);??????????????? ????void?InsertNode(int?position,?int?d);????? ????void?TraverseLinkList();?????????????????? ????bool?IsEmpty();??????????????????????????? ????int?GetLength();?????????????????????????? ????void?DeleteNode(int?position);???????????? ????void?DeleteLinkList();???????????????????? private:?? ????Node?*head;?? };?? ?? void?DoubleLinkList::CreateLinkList(int?n)?{?? ????if?(n?<?0)?{?? ????????cout?<<?"輸入結(jié)點個數(shù)錯誤!"?<<?endl;?? ????????exit(EXIT_FAILURE);?? ????}?? ????else?{???? ????????int?i?=?0;?? ????????Node?*pnew,?*ptemp;?? ????????ptemp?=?head;?? ????????i?=?n;?? ????????while?(n--?>?0)?{?? ????????????cout?<<?"請輸入第"?<<?i?-?n?<<?"個結(jié)點值:";?? ????????????pnew?=?new?Node;?? ????????????cin?>>?pnew->data;?? ????????????pnew->pNext?=?NULL;?? ????????????pnew->pPre?=?ptemp;?? ????????????ptemp->pNext?=?pnew;?? ????????????ptemp?=?pnew;?? ????????}????????? ????}?? }?? ?? void?DoubleLinkList::InsertNode(int?position,?int?d)?{?? ????if?(position?<?0?||?position?>?GetLength()?+?1){?? ????????cout?<<?"輸入位置錯誤!"?<<?endl;?? ????????exit(EXIT_FAILURE);?? ????}?? ????else?{?? ????????Node?*pnew,?*ptemp;?? ????????pnew?=?new?Node;?? ????????pnew->data?=?d;?? ????????ptemp?=?head;?? ?? ????????while?(position--?>?1)?? ????????????ptemp?=?ptemp->pNext;?? ?? ????????if?(ptemp->pNext?!=?NULL)?? ????????????ptemp->pNext->pPre?=?pnew;?? ????????pnew->pNext?=?ptemp->pNext;?? ????????pnew->pPre?=?ptemp;?? ????????ptemp->pNext?=?pnew;?? ????????ptemp?=?pnew;?? ????}?? }?? ?? void?DoubleLinkList::TraverseLinkList()?{?? ????Node?*ptemp?=?head->pNext;?? ????while?(ptemp?!=?NULL)?{?? ????????cout?<<?ptemp->data?<<?"?";?? ????????ptemp?=?ptemp->pNext;?? ????}?? ????cout?<<?endl;?? }?? ?? bool?DoubleLinkList::IsEmpty()?{?? ????if?(head->pNext?==?NULL)?? ????????return?true;?? ????else?? ????????return?false;?? }?? ?? int?DoubleLinkList::GetLength()?{?? ????int?n?=?0;?? ????Node?*ptemp?=?head->pNext;?? ????while?(ptemp?!=?NULL)?{?? ????????n++;?? ????????ptemp?=?ptemp->pNext;?? ????}?? ????return?n;?? }?? ?? void?DoubleLinkList::DeleteNode(int?position)?{?? ????if?(position?<?0?||?position?>?GetLength())?{?? ????????cout?<<?"輸入數(shù)據(jù)錯誤!"?<<?endl;?? ????????exit(EXIT_FAILURE);?? ????}?? ????else?{?? ????????Node?*pdelete,?*ptemp;?? ????????ptemp?=?head;?? ?? ????????while?(position--?>?1)?? ????????????ptemp?=?ptemp->pNext;?? ????????pdelete?=?ptemp->pNext;?? ????????if?(pdelete->pNext?!=?NULL)?? ????????????pdelete->pNext->pPre?=?ptemp;?? ????????ptemp->pNext?=?pdelete->pNext;?? ????????delete?pdelete;?? ????????pdelete?=?NULL;?? ????}?? }?? ?? void?DoubleLinkList::DeleteLinkList()?{?? ????Node?*pdelete,?*ptemp;?? ????pdelete?=?head->pNext;?? ????while?(pdelete?!=?NULL)?{?? ????????ptemp?=?pdelete->pNext;?? ????????head->pNext?=?ptemp;?? ????????if?(ptemp?!=?NULL)?? ????????????ptemp->pPre?=?head;?? ????????delete?pdelete;?? ????????pdelete?=?ptemp;?? ????}?? }?? ?? ?? int?main()?{?? ????DoubleLinkList?dl;?? ????int?position?=?0,?value?=?0,?n?=?0;?? ????bool?flag?=?false;?? ?? ????cout?<<?"請輸入需要創(chuàng)建雙向鏈表的結(jié)點個數(shù):";?? ????cin?>>?n;?? ????dl.CreateLinkList(n);?? ?? ????cout?<<?"打印鏈表值如下:";?? ????dl.TraverseLinkList();?? ?? ????cout?<<?"請輸入插入結(jié)點的位置和值:";?? ????cin?>>?position?>>?value;?? ????dl.InsertNode(position,?value);?? ?????? ????cout?<<?"打印鏈表值如下:";?? ????dl.TraverseLinkList();?? ?? ????cout?<<?"請輸入要刪除結(jié)點的位置:";?? ????cin?>>?position;?? ????dl.DeleteNode(position);?? ?? ????cout?<<?"打印鏈表值如下:";?? ????dl.TraverseLinkList();?? ?? ????dl.DeleteLinkList();?? ????flag?=?dl.IsEmpty();?? ????if?(flag)?? ????????cout?<<?"刪除鏈表成功!"?<<?endl;?? ????else?? ????????cout?<<?"刪除鏈表失敗!"?<<?endl;?? ?? ????return?0;?? }</span>??
總結(jié)
以上是生活随笔為你收集整理的(C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。