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

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

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

2023-07-10 16:38 作者:解學(xué)武  | 我要投稿

學(xué)會創(chuàng)建鏈表之后,本節(jié)繼續(xù)講解鏈表的一些基本操作,包括向鏈表中添加數(shù)據(jù)、刪除鏈表中的數(shù)據(jù)、查找和更改鏈表中的數(shù)據(jù)。

首先,創(chuàng)建一個帶頭結(jié)點(diǎn)的鏈表,鏈表中存儲著 {1,2,3,4}:

鏈表插入元素

同順序表一樣,向鏈表中增添元素,根據(jù)添加位置不同,可分為以下 3 種情況:

  • 插入到鏈表的頭部,作為首元節(jié)點(diǎn);

  • 插入到鏈表中間的某個位置;

  • 插入到鏈表的最末端,作為鏈表中最后一個結(jié)點(diǎn);

對于有頭結(jié)點(diǎn)的鏈表,3 種插入元素的實(shí)現(xiàn)思想是相同的,具體步驟是:

  1. 將新結(jié)點(diǎn)的 next 指針指向插入位置后的結(jié)點(diǎn);

  2. 將插入位置前結(jié)點(diǎn)的 next 指針指向插入結(jié)點(diǎn);

例如,在鏈表?{1,2,3,4}?的基礎(chǔ)上分別實(shí)現(xiàn)在頭部、中間、尾部插入新元素 5,其實(shí)現(xiàn)過程如圖?1 所示:

圖 1 帶頭結(jié)點(diǎn)鏈表插入元素的 3 種情況


從圖中可以看出,雖然新元素的插入位置不同,但實(shí)現(xiàn)插入操作的方法是一致的,都是先執(zhí)行步驟 1 ,再執(zhí)行步驟 2。實(shí)現(xiàn)代碼如下:

注意:鏈表插入元素的操作必須是先步驟 1,再步驟 2;反之,若先執(zhí)行步驟 2,除非再添加一個指針,作為插入位置后續(xù)鏈表的頭指針,否則會導(dǎo)致插入位置后的這部分鏈表丟失,無法再實(shí)現(xiàn)步驟 1。


對于沒有頭結(jié)點(diǎn)的鏈表,在頭部插入結(jié)點(diǎn)比較特殊,需要單獨(dú)實(shí)現(xiàn)。

圖 2 不帶頭結(jié)點(diǎn)鏈表插入元素的 3 種情況


和 2)、3) 種情況相比,由于鏈表沒有頭結(jié)點(diǎn),在頭部插入新結(jié)點(diǎn),此結(jié)點(diǎn)之前沒有任何結(jié)點(diǎn),實(shí)現(xiàn)的步驟如下:

  1. 將新結(jié)點(diǎn)的指針指向首元結(jié)點(diǎn);

  2. 將頭指針指向新結(jié)點(diǎn)。


實(shí)現(xiàn)代碼如下:

注意當(dāng) add==1 成立時(shí),形參指針 p 的值會發(fā)生變化,因此需要它的新值作為函數(shù)的返回值返回。

鏈表刪除元素

從鏈表中刪除指定數(shù)據(jù)元素時(shí),實(shí)則就是將存有該數(shù)據(jù)元素的節(jié)點(diǎn)從鏈表中摘除。

對于有頭結(jié)點(diǎn)的鏈表來說,無論刪除頭部(首元結(jié)點(diǎn))、中部、尾部的結(jié)點(diǎn),實(shí)現(xiàn)方式都一樣,執(zhí)行以下三步操作:

  1. 找到目標(biāo)元素所在結(jié)點(diǎn)的直接前驅(qū)結(jié)點(diǎn);

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

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

從鏈表上摘除目標(biāo)節(jié)點(diǎn),只需找到該節(jié)點(diǎn)的直接前驅(qū)節(jié)點(diǎn) temp,執(zhí)行如下操作:

例如,從存有?{1,2,3,4}?的鏈表中刪除存儲元素 3 的結(jié)點(diǎn),則此代碼的執(zhí)行效果如圖 3 所示:


圖 3 帶頭結(jié)點(diǎn)鏈表刪除元素


實(shí)現(xiàn)代碼如下:

對于不帶頭結(jié)點(diǎn)的鏈表,需要單獨(dú)考慮刪除首元結(jié)點(diǎn)的情況,刪除其它結(jié)點(diǎn)的方式和圖 3 完全相同,如下圖所示:

圖 4 不帶頭結(jié)點(diǎn)鏈表刪除結(jié)點(diǎn)


實(shí)現(xiàn)代碼如下:

函數(shù)返回 1 時(shí),表示刪除成功;返回 -1,表示刪除失敗。注意,該函數(shù)的形參 p 為二級指針,調(diào)用時(shí)需要傳遞鏈表頭指針的地址。


鏈表查找元素

在鏈表中查找指定數(shù)據(jù)元素,最常用的方法是:從首元結(jié)點(diǎn)開始依次遍歷所有節(jié)點(diǎn),直至找到存儲目標(biāo)元素的結(jié)點(diǎn)。如果遍歷至最后一個結(jié)點(diǎn)仍未找到,表明鏈表中沒有存儲該元素。

因此,鏈表中查找特定數(shù)據(jù)元素的 C 語言實(shí)現(xiàn)代碼為:

注意第 5 行代碼,對于有結(jié)點(diǎn)的鏈表,需要先將 p 指針指向首元結(jié)點(diǎn);反之,對于不帶頭結(jié)點(diǎn)的鏈表,注釋掉第 5 行代碼即可。


鏈表更新元素

更新鏈表中的元素,只需通過遍歷找到存儲此元素的節(jié)點(diǎn),對節(jié)點(diǎn)中的數(shù)據(jù)域做更改操作即可。

直接給出鏈表中更新數(shù)據(jù)元素的 C 語言實(shí)現(xiàn)代碼:

函數(shù)返回 1,表示更改成功;返回?cái)?shù)字 -1,表示更改失敗。如果是沒有頭結(jié)點(diǎn)的鏈表,直接刪除第 3 行代碼即可。


總結(jié)

以上內(nèi)容詳細(xì)介紹了對鏈表中數(shù)據(jù)元素做"增刪查改"的實(shí)現(xiàn)過程及 C 語言代碼,最后給大家一段完整的代碼,實(shí)現(xiàn)對有頭結(jié)點(diǎn)鏈表的“增刪查改”:

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

初始化鏈表為:
1 2 3 4
在第 3 的位置上添加元素 6:
1 2 6 3 4
刪除元素4:
1 2 6 3
查找元素 2:
元素 2 的位置為:2
更改元素 1 的值為 6:
6 2 6 3

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

分享到微博請遵守國家法律
临漳县| 托克逊县| 邹平县| 察隅县| 响水县| 泗水县| 阿瓦提县| 通化县| 沁水县| 环江| 沁阳市| 卢湾区| 澄江县| 凌源市| 德阳市| 河西区| 新化县| 北宁市| 锦州市| 五常市| 华宁县| 嘉黎县| 平顺县| 罗城| 社会| 交口县| 合山市| 呼和浩特市| 兴仁县| 武清区| 盐边县| 林周县| 石首市| 来宾市| 景宁| 梧州市| 读书| 色达县| 都兰县| 鄂伦春自治旗| 垦利县|