日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

(C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作

發布時間:2023/11/30 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/fisherwan/article/details/25649271

?鏈表(四)實現雙向循環鏈表簡單操作,代碼如下:

[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?<<?"輸入結點個數錯誤!"?<<?endl;??
  • ????????exit(EXIT_FAILURE);??
  • ????}??
  • ????else?{??
  • ????????int?i?=?0;??
  • ????????Node?*pnew,?*ptemp;??
  • ????????ptemp?=?head;??
  • ????????i?=?n;??
  • ??
  • ????????while?(n--?>?0)?{??
  • ????????????pnew?=?new?Node;??
  • ????????????cout?<<?"輸入第"?<<?i?-?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?<<?"輸入位置錯誤!"?<<?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?<<?"輸入位置錯誤!"?<<?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?<<?"請輸入需要創建雙向循環鏈表的結點個數:";??
  • ????cin?>>?n;??
  • ????dcl.CreateLinkList(n);??
  • ??
  • ????cout?<<?"打印鏈表值如下:";??
  • ????dcl.TraverseLinkList();??
  • ??
  • ????cout?<<?"請輸入插入結點的位置和值:";??
  • ????cin?>>?position?>>?value;??
  • ????dcl.InsertNode(position,?value);??
  • ??????
  • ????cout?<<?"打印鏈表值如下:";??
  • ????dcl.TraverseLinkList();??
  • ??
  • ????cout?<<?"請輸入要刪除結點的位置:";??
  • ????cin?>>?position;??
  • ????dcl.DeleteNode(position);??
  • ??
  • ????cout?<<?"打印鏈表值如下:";??
  • ????dcl.TraverseLinkList();??
  • ??
  • ????dcl.DeleteLinkList();??
  • ????flag?=?dcl.IsEmpty();??
  • ????if?(flag)??
  • ????????cout?<<?"刪除鏈表成功!"?<<?endl;??
  • ????else??
  • ????????cout?<<?"刪除鏈表失敗!"?<<?endl;??
  • ??
  • ????return?0;??
  • }</span>??


  • 總結

    以上是生活随笔為你收集整理的(C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。