国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++雙向循環列表用法實例

2020-05-23 14:18:24
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了C++雙向循環列表,實例分析了C++雙向循環列表的創建、輸出、添加、刪除、移動的相關操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了C++雙向循環列表用法。分享給大家供大家參考。具體如下:

 

 
  1. /*  
  2. 雙向循環鏈表  
  3. */ 
  4. #include <iostream> 
  5. using namespace std; 
  6. //結構體構造鏈表的指針域和數據域 
  7. struct ChainNode 
  8. int data; //節點數據  
  9. ChainNode *left; //節點的前驅指針 
  10. ChainNode *right; //節點的后繼指針  
  11. }; 
  12. ////////////創建n個雙向循環鏈表 并返回鏈表頭指針/////////  
  13. ChainNode* CreateNode(int n) 
  14. ChainNode *head = NULL; //鏈表頭節點 
  15. ChainNode *pCur=NULL,*pNew=NULL; //當前節點,新建節點 
  16. //初始化頭結點的前驅和后繼節點都為NULL  
  17. if (n<1) //沒有節點 返回頭節點  
  18. return head;  
  19. }  
  20. //創建頭節點并將器左右指針指向空  
  21. head = new ChainNode;  
  22. head->left = NULL; 
  23. head->right = NULL;  
  24. head->data = 0; 
  25. pCur = head; 
  26. //為防止指針互指帶來的混亂,用pCur節點保存了頭節點 也表示當前指針移動到了頭指針  
  27. //創建n個節點 并連接成鏈表  
  28. for (int i=0; i<n; i++) 
  29. pNew = new ChainNode; //創建一個新節點 
  30. cout<<"請輸入數據:"
  31. cin>>pNew->data; 
  32. pCur->right = pNew; //頭指針的右指針指向新建節點  
  33. pNew->left = pCur; //新建節點的左指針執行頭節點  
  34. pNew->right = NULL; //用于最后和頭指針進行交換  
  35. pCur = pNew; //指針往下移動  
  36. }  
  37. //最后將頭指針的左指針指向最后一個節點, 
  38. //最后一個節點的有指針指向頭指針,構成循環  
  39. head->left = pCur;  
  40. pCur->right = head; 
  41. return head;  
  42. //////////////輸出鏈表頭節點///////////////////////  
  43. void OutList(ChainNode *head) //參數為頭指針 從頭指針開始  
  44. cout<<"鏈表元素輸出如下:"<<endl; 
  45. ChainNode *pCur = head->right; 
  46. //重第一個節點開始輸出  
  47. //沒有指向空節點,則鏈表沒結束 輸出鏈表元素  
  48. while (pCur->right != head)  
  49. cout<<pCur->data<<" "
  50. pCur = pCur->right; 
  51. //當前節點指向下一個節點 可以遍歷鏈表  
  52. }  
  53. cout<<pCur->data<<endl; 
  54. //輸入最后一個元素,它的右指針執行head  
  55. ///////在雙向循環鏈表后添加n個節點////// 
  56. ChainNode* AddNode(ChainNode* head, int n) 
  57. ChainNode *pNew,*pCur; 
  58. //新添加節點和當前節點 
  59. pCur = head;  
  60. //移動到最節點 
  61. while (pCur->right != head)  
  62. pCur = pCur->right; 
  63. //當前節點往下移動 一直移到最后一個節點  
  64. //新添加n個節點并插入鏈表 
  65. for (int i=0; i<n; i++) 
  66. pNew = new ChainNode; 
  67. cout<<"輸入要添加的節點元素:"
  68. cin>>pNew->data; 
  69. pCur->right = pNew; //頭指針的右指針指向新建節點  
  70. pNew->left = pCur; //新建節點的左指針執行頭節點  
  71. pNew->right = NULL; //用于最后和頭指針進行交換  
  72. pCur = pNew; //指針往下移動  
  73. }  
  74. //最后將頭指針的左指針指向最后一個節點, 
  75. //最后一個節點的有指針指向頭指針,構成循環  
  76. head->left = pCur;  
  77. pCur->right = head; 
  78. return head;  
  79. }  
  80. /////在雙向循環鏈表中刪除一個節點///////  
  81. ChainNode* DeleteNode(ChainNode* head, unsigned num) 
  82. //刪除第num個節點 
  83. ChainNode *pNew,*pCur,*temp; 
  84. //新添加節點和當前節點 ,臨時交換節點  
  85. pCur = head;  
  86. int ncount = 0;  
  87. //移動到第num-1個節點 
  88. while (1) 
  89. ncount++; 
  90. pCur = pCur->right; //當前節點往下移動  
  91. if (num == ncount) 
  92. break//此時pCur還是指向了第num個節點  
  93. }  
  94. //當前節點的前一個節點的右指針 指向 當前節點的下一個節點 
  95. //當前節點的下一個節點的左指針 指向 當前節點的上一個節點 構成連接 
  96. //最后 刪除當前節點  
  97. (pCur->left)->right = pCur->right; 
  98. (pCur->right)->left = pCur->left; 
  99. delete pCur; 
  100. return head;  
  101. int main() 
  102. int num; 
  103. //創建num個節點并顯示  
  104. cout<<"輸入要創建的鏈表節點個數:"
  105. cin>>num; 
  106. ChainNode *head = CreateNode(num); 
  107. OutList(head);  
  108. //往鏈表后添加n個節點 
  109. int addnum; 
  110. cout<<"輸入要添加的節點個數:"
  111. cin>>addnum;  
  112. AddNode(head, addnum); 
  113. OutList(head);  
  114. //刪除鏈表的第del個元素 
  115. int del; 
  116. cout<<"輸入要刪除的第幾個位置的節點:"
  117. cin>>del; 
  118. DeleteNode (head, del); 
  119. OutList(head); 
  120. system("pause"); 
  121. return 0; 

希望本文所述對大家的C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涟源市| 唐海县| 日照市| 永丰县| 马关县| 盐城市| 淳安县| 五河县| 房产| 泰和县| 澄迈县| 抚顺县| 华宁县| 大余县| 孟津县| 宜良县| 海门市| 和静县| 兴海县| 平江县| 平远县| 夹江县| 山西省| 阳江市| 长治市| 平塘县| 醴陵市| 铁力市| 凌源市| 伊宁市| 新乡县| 三原县| 民丰县| 建宁县| 祁阳县| 桐梓县| 上高县| 留坝县| 镶黄旗| 泸定县| 永新县|