程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++雙向輪回列表用法實例

C++雙向輪回列表用法實例

編輯:關於C++

C++雙向輪回列表用法實例。本站提示廣大學習愛好者:(C++雙向輪回列表用法實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C++雙向輪回列表用法實例正文


本文實例講述了C++雙向輪回列表用法。分享給年夜家供年夜家參考。詳細以下:

/* 
 雙向輪回鏈表 
*/
#include <iostream>
using namespace std;
//構造體結構鏈表的指針域和數據域
struct ChainNode
{
 int data; //節點數據 
 ChainNode *left; //節點的先驅指針
 ChainNode *right; //節點的後繼指針 
};
////////////創立n個雙向輪回鏈表 並前往鏈表頭指針///////// 
ChainNode* CreateNode(int n)
{
 ChainNode *head = NULL; //鏈表頭節點
 ChainNode *pCur=NULL,*pNew=NULL; //以後節點,新建節點
 //初始化頭結點的先驅和後繼節點都為NULL 
 if (n<1) //沒有節點 前往頭節點 
 {
  return head; 
 } 
 //創立頭節點並將器閣下指針指向空 
 head = new ChainNode; 
 head->left = NULL;
 head->right = NULL; 
 head->data = 0;
 pCur = head;
 //為避免指針互指帶來的凌亂,用pCur節點保留了頭節點 也表現以後指針挪動到了頭指針 
 //創立n個節點 並銜接成鏈表 
 for (int i=0; i<n; i++)
 {
  pNew = new ChainNode; //創立一個新節點
  cout<<"請輸出數據:";
  cin>>pNew->data;
  pCur->right = pNew; //頭指針的右指針指向新建節點 
  pNew->left = pCur; //新建節點的左指針履行頭節點 
  pNew->right = NULL; //用於最初和頭指針停止交流 
  pCur = pNew; //指針往下挪動 
 } 
 //最初將頭指針的左指針指向最初一個節點,
 //最初一個節點的有指針指向頭指針,組成輪回 
 head->left = pCur; 
 pCur->right = head;
 return head; 
}
//////////////輸入鏈表頭節點/////////////////////// 
void OutList(ChainNode *head) //參數為頭指針 從頭指針開端 
{
  cout<<"鏈表元素輸入以下:"<<endl;
  ChainNode *pCur = head->right;
  //重第一個節點開端輸入 
  //沒有指向空節點,則鏈表沒停止 輸入鏈表元素 
  while (pCur->right != head)  
  {
   cout<<pCur->data<<" ";
   pCur = pCur->right;
   //以後節點指向下一個節點 可以遍歷鏈表 
  } 
  cout<<pCur->data<<endl;
  //輸出最初一個元素,它的右指針履行head 
}
///////在雙向輪回鏈表後添加n個節點//////
ChainNode* AddNode(ChainNode* head, int n)
{
 ChainNode *pNew,*pCur;
 //新添加節點和以後節點
 pCur = head; 
 //挪動到最節點
 while (pCur->right != head) 
 {
   pCur = pCur->right;
   //以後節點往下挪動 一向移到最初一個節點 
 }
 //新添加n個節點並拔出鏈表
 for (int i=0; i<n; i++)
 {
  pNew = new ChainNode;
  cout<<"輸出要添加的節點元素:";
  cin>>pNew->data;
  pCur->right = pNew; //頭指針的右指針指向新建節點 
  pNew->left = pCur; //新建節點的左指針履行頭節點 
  pNew->right = NULL; //用於最初和頭指針停止交流 
  pCur = pNew; //指針往下挪動 
 } 
 //最初將頭指針的左指針指向最初一個節點,
 //最初一個節點的有指針指向頭指針,組成輪回 
 head->left = pCur; 
 pCur->right = head;
 return head; 
} 
/////在雙向輪回鏈表中刪除一個節點/////// 
ChainNode* DeleteNode(ChainNode* head, unsigned num)
//刪除第num個節點
{
 ChainNode *pNew,*pCur,*temp;
 //新添加節點和以後節點 ,暫時交流節點 
 pCur = head; 
 int ncount = 0; 
 //挪動到第num-1個節點
 while (1)
 {
   ncount++;
   pCur = pCur->right; //以後節點往下挪動 
   if (num == ncount)
   {
    break; //此時pCur照樣指向了第num個節點 
   } 
 }
 //以後節點的前一個節點的右指針 指向 以後節點的下一個節點
 //以後節點的下一個節點的左指針 指向 以後節點的上一個節點 組成銜接
 //最初 刪除以後節點 
 (pCur->left)->right = pCur->right;
 (pCur->right)->left = pCur->left;
 delete pCur;
 return head; 
}
int main()
{
 int num;
 //創立num個節點並顯示 
 cout<<"輸出要創立的鏈表節點個數:";
 cin>>num;
 ChainNode *head = CreateNode(num);
 OutList(head); 
 //往鏈表後添加n個節點
 int addnum;
 cout<<"輸出要添加的節點個數:";
 cin>>addnum; 
 AddNode(head, addnum);
 OutList(head); 
 //刪除鏈表的第del個元素
 int del;
 cout<<"輸出要刪除的第幾個地位的節點:";
 cin>>del;
 DeleteNode (head, del);
 OutList(head);
 system("pause");
 return 0;
}

願望本文所述對年夜家的C++法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved