(C++版)鏈表(一)——實現單向鏈表創建、插入、刪除等相關操作

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

前段時間用C語言實現了鏈表的相關操作,但是發現當時挺清楚的,過了一段時間又忘的差不多了,所以現在打算用C++再實現一遍,由于初次用C++實現,存在錯誤的地方還望大家指針。下面就直接上代碼:


[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?*pNext;??
  10. };??
  11. ??
  12. //單向鏈表類??
  13. class?LinkList?{??
  14. public:??
  15. ????LinkList()?{??
  16. ????????//頭結點不參與計數??
  17. ????????head?=?new?Node;??
  18. ????????head->data?=?0;??
  19. ????????head->pNext?=?NULL;??
  20. ????}??
  21. ????~LinkList()?{?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?position);??????????//刪除指定位置結點??
  28. ????void?DeleteLinkList();??????????????????//刪除整個鏈表??
  29. private:??
  30. ????Node?*head;??
  31. };??
  32. ??
  33. void?LinkList::CreateLinkList(int?n)?{??
  34. ????if?(n?<?0)?{??
  35. ????????cout?<<?"輸入結點個數錯誤!"?<<?endl;??
  36. ????????exit(EXIT_FAILURE);??
  37. ????}??
  38. ????else?{??
  39. ????????Node?*pnew,?*ptemp;??
  40. ????????ptemp?=?head;??
  41. ????????int?i?=?n;????
  42. ????????while?(n--?>?0)?{??
  43. ????????????pnew?=?new?Node;??
  44. ????????????cout?<<?"輸入第"?<<?i?-?n?<<?"個結點值:";??
  45. ????????????cin?>>?pnew->data;??
  46. ????????????pnew->pNext?=?NULL;??
  47. ????????????ptemp->pNext?=?pnew;??
  48. ????????????ptemp?=?pnew;?????
  49. ????????}??
  50. ????}??
  51. }??
  52. //postion從1開始計數,到鏈表長度加1結束,頭結點后的結點稱為第一個結點??
  53. void?LinkList::InsertNode(int?position,?int?d)?{??
  54. ????if?(position?<?0?||?position?>?GetLength()?+?1)?{??
  55. ????????cout?<<?"輸入位置錯誤!"?<<?endl;??
  56. ????????exit(EXIT_FAILURE);??
  57. ????}??
  58. ????else?{??
  59. ????????Node?*pnew,?*ptemp;??
  60. ????????ptemp?=?head;??
  61. ????????pnew?=?new?Node;??
  62. ????????pnew->data?=?d;??
  63. ????????pnew->pNext?=?NULL;??
  64. ??
  65. ????????while?(position--?>?1)??
  66. ????????????ptemp?=?ptemp->pNext;??
  67. ????????pnew->pNext?=?ptemp->pNext;??
  68. ????????ptemp->pNext?=?pnew;??
  69. ????}??
  70. }??
  71. ??
  72. void?LinkList::TraverseLinkList()?{??
  73. ????Node?*p?=?head->pNext;???
  74. ????while?(p?!=?NULL)?{??
  75. ????????cout?<<?p->data?<<?"?";??
  76. ????????p?=?p->pNext;??
  77. ????}??
  78. ????cout?<<?endl;??
  79. }??
  80. ??
  81. bool?LinkList::IsEmpty()?{??
  82. ????if?(head->pNext?==?NULL)??
  83. ????????return?true;??
  84. ????else??
  85. ????????return?false;??
  86. }??
  87. ??
  88. int?LinkList::GetLength()?{??
  89. ????Node?*p?=?head->pNext;??
  90. ????int?n?=?0;??
  91. ????while?(p?!=?NULL)?{??
  92. ????????n++;??
  93. ????????p?=?p->pNext;??
  94. ????}??
  95. ????return?n;??
  96. }??
  97. //position只能從1開始到鏈表長度結束??
  98. void?LinkList::DeleteNode(int?position)?{??
  99. ????if?(position?<?0?||?position?>?GetLength())?{??
  100. ????????cout?<<?"輸入位置錯誤!"?<<?endl;??
  101. ????????exit(EXIT_FAILURE);??
  102. ????}??
  103. ????else?{????????
  104. ????????Node?*ptemp?=?head,?*pdelete;??
  105. ????????while?(position--?>?1)??
  106. ????????????ptemp?=?ptemp->pNext;??
  107. ????????pdelete?=?ptemp->pNext;??
  108. ????????ptemp->pNext?=?pdelete->pNext;??
  109. ????????delete?pdelete;??
  110. ????????pdelete?=?NULL;??
  111. ????}??
  112. }??
  113. ??
  114. void?LinkList::DeleteLinkList()?{??
  115. ????Node?*pdelete?=?head->pNext,?*ptemp;??
  116. ????while(pdelete?!=?NULL)?{??
  117. ????????ptemp?=?pdelete->pNext;??
  118. ????????head->pNext?=?ptemp;??
  119. ????????delete?pdelete;??
  120. ????????pdelete?=?ptemp;??
  121. ????}??
  122. }??
  123. ??
  124. //測試函數??
  125. int?main()?{??
  126. ????LinkList?l;??
  127. ????int?position?=?0,?value?=?0,?n?=?0;??
  128. ????bool?flag?=?false;??
  129. ??
  130. ????cout?<<?"請輸入需要創建單向鏈表的結點個數:";??
  131. ????cin?>>?n;??
  132. ????l.CreateLinkList(n);??
  133. ??
  134. ????cout?<<?"打印鏈表值如下:";??
  135. ????l.TraverseLinkList();??
  136. ??
  137. ????cout?<<?"請輸入插入結點的位置和值:";??
  138. ????cin?>>?position?>>?value;??
  139. ????l.InsertNode(position,?value);??
  140. ??????
  141. ????cout?<<?"打印鏈表值如下:";??
  142. ????l.TraverseLinkList();??
  143. ??
  144. ????cout?<<?"請輸入要刪除結點的位置:";??
  145. ????cin?>>?position;??
  146. ????l.DeleteNode(position);??
  147. ??
  148. ????cout?<<?"打印鏈表值如下:";??
  149. ????l.TraverseLinkList();??
  150. ??
  151. ????l.DeleteLinkList();??
  152. ????flag?=?l.IsEmpty();??
  153. ????if?(flag)??
  154. ????????cout?<<?"刪除鏈表成功!"?<<?endl;??
  155. ????else??
  156. ????????cout?<<?"刪除鏈表失敗!"?<<?endl;??
  157. ??
  158. ????return?0;??
  159. }</span>??

上面是單向鏈表的實現,和C的實現其實是差不多的,就是換了一種描述方式。要注意的地方還是和C語言實現是一樣的,測試結果如下:



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

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

相關文章

(C語言版)鏈表(二)——實現單向循環鏈表創建、插入、刪除、釋放內存等簡單操作

http://blog.csdn.net/fisherwan/article/details/19754585 昨天寫了單向鏈表的代碼&#xff0c;今天上午把單向循環鏈表的程序給敲完了。鏈表的相關操作一樣的&#xff0c;包含鏈表的創建、判斷鏈表是否為空、計算鏈表長度、向鏈表中插入節點、從鏈表中刪除節點、刪除整個鏈表…

計科院首頁靜態網頁

一.HTML代碼 <!DOCTYPE html><html><head><meta charset"UTF-8"><title>首頁</title> </head><body><div id"page"> <div id"page_head"> <div id"logo" aligncenter…

可重入函數

一個函數在被調用執行期間(尚未調用結束)&#xff0c;由于某種時序又被重復調用&#xff0c;稱之為“重入”。根據函數實現的方法可分為“可重入函數”和“不可重入函數”兩種。 注意事項 定義可重入函數&#xff0c;函數內不能含有全局變量及static變量&#xff0c;不能使用ma…

(C語言版)鏈表(四)——實現雙向循環鏈表創建、插入、刪除、釋放內存等簡單操作

http://blog.csdn.net/fisherwan/article/details/19801993 雙向循環鏈表是基于雙向鏈表的基礎上實現的&#xff0c;和雙向鏈表的操作差不多&#xff0c;唯一的區別就是它是個循環的鏈表&#xff0c;通過每個節點的兩個指針把它們扣在一起組成一個環狀。所以呢&#xff0c;每個…

SIGCHLD

SIGCHLD的產生條件 子進程終止時 子進程接收到SIGSTOP信號停止時 子進程處在停止態&#xff0c;接受到SIGCONT后喚醒時 借助SIGCHLD信號回收子進程 子進程結束運行&#xff0c;其父進程會收到SIGCHLD信號。該信號的默認處理動作是忽略。可以捕捉該信號&#xff0c;在捕捉函數中…

(C語言版)鏈表(一)——實現單向鏈表創建、插入、刪除等簡單操作(包含個人理解說明及注釋,新手跟著寫代碼)

http://blog.csdn.net/fisherwan/article/details/19701027 我學習了幾天數據結構&#xff0c;今天下午自己寫了一個單向鏈表的程序。我也是新手&#xff0c;所以剛開始學習數據結構的菜鳥們&#xff08;有大牛們能屈尊看一看&#xff0c;也是我的榮幸&#xff09;可以和我一起…

中斷系統調用

中斷系統調用 系統調用可分為兩類&#xff1a;慢速系統調用和其他系統調用。 慢速系統調用&#xff1a;可能會使進程永遠阻塞的一類。如果在阻塞期間收到一個信號&#xff0c;該系統調用就被中斷,不再繼續執行(早期)&#xff1b;也可以設定系統調用是否重啟。如&#xff0c;rea…

(C++版)鏈表(二)——實現單項循環鏈表創建、插入、刪除等操作

http://blog.csdn.net/fisherwan/article/details/25561857 鏈表&#xff08;二&#xff09;單向循環鏈表的實現&#xff0c;下面實現代碼&#xff1a; [cpp] view plaincopy <span style"font-size:18px;" deep"5">#include <iostream> #in…

會話

創建會話 創建一個會話需要注意以下6點注意事項&#xff1a; 調用進程不能是進程組組長&#xff0c;該進程變成新會話首進程(session header)該進程成為一個新進程組的組長進程。需有root權限(ubuntu不需要)新會話丟棄原有的控制終端&#xff0c;該會話沒有控制終端該調用進程是…

守護進程

守護進程 Daemon(精靈)進程&#xff0c;是Linux中的后臺服務進程&#xff0c;通常獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。一般采用以d結尾的名字。 Linux后臺的一些系統服務進程&#xff0c;沒有控制終端&#xff0c;不能直接和用戶交互。不受用戶登…

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

http://blog.csdn.net/fisherwan/article/details/25649073 鏈表&#xff08;三&#xff09;實現雙向鏈表操作&#xff0c;代碼如下&#xff1a; [cpp] view plaincopy <span style"font-size:18px;" deep"5">#include <iostream> #include …

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

http://blog.csdn.net/fisherwan/article/details/25649271 鏈表&#xff08;四&#xff09;實現雙向循環鏈表簡單操作&#xff0c;代碼如下&#xff1a; [cpp] view plaincopy <span style"font-size:18px;" deep"5">#include <iostream> #…

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;由容器調用…