最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

雙向鏈表基本操作(C語言)詳解

2023-07-11 19:12 作者:解學(xué)武  | 我要投稿

前面學(xué)習(xí)了如何創(chuàng)建一個(gè)雙向鏈表,本節(jié)學(xué)習(xí)有關(guān)雙向鏈表的一些基本操作,即如何在雙向鏈表中添加、刪除、查找或更改數(shù)據(jù)元素。

本節(jié)知識基于已熟練掌握雙向鏈表創(chuàng)建過程的基礎(chǔ)上,我們繼續(xù)上節(jié)所創(chuàng)建的雙向鏈表來學(xué)習(xí)本節(jié)內(nèi)容,創(chuàng)建好的雙向鏈表如圖?1 所示:


雙向鏈表示意圖
圖 1 雙向鏈表示意圖

雙向鏈表添加節(jié)點(diǎn)

根據(jù)數(shù)據(jù)添加到雙向鏈表中的位置不同,可細(xì)分為以下 3 種情況:

1) 添加至表頭

將新數(shù)據(jù)元素添加到表頭,只需要將該元素與表頭元素建立雙層邏輯關(guān)系即可。

換句話說,假設(shè)新元素節(jié)點(diǎn)為 temp,表頭節(jié)點(diǎn)為 head,則需要做以下 2 步操作即可:

  1. temp->next=head; head->prior=temp;

  2. 將 head 移至 temp,重新指向新的表頭;

例如,將新元素 7 添加至雙鏈表的表頭,則實(shí)現(xiàn)過程如圖 2 所示:

添加元素至雙向鏈表的表頭
圖 2 添加元素至雙向鏈表的表頭

2) 添加至表的中間位置

同單鏈表添加數(shù)據(jù)類似,雙向鏈表中間位置添加數(shù)據(jù)需要經(jīng)過以下 2 個(gè)步驟,如圖 3 所示:

  1. 新節(jié)點(diǎn)先與其直接后繼節(jié)點(diǎn)建立雙層邏輯關(guān)系;

  2. 新節(jié)點(diǎn)的直接前驅(qū)節(jié)點(diǎn)與之建立雙層邏輯關(guān)系;

雙向鏈表中間位置添加數(shù)據(jù)元素
圖 3 雙向鏈表中間位置添加數(shù)據(jù)元素

3) 添加至表尾

與添加到表頭是一個(gè)道理,實(shí)現(xiàn)過程如下(如圖 4 所示):

  1. 找到雙鏈表中最后一個(gè)節(jié)點(diǎn);

  2. 讓新節(jié)點(diǎn)與最后一個(gè)節(jié)點(diǎn)進(jìn)行雙層邏輯關(guān)系;

雙向鏈表尾部添加數(shù)據(jù)元素
圖 4 雙向鏈表尾部添加數(shù)據(jù)元素

因此,我們可以試著編寫雙向鏈表添加數(shù)據(jù)的 C 語言代碼,參考代碼如下:

雙向鏈表刪除節(jié)點(diǎn)

和添加結(jié)點(diǎn)的思想類似,在雙向鏈表中刪除目標(biāo)結(jié)點(diǎn)也分為 3 種情況。

1) 刪除表頭結(jié)點(diǎn)

刪除表頭結(jié)點(diǎn)的過程如下圖所示:

圖 5 刪除雙鏈表表頭元素

刪除表頭結(jié)點(diǎn)的實(shí)現(xiàn)過程是:

  1. 新建一個(gè)指針指向表頭結(jié)點(diǎn);

  2. 斷開表頭結(jié)點(diǎn)和其直接后續(xù)結(jié)點(diǎn)之間的關(guān)聯(lián),更改 head 頭指針的指向,同時(shí)將其直接后續(xù)結(jié)點(diǎn)的 prior 指針指向 NULL;

  3. 釋放表頭結(jié)點(diǎn)占用的內(nèi)存空間。

2) 刪除表中結(jié)點(diǎn)

刪除表中結(jié)點(diǎn)的過程如下圖所示:

雙鏈表刪除元素操作示意圖
圖 6 刪除表中結(jié)點(diǎn)

刪除表中結(jié)點(diǎn)的實(shí)現(xiàn)過程是:

  1. 找到目標(biāo)結(jié)點(diǎn),新建一個(gè)指針指向改結(jié)點(diǎn);

  2. 將目標(biāo)結(jié)點(diǎn)從鏈表上摘除;

  3. 釋放該結(jié)點(diǎn)占用的內(nèi)存空間。

3) 刪除表尾結(jié)點(diǎn)

刪除表尾結(jié)點(diǎn)的過程如下圖所示:

圖 7 刪除表尾結(jié)點(diǎn)

刪除表尾結(jié)點(diǎn)的實(shí)現(xiàn)過程是:

  1. 找到表尾結(jié)點(diǎn),新建一個(gè)指針指向該結(jié)點(diǎn);

  2. 斷點(diǎn)表尾結(jié)點(diǎn)和其直接前驅(qū)結(jié)點(diǎn)的關(guān)聯(lián),并將其直接前驅(qū)結(jié)點(diǎn)的 next 指針指向 NULL;

  3. 釋放表尾結(jié)點(diǎn)占用的內(nèi)存空間。

雙向鏈表刪除節(jié)點(diǎn)的 C 語言實(shí)現(xiàn)代碼如下:

雙向鏈表查找節(jié)點(diǎn)


通常情況下,雙向鏈表和單鏈表一樣都僅有一個(gè)頭指針。因此,雙鏈表查找指定元素的實(shí)現(xiàn)同單鏈表類似,也是從表頭依次遍歷表中元素。

C 語言實(shí)現(xiàn)代碼為:

雙向鏈表更改節(jié)點(diǎn)


更改雙鏈表中指定結(jié)點(diǎn)數(shù)據(jù)域的操作是在查找的基礎(chǔ)上完成的。實(shí)現(xiàn)過程是:通過遍歷找到存儲(chǔ)有該數(shù)據(jù)元素的結(jié)點(diǎn),直接更改其數(shù)據(jù)域即可。

實(shí)現(xiàn)此操作的 C 語言實(shí)現(xiàn)代碼如下:

總結(jié)


這里給出雙鏈表中對數(shù)據(jù)進(jìn)行 "增刪查改" 操作的完整實(shí)現(xiàn)代碼:

程序執(zhí)行結(jié)果為:


創(chuàng)建好的雙向鏈表為:
1 <-> 2 <-> 3 <-> 4 <-> 5
刪除元素 2:
1 <-> 3 <-> 4 <-> 5
元素 3 的位置是:2
表中的元素 3 改為 6:
1 <-> 6 <-> 4 <-> 5

雙向鏈表基本操作(C語言)詳解的評論 (共 條)

分享到微博請遵守國家法律
扬州市| 莒南县| 会宁县| 洞口县| 石河子市| 吉木萨尔县| 祁东县| 吴旗县| 永和县| 昭苏县| 安宁市| 财经| 长顺县| 元朗区| 吐鲁番市| 凤冈县| 灵台县| 临潭县| 开平市| 城口县| 威信县| 牟定县| 宝鸡市| 敦煌市| 庆云县| 建阳市| 伊金霍洛旗| 昌图县| 贺兰县| 荆州市| 峡江县| 澳门| 丰顺县| 尼玛县| 沙坪坝区| 湟中县| 兰溪市| 资阳市| 汝阳县| 凌源市| 成安县|