(C++版)鏈表(四)——實現雙向循環鏈表創建、插入、刪除等簡單操作

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

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

[cpp]?view plain?copy
  1. <span?style="font-size:18px;"?deep="5">#include?<iostream>??
  2. #include?<stdlib.h>??
  3. using?namespace?std;??
  4. ??
  5. //結點類??
  6. class?Node?{??
  7. public:??
  8. ????int?data;??
  9. ????Node?*pPre,?*pNext;??
  10. };??
  11. ??
  12. //雙向循環鏈表類??
  13. class?DoubleCircularLinkList?{??
  14. public:??
  15. ????DoubleCircularLinkList()?{??
  16. ????????head?=?new?Node;??
  17. ????????head->data?=?0;??
  18. ????????head->pNext?=?head;??
  19. ????????head->pPre?=?head;??
  20. ????}??
  21. ????~DoubleCircularLinkList()?{delete?head;}??
  22. ????void?CreateLinkList(int?n);??
  23. ????void?InsertNode(int?position,?int?d);??
  24. ????void?TraverseLinkList();??
  25. ????bool?IsEmpty();??
  26. ????int?GetLength();??
  27. ????void?DeleteNode(int?posiiton);??
  28. ????void?DeleteLinkList();??
  29. private:??
  30. ????Node?*head;??
  31. };??
  32. ??
  33. void?DoubleCircularLinkList::CreateLinkList(int?n)?{??
  34. ????if?(n?<?0)?{??
  35. ????????cout?<<?"輸入結點個數錯誤!"?<<?endl;??
  36. ????????exit(EXIT_FAILURE);??
  37. ????}??
  38. ????else?{??
  39. ????????int?i?=?0;??
  40. ????????Node?*pnew,?*ptemp;??
  41. ????????ptemp?=?head;??
  42. ????????i?=?n;??
  43. ??
  44. ????????while?(n--?>?0)?{??
  45. ????????????pnew?=?new?Node;??
  46. ????????????cout?<<?"輸入第"?<<?i?-?n?<<?"個結點:";???
  47. ????????????cin?>>?pnew->data;??
  48. ????????????pnew->pNext?=?head;??
  49. ????????????pnew->pPre?=?ptemp;??
  50. ????????????ptemp->pNext?=?pnew;??
  51. ????????????ptemp?=?pnew;??
  52. ????????}??
  53. ????}??
  54. }??
  55. ??
  56. void?DoubleCircularLinkList::InsertNode(int?position,?int?d)?{??
  57. ????if?(position?<?0?||?position?>?GetLength()?+?1)?{??
  58. ????????cout?<<?"輸入位置錯誤!"?<<?endl;??
  59. ????????exit(EXIT_FAILURE);??
  60. ????}??
  61. ????else?{??
  62. ????????Node?*pnew,?*ptemp;??
  63. ????????pnew?=?new?Node;??
  64. ????????pnew->data?=?d;??
  65. ????????ptemp?=?head;??
  66. ????????while?(position--?>?1)??
  67. ????????????ptemp?=?ptemp->pNext;??
  68. ????????pnew->pNext?=?ptemp->pNext;??
  69. ????????pnew->pPre?=?ptemp;??
  70. ????????ptemp->pNext?=?pnew;??
  71. ????????ptemp?=?pnew;??
  72. ????}??
  73. }??
  74. ??
  75. void?DoubleCircularLinkList::TraverseLinkList()?{??
  76. ????Node?*ptemp?=?head->pNext;??
  77. ????while(ptemp?!=?head)?{??
  78. ????????cout?<<?ptemp->data?<<?"?";??
  79. ????????ptemp?=?ptemp->pNext;??
  80. ????}??
  81. ????cout?<<?endl;??
  82. }??
  83. ??
  84. bool?DoubleCircularLinkList::IsEmpty()?{??
  85. ????if?(head?==?head->pNext)??
  86. ????????return?true;??
  87. ????else??
  88. ????????return?false;??
  89. }??
  90. ??
  91. int?DoubleCircularLinkList::GetLength()?{??
  92. ????int?n?=?0;??
  93. ????Node?*ptemp?=?head->pNext;??
  94. ????while?(ptemp?!=?head)?{??
  95. ????????n++;??
  96. ????????ptemp?=?ptemp->pNext;??
  97. ????}??
  98. ????return?n;??
  99. }??
  100. ??
  101. void?DoubleCircularLinkList::DeleteNode(int?position)?{??
  102. ????if?(position?<?0?||?position?>?GetLength())?{??
  103. ????????cout?<<?"輸入位置錯誤!"?<<?endl;??
  104. ????????exit(EXIT_FAILURE);??
  105. ????}??
  106. ????else?{??
  107. ????????Node?*pdelete,?*ptemp;??
  108. ????????ptemp?=?head;??
  109. ????????while?(position--?>?1)??
  110. ????????????ptemp?=?ptemp->pNext;??
  111. ????????pdelete?=?ptemp->pNext;??
  112. ????????ptemp->pNext?=?pdelete->pNext;??
  113. ????????pdelete->pNext->pPre?=?ptemp;??
  114. ????????delete?pdelete;??
  115. ????????pdelete?=?NULL;??
  116. ????}??
  117. }??
  118. ??
  119. void?DoubleCircularLinkList::DeleteLinkList()?{??
  120. ????Node?*pdelete,?*ptemp;??
  121. ????pdelete?=?head->pNext;??
  122. ????while?(pdelete?!=?head)?{??
  123. ????????ptemp?=?pdelete->pNext;??
  124. ????????head->pNext?=?ptemp;??
  125. ????????ptemp->pPre?=?head;??
  126. ????????delete?pdelete;??
  127. ????????pdelete?=?ptemp;??
  128. ????}??
  129. }??
  130. ??
  131. //測試函數??
  132. int?main()?{??
  133. ????DoubleCircularLinkList?dcl;??
  134. ????int?position?=?0,?value?=?0,?n?=?0;??
  135. ????bool?flag?=?false;??
  136. ??
  137. ????cout?<<?"請輸入需要創建雙向循環鏈表的結點個數:";??
  138. ????cin?>>?n;??
  139. ????dcl.CreateLinkList(n);??
  140. ??
  141. ????cout?<<?"打印鏈表值如下:";??
  142. ????dcl.TraverseLinkList();??
  143. ??
  144. ????cout?<<?"請輸入插入結點的位置和值:";??
  145. ????cin?>>?position?>>?value;??
  146. ????dcl.InsertNode(position,?value);??
  147. ??????
  148. ????cout?<<?"打印鏈表值如下:";??
  149. ????dcl.TraverseLinkList();??
  150. ??
  151. ????cout?<<?"請輸入要刪除結點的位置:";??
  152. ????cin?>>?position;??
  153. ????dcl.DeleteNode(position);??
  154. ??
  155. ????cout?<<?"打印鏈表值如下:";??
  156. ????dcl.TraverseLinkList();??
  157. ??
  158. ????dcl.DeleteLinkList();??
  159. ????flag?=?dcl.IsEmpty();??
  160. ????if?(flag)??
  161. ????????cout?<<?"刪除鏈表成功!"?<<?endl;??
  162. ????else??
  163. ????????cout?<<?"刪除鏈表失敗!"?<<?endl;??
  164. ??
  165. ????return?0;??
  166. }</span>??


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384254.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384254.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384254.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java web開發環境搭建

1.安裝并配置JDK環境&#xff08;1&#xff09;安裝過程省略&#xff08;建議安裝在自己指定的統一目錄下&#xff0c;方便后期查找&#xff09;。 &#xff08;2&#xff09;配置環境變量 JAVA_HOME: C:\Java\jdk\jdk1.7.0_45 &#xff08;jdk安裝目錄路徑&#xff09; Path:…

java script簡介

一.JavaScript介紹&#xff08;摘抄于百度百科&#xff09; JavaScript一種直譯式腳本語言&#xff0c;是一種動態類型、弱類型、基于原型的語言&#xff0c;內置支持類型。它的解釋器被稱為JavaScript引擎&#xff0c;為瀏覽器的一部分&#xff0c;廣泛用于客戶端的腳本語言&a…

雙向鏈表的創建和相關操作

http://blog.csdn.net/jw903/article/details/38947753 雙向鏈表其實是單鏈表的改進。 當我們對單鏈表進行操作時&#xff0c;有時你要對某個結點的直接前驅進行操作時&#xff0c;又必須從表頭開始查找。這是由單鏈表結點的結構所限制的。因為單鏈表每個結點只有一個存儲直接后…

鏈表各類操作詳解

http://blog.csdn.net/hackbuteer1/article/details/6591486/ 鏈表概述    鏈表是一種常見的重要的數據結構。它是動態地進行存儲分配的一種結構。它可以根據需要開辟內存單元。鏈表有一個“頭指針”變量&#xff0c;以head表示&#xff0c;它存放一個地址。該地址指向一個元…

信號和槽

信號槽是 Qt 框架引以為豪的機制之一。所謂信號槽&#xff0c;實際就是觀察者模式。當某個事件發生之后&#xff0c;比如&#xff0c;按鈕檢測到自己被點擊了一下&#xff0c;它就會發出一個信號&#xff08;signal&#xff09;。這種發出是沒有目的的&#xff0c;類似廣播。如…

登陸界面

界面展示&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>電子郵件登錄</title><link href"style.css" type"text/css" rel"stylesheet"></head><body>…

C語言實現雙向鏈表刪除、插入、雙向輸出

http://www.cnblogs.com/dyllove98/archive/2013/07/31/3228857.html #include<cstdio> #include<cstdlib> typedef struct DoubleLinkedList {int data;struct DoubleLinkedList *pre;struct DoubleLinkedList *next; }DlinkedList_Node; //建立鏈表 DlinkedList_…

servlet概述

一、什么是Servlet呢&#xff1f; servlet 是由sun公司提供的動態web資源開發技術&#xff0c;本質上就是一段Java程序&#xff0c;這段java程序無法獨立運行&#xff0c;必須放在Servlet容器&#xff08;比如&#xff1a;tomcat服務器&#xff09;中運行&#xff0c;由容器調用…

運用遞歸將兩個鏈表進行連接

http://blog.csdn.net/zjut_ym/article/details/45008259 建立2個數據項按從大到小排列的鏈表&#xff0c;實現2個鏈表的合并&#xff0c;并輸出合并后鏈表的數據項。 函數代碼如下 #include<iostream> using namespace std; struct node{int data;node *next; }; node …

C++ 類的深拷貝與淺拷貝||深拷貝通過重載拷貝構造函數與重載賦值運算符實現

http://blog.csdn.net/wangshihui512/article/details/9842225 在面向對象程序設計中&#xff0c;對象間的相互拷貝和賦值是經常進行的操作。 如果對象在申明的同時馬上進行的初始化操作&#xff0c;則稱之為拷貝運算。例如&#xff1a; class1 A("Time"); class1…

C++ 類的const成員函數

http://blog.csdn.net/wangshihui512/article/details/9823739 我們定義的類的成員函數中&#xff0c;常常有一些成員函數不改變類的數據成員&#xff0c;也就是說&#xff0c;這些函數是"只讀"函數&#xff0c;而有一些函數要修改類數據成員的值。如果把不改變數據…

用servlet校驗密碼2

js //創建Ajax對象&#xff0c;不同瀏覽器有不同的創建方法&#xff0c;其實本函數就是一個簡單的new語句而已。 function createXMLHttpRequest() {var XMLHttpRequest1;if (window.XMLHttpRequest) {XMLHttpRequest_test new XMLHttpRequest();} else if (window.ActiveXOb…

【筆試】:編程實現C++string 類成員函數

http://blog.csdn.net/wangshihui512/article/details/9792309 已知String類聲明如下&#xff1a; [cpp] view plaincopy print?class String { public: String(const char *str NULL); // 通用構造函數 String(const String &another); // 拷貝…

Qt中字符串之間的轉換

//QString -> C string -> char * str.ToStdString().data(); //先轉換為C的標準編碼//QString -> QByteArray QString buf "123456"; QByteArray a buf.toUtf8();//中文 a buf.toLocal8Bit(); //轉換為本地編碼 //QByteArray -> char * char *b …

(C語言版)棧和隊列(一)——實現鏈式棧和鏈式隊列的基本操作以及遇到的問題

http://blog.csdn.net/fisherwan/article/details/20055179 首先要感謝這位大牛的一篇博客&#xff0c;地址如下&#xff1a;http://blog.csdn.net/hguisu/article/details/7674195 當然還有網上一些其他的資料&#xff0c;今天自己寫了一下鏈式棧和鏈式隊列的程序。其中在釋放…

Cookie的使用

ookie簡介 1. 定義 cookie是由服務器發送給客戶端&#xff08;瀏覽器&#xff09;的小量信息。 2. 作用 cookie是鍵值對形式存儲的少量信息&#xff0c;那它有什么作用呢&#xff1f; 我們知道&#xff0c;平時上網時都是使用無狀態的HTTP協議傳輸出數據&#xff0c;這意味著客…

循環鏈表解決約瑟夫問題(簡化版)

http://blog.csdn.net/jw903/article/details/38965477 約瑟夫環是一個經典的數學的應用問題&#xff1a;已知N個人&#xff08;以編號1&#xff0c;2&#xff0c;3...N分別表示&#xff09;圍坐在一張圓桌周圍。從編號為1的人開始報數&#xff0c;數到M的那個人出列&#xff1…

Linux平臺上SQLite數據庫教程(一)——終端使用篇

http://blog.csdn.net/u011192270/article/details/48031763 SQLite是一款輕型的數據庫&#xff0c;它的設計目標是嵌入式的&#xff0c;而且目前已經在很多嵌入式產品中使用了它&#xff0c;它占用資源非常的低&#xff0c;可能只需要幾百K的內存就夠了。能夠支持Windows/Lin…

多路IO轉接服務器 epoll

創建一個epoll句柄&#xff0c;參數size用來告訴內核監聽的文件描述符的個數&#xff0c;跟內存大小有關。 #include <sys/epoll.h> int epoll_create(int size)   size&#xff1a;監聽數目 通過創建一個size大小的紅黑數來實現epoll句柄&#xff0c;返回epfd是該…

Linux平臺上SQLite數據庫教程(二)——C語言API介紹

http://blog.csdn.net/u011192270/article/details/48086961 前言&#xff1a;本文將介紹幾個基本的SQLite3數據庫的C語言API接口&#xff0c;主要用到兩個文件&#xff1a;sqlite3.c、sqlite3.h。源碼地址&#xff1a;https://github.com/AnSwErYWJ/SQLite。 打開數據庫 1.原型…