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++法式設計有所贊助。