激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - C/C++ - C++雙向循環(huán)列表用法實(shí)例

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

2021-03-02 14:18G0561 C/C++

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 雙向循環(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) //沒(méi)有節(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;
 //為防止指針互指帶來(lái)的混亂,用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ù)為頭指針 從頭指針開(kāi)始
{
  cout<<"鏈表元素輸出如下:"<<endl;
  ChainNode *pCur = head->right;
  //重第一個(gè)節(jié)點(diǎn)開(kāi)始輸出
  //沒(méi)有指向空節(jié)點(diǎn),則鏈表沒(méi)結(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ì)有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩国产一区二区三区在线观看 | 性少妇videosexfreexx入片 | 久精品国产 | 国产一区二区免费在线观看 | 久久av喷吹av高潮av懂色 | 日韩精品一区二区在线播放 | 免费香蕉成视频成人网 | 色678黄网站全部免费 | 999久久久国产999久久久 | 黄色片在线观看网站 | 国产一级做a | 青草伊人网 | 中文字幕在线播放不卡 | 欧美日韩在线视频一区二区 | 91九色视频 | 依依成人综合 | 深夜精品福利 | 久久久久久久久久久久免费 | 久久久久久亚洲综合影院红桃 | 欧美成人黄色小视频 | 中文字幕精品亚洲 | 欧美成人精品不卡视频在线观看 | 在线成人www免费观看视频 | 久久久久久免费 | 欧美精品日日鲁夜夜添 | 欧美淫交| 欧美精品黄色 | 欧美一级免费视频 | 一区二区三区日韩在线 | 日韩中字幕 | a黄色网| 一级黄片毛片免费看 | 在线成人免费观看视频 | 欧美视频国产精品 | 全黄性性激高免费视频 | 国产成人综合在线视频 | 国产精品一区网站 | v天堂在线视频 | 国产xxxx岁13xxxxhd | 久久福利国产 | 欧美 日韩 亚洲 中文 |