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