最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++雙向循環(huán)列表用法實(shí)例

 更新時(shí)間:2015年07月14日 11:07:06   作者:G0561  
這篇文章主要介紹了C++雙向循環(huán)列表,實(shí)例分析了C++雙向循環(huán)列表的創(chuàng)建、輸出、添加、刪除、移動(dòng)的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

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

/* 
 雙向循環(huán)鏈表 
*/
#include <iostream>
using namespace std;
//結(jié)構(gòu)體構(gòu)造鏈表的指針域和數(shù)據(jù)域
struct ChainNode
{
 int data; //節(jié)點(diǎn)數(shù)據(jù) 
 ChainNode *left; //節(jié)點(diǎn)的前驅(qū)指針
 ChainNode *right; //節(jié)點(diǎn)的后繼指針 
};
////////////創(chuàng)建n個(gè)雙向循環(huán)鏈表 并返回鏈表頭指針///////// 
ChainNode* CreateNode(int n)
{
 ChainNode *head = NULL; //鏈表頭節(jié)點(diǎn)
 ChainNode *pCur=NULL,*pNew=NULL; //當(dāng)前節(jié)點(diǎn),新建節(jié)點(diǎn)
 //初始化頭結(jié)點(diǎn)的前驅(qū)和后繼節(jié)點(diǎn)都為NULL 
 if (n<1) //沒有節(jié)點(diǎn) 返回頭節(jié)點(diǎn) 
 {
  return head; 
 } 
 //創(chuàng)建頭節(jié)點(diǎn)并將器左右指針指向空 
 head = new ChainNode; 
 head->left = NULL;
 head->right = NULL; 
 head->data = 0;
 pCur = head;
 //為防止指針互指帶來的混亂,用pCur節(jié)點(diǎn)保存了頭節(jié)點(diǎn) 也表示當(dāng)前指針移動(dòng)到了頭指針 
 //創(chuàng)建n個(gè)節(jié)點(diǎn) 并連接成鏈表 
 for (int i=0; i<n; i++)
 {
  pNew = new ChainNode; //創(chuàng)建一個(gè)新節(jié)點(diǎn)
  cout<<"請(qǐng)輸入數(shù)據(jù):";
  cin>>pNew->data;
  pCur->right = pNew; //頭指針的右指針指向新建節(jié)點(diǎn) 
  pNew->left = pCur; //新建節(jié)點(diǎn)的左指針執(zhí)行頭節(jié)點(diǎn) 
  pNew->right = NULL; //用于最后和頭指針進(jìn)行交換 
  pCur = pNew; //指針往下移動(dòng) 
 } 
 //最后將頭指針的左指針指向最后一個(gè)節(jié)點(diǎn),
 //最后一個(gè)節(jié)點(diǎn)的有指針指向頭指針,構(gòu)成循環(huán) 
 head->left = pCur; 
 pCur->right = head;
 return head; 
}
//////////////輸出鏈表頭節(jié)點(diǎn)/////////////////////// 
void OutList(ChainNode *head) //參數(shù)為頭指針 從頭指針開始 
{
  cout<<"鏈表元素輸出如下:"<<endl;
  ChainNode *pCur = head->right;
  //重第一個(gè)節(jié)點(diǎn)開始輸出 
  //沒有指向空節(jié)點(diǎn),則鏈表沒結(jié)束 輸出鏈表元素 
  while (pCur->right != head)  
  {
   cout<<pCur->data<<" ";
   pCur = pCur->right;
   //當(dāng)前節(jié)點(diǎn)指向下一個(gè)節(jié)點(diǎn) 可以遍歷鏈表 
  } 
  cout<<pCur->data<<endl;
  //輸入最后一個(gè)元素,它的右指針執(zhí)行head 
}
///////在雙向循環(huán)鏈表后添加n個(gè)節(jié)點(diǎn)//////
ChainNode* AddNode(ChainNode* head, int n)
{
 ChainNode *pNew,*pCur;
 //新添加節(jié)點(diǎn)和當(dāng)前節(jié)點(diǎn)
 pCur = head; 
 //移動(dòng)到最節(jié)點(diǎn)
 while (pCur->right != head) 
 {
   pCur = pCur->right;
   //當(dāng)前節(jié)點(diǎn)往下移動(dòng) 一直移到最后一個(gè)節(jié)點(diǎn) 
 }
 //新添加n個(gè)節(jié)點(diǎn)并插入鏈表
 for (int i=0; i<n; i++)
 {
  pNew = new ChainNode;
  cout<<"輸入要添加的節(jié)點(diǎn)元素:";
  cin>>pNew->data;
  pCur->right = pNew; //頭指針的右指針指向新建節(jié)點(diǎn) 
  pNew->left = pCur; //新建節(jié)點(diǎn)的左指針執(zhí)行頭節(jié)點(diǎn) 
  pNew->right = NULL; //用于最后和頭指針進(jìn)行交換 
  pCur = pNew; //指針往下移動(dòng) 
 } 
 //最后將頭指針的左指針指向最后一個(gè)節(jié)點(diǎn),
 //最后一個(gè)節(jié)點(diǎn)的有指針指向頭指針,構(gòu)成循環(huán) 
 head->left = pCur; 
 pCur->right = head;
 return head; 
} 
/////在雙向循環(huán)鏈表中刪除一個(gè)節(jié)點(diǎn)/////// 
ChainNode* DeleteNode(ChainNode* head, unsigned num)
//刪除第num個(gè)節(jié)點(diǎn)
{
 ChainNode *pNew,*pCur,*temp;
 //新添加節(jié)點(diǎn)和當(dāng)前節(jié)點(diǎn) ,臨時(shí)交換節(jié)點(diǎn) 
 pCur = head; 
 int ncount = 0; 
 //移動(dòng)到第num-1個(gè)節(jié)點(diǎn)
 while (1)
 {
   ncount++;
   pCur = pCur->right; //當(dāng)前節(jié)點(diǎn)往下移動(dòng) 
   if (num == ncount)
   {
    break; //此時(shí)pCur還是指向了第num個(gè)節(jié)點(diǎn) 
   } 
 }
 //當(dāng)前節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)的右指針 指向 當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)
 //當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)的左指針 指向 當(dāng)前節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn) 構(gòu)成連接
 //最后 刪除當(dāng)前節(jié)點(diǎn) 
 (pCur->left)->right = pCur->right;
 (pCur->right)->left = pCur->left;
 delete pCur;
 return head; 
}
int main()
{
 int num;
 //創(chuàng)建num個(gè)節(jié)點(diǎn)并顯示 
 cout<<"輸入要?jiǎng)?chuàng)建的鏈表節(jié)點(diǎn)個(gè)數(shù):";
 cin>>num;
 ChainNode *head = CreateNode(num);
 OutList(head); 
 //往鏈表后添加n個(gè)節(jié)點(diǎn)
 int addnum;
 cout<<"輸入要添加的節(jié)點(diǎn)個(gè)數(shù):";
 cin>>addnum; 
 AddNode(head, addnum);
 OutList(head); 
 //刪除鏈表的第del個(gè)元素
 int del;
 cout<<"輸入要?jiǎng)h除的第幾個(gè)位置的節(jié)點(diǎn):";
 cin>>del;
 DeleteNode (head, del);
 OutList(head);
 system("pause");
 return 0;
}

希望本文所述對(duì)大家的C++程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 最小生成樹算法之Prim算法

    最小生成樹算法之Prim算法

    這篇文章主要講解了普里姆算法(Prim算法),圖論中的一種算法,可在加權(quán)連通圖里搜索最小生成樹,需要的朋友可以參考下
    2015-07-07
  • 利用C語(yǔ)言實(shí)現(xiàn)頁(yè)面置換算法的詳細(xì)過程

    利用C語(yǔ)言實(shí)現(xiàn)頁(yè)面置換算法的詳細(xì)過程

    一個(gè)好的頁(yè)面置換算法,應(yīng)具有較低的頁(yè)面更換頻率,從理論上講,應(yīng)該保留最近重復(fù)訪問的頁(yè)面,將以后都不再訪問或者很長(zhǎng)時(shí)間內(nèi)不再訪問的頁(yè)面調(diào)出,下面這篇文章主要給大家介紹了關(guān)于利用C語(yǔ)言實(shí)現(xiàn)頁(yè)面置換算法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • C++基于EasyX實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

    C++基于EasyX實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C++基于EasyX實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)順序表詳解

    C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)順序表詳解

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)順序表的實(shí)現(xiàn)代碼的相關(guān)資料,動(dòng)態(tài)順序表在內(nèi)存中開辟一塊空間,可以隨我們數(shù)據(jù)數(shù)量的增多來擴(kuò)容,需要的朋友可以參考下
    2021-08-08
  • C++ 再識(shí)類和對(duì)象

    C++ 再識(shí)類和對(duì)象

    類是創(chuàng)建對(duì)象的模板,一個(gè)類可以創(chuàng)建多個(gè)對(duì)象,每個(gè)對(duì)象都是類類型的一個(gè)變量;創(chuàng)建對(duì)象的過程也叫類的實(shí)例化。每個(gè)對(duì)象都是類的一個(gè)具體實(shí)例(Instance),擁有類的成員變量和成員函數(shù)
    2021-10-10
  • C語(yǔ)言多組輸入使用方法

    C語(yǔ)言多組輸入使用方法

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言多組輸入使用的相關(guān)資料,在 C語(yǔ)言中可以使用循環(huán)語(yǔ)句來實(shí)現(xiàn)多組輸入,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • C語(yǔ)言 遞歸解決青蛙跳臺(tái)階問題

    C語(yǔ)言 遞歸解決青蛙跳臺(tái)階問題

    遞歸做為一種算法在程序設(shè)計(jì)語(yǔ)言中廣泛應(yīng)用?;竞x&#8203;是指函數(shù)/過程/子程序在運(yùn)行過程序中直接或間接調(diào)用自身而產(chǎn)生的重入現(xiàn)象。在計(jì)算機(jī)編程里,遞歸指的是一個(gè)過程:函數(shù)不斷引用自身,直到引用的對(duì)象已知
    2021-11-11
  • C語(yǔ)言實(shí)現(xiàn)串的順序存儲(chǔ)表示與基本操作

    C語(yǔ)言實(shí)現(xiàn)串的順序存儲(chǔ)表示與基本操作

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)串的順序存儲(chǔ)表示與基本操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 關(guān)于大小端、位域的一些概念詳解

    關(guān)于大小端、位域的一些概念詳解

    我們常用的x86結(jié)構(gòu)都是小端模式,而大部分DSP,ARM也是小端模式,不過有些ARM是可以選擇大小端模式。所以對(duì)于上面的maxHeight是應(yīng)該以小端模式來存放,具體情況請(qǐng)看下面兩表
    2013-10-10
  • error LNK2019: 無法解析的外部符號(hào) 問題的解決辦法

    error LNK2019: 無法解析的外部符號(hào) 問題的解決辦法

    error LNK2019: 無法解析的外部符號(hào) 問題的解決辦法,需要的朋友可以參考一下
    2013-05-05

最新評(píng)論

兰西县| 达孜县| 嘉善县| 工布江达县| 浦江县| 琼结县| 安宁市| 安岳县| 通山县| 敦煌市| 织金县| 辽中县| 新闻| 南靖县| 广东省| 柳江县| 宜都市| 揭西县| 荥阳市| 大厂| 嵊泗县| 陕西省| 巴彦县| 舞钢市| 北辰区| 江源县| 岳西县| 宜阳县| 崇信县| 陕西省| 莫力| 高台县| 灵宝市| 隆昌县| 准格尔旗| 内江市| 共和县| 古丈县| 汉沽区| 曲水县| 南郑县|