五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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語言)詳解的評論 (共 條)

分享到微博請遵守國家法律
霍林郭勒市| 华阴市| 阳曲县| 秦安县| 太康县| 叶城县| 常熟市| 新建县| 奈曼旗| 奉节县| 根河市| 治县。| 苏州市| 开江县| 东山县| 临西县| 杭锦旗| 驻马店市| 平和县| 肃南| 晋州市| 广平县| 米泉市| 阿图什市| 博野县| 大厂| 藁城市| 宕昌县| 阜康市| 深州市| 贡觉县| 龙井市| 信丰县| 沙雅县| 银川市| 金堂县| 黔江区| 绥江县| 南涧| 丰顺县| 婺源县|