本文概要
本篇文章主要介紹數(shù)據(jù)結(jié)構(gòu)中單向鏈表各種操作,適合有C語言基礎(chǔ)的同學(xué),文中描述和代碼示例很詳細(xì),干貨滿滿,感興趣的小伙伴快來一起學(xué)習(xí)吧!
??????個(gè)人簡介??????
??大家好!我是新人博主朦朧的雨夢,希望大家多多關(guān)照和支持??????
??大家一起努力,共同成長,相信我們都會(huì)遇到更好的自己??????
??期待我的文章能給各位帶來知識(shí)的收獲和解決問題的靈感??????
??大家的三連是我不斷更新的動(dòng)力??????
學(xué)習(xí)目標(biāo)??
??1.了解單向鏈表的結(jié)構(gòu)特點(diǎn);
??2.掌握單向鏈表的創(chuàng)建;
??3.掌握單向鏈表的各種操作。
?一.單向鏈表
??1.單向鏈表的定義
??單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲(chǔ)單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點(diǎn)來表示的,每個(gè)結(jié)點(diǎn)的構(gòu)成:元素(數(shù)據(jù)元素的映象) + 指針(指示后繼元素存儲(chǔ)位置),元素就是存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元,指針就是連接每個(gè)結(jié)點(diǎn)的地址數(shù)據(jù)。乍一看的意思就像是乍一看,每個(gè)字都認(rèn)識(shí),連在一起就成這樣了:
其實(shí),很簡單,我用一張圖來解釋單向鏈表的結(jié)構(gòu):
是不是一下就清楚什么是單向鏈表了,關(guān)于頭指針head和終端結(jié)點(diǎn):
-
單鏈表中每個(gè)結(jié)點(diǎn)的存儲(chǔ)地址是存放在其前趨結(jié)點(diǎn)Pnext域中,而開始結(jié)點(diǎn)無前趨,故應(yīng)設(shè)頭指針head指向開始結(jié)點(diǎn)。鏈表由頭指針唯一確定,單鏈表可以用頭指針的名字來命名。
-
終端結(jié)點(diǎn)無后繼,故終端結(jié)點(diǎn)的指針域?yàn)榭?,即NULL。
?二.單向鏈表的創(chuàng)建
1.首先,我們需要定義一個(gè)結(jié)構(gòu)體來裝著元素和指向下一個(gè)元素節(jié)點(diǎn)的指針
#include<stdio.h>
//定義結(jié)構(gòu)體
struct Mystruct
{
int data;
struct Mystruct *pnext;
};
2.接下來,我們創(chuàng)建一個(gè)無空頭的鏈表,首先定義頭尾指針(方便對鏈表進(jìn)行
操作)
#include<stdio.h>
//定義結(jié)構(gòu)體
struct Mystruct
{
int data;
struct Mystruct *pnext;
};
int main(void)
{
//定義頭尾指針
struct Mystruct *phead = NULL;
struct Mystruct *pend= NULL;
return 0;
}
3.以尾添加(尾插)為例,因?yàn)樾枰淖冎羔樀闹赶?,必須傳遞二級指針,現(xiàn)在寫出我們的第一個(gè)鏈表
void end_add(struct Mystruct **phead,struct Mystruct **pend,int add_data)
{ //參數(shù)合法性檢測
if (NULL == phead || NULL == pend)
return;
//申請新節(jié)點(diǎn)
struct Mystruct* new_pdode = (struct Mystruct*)malloc(sizeof(struct Mystruct));
//檢測是否申請成功
if (NULL == new_pdode)
{
printf("空間申請失敗");
return;
}
//新節(jié)點(diǎn)賦值
new_pdode->data = add_data;
new_pdode->pnext = NULL;
//連接
//無節(jié)點(diǎn)的情況
if (NULL == *phead && NULL == *pend)
{
*phead = new_pdode;
}
//有節(jié)點(diǎn)情況
else
{
(*pend)->pnext = new_pdode;
}
*pend = new_pdode;
}
?三.單向鏈表的各種操作
1.增加元素
上面講了尾插,所以就該講頭插了:
void head_add(struct Mystruct** phead, struct Mystruct** pend, int adddata)
{
//參數(shù)合法性檢測
if (NULL == phead || NULL == pend)
return;
//創(chuàng)造新節(jié)點(diǎn)
struct Mystruct* new_pdode = (struct Mystruct*)malloc(sizeof(struct Mystruct));
//合法性檢測
if (NULL == new_pdode)
{
printf("空間申請失敗");
return;
}
//新節(jié)點(diǎn)賦值
new_pdode->data = adddata;
new_pdode->pnext = NULL;
//連接
//無節(jié)點(diǎn)的情況
if (NULL == *phead && NULL == *pend)
{
*pend = new_pdode;
}
//有節(jié)點(diǎn)的情況
else
{
new_pdode->pnext = *phead;
}
*phead = new_pdode;
}
2.查找元素
1.根據(jù)下標(biāo)查找元素
struct Mystruct* index_find(struct Mystruct* phead, int index)
{
//參數(shù)合法性檢測
if (NULL == phead || index < 0)
return NULL;
//記錄頭指針
struct Mystruct* p = phead;
for (int i = 0; i < index; i++)
{
p = p->pnext;
}
return p;
}
2.根據(jù)數(shù)據(jù)查找元素
void data_find(struct Mystruct* phead, int designated_data)
{
//參數(shù)合法性檢測
if (NULL == phead)
return;
//記錄頭指針
struct Mystruct* ptemp = phead;
while (ptemp != NULL)
{
if (ptemp->data == designated_data)
{
printf("找到了");
break;
}
ptemp = ptemp->pnext;
}
return;
}
3.修改元素?cái)?shù)據(jù)
根據(jù)下標(biāo)修改元素?cái)?shù)據(jù)
void index_change(struct Mystruct *phead,int index, int change_data)
{
//參數(shù)合法性檢測
if (index < 0)
return;
//調(diào)用下標(biāo)查找函數(shù)
struct Mystruct* p = index_find(phead, index);
//更改數(shù)據(jù)
p->data = change_data;
}
4.刪除元素
void freelist(struct Mystruct* phead)
{
//記錄頭指針
struct Mystruct* pt = phead;
//開始刪除
while (pt != NULL)
{
struct Mystruct* p = pt;
pt = pt->pnext;
free(p);
}
}
?四.結(jié)語
單向鏈表的操作非常重要,對于新手來說。可能需要重復(fù)捋幾遍思路,一旦掌握就會(huì)覺得非常簡單,相信大家通過這篇文章已經(jīng)可以掌握了單向鏈表的操作,今天就分享到這里,謝謝大家的觀看,有什么想法記得評論區(qū)告訴我!拜拜~? ? ?
??往期好文推薦
??TOP??.AI工具究竟是幫手還是對手???????????????????
??TOP??.Python爬蟲 | 利用python爬蟲獲取想要搜索的數(shù)據(jù)(某du)??????????????????文章來源:http://www.zghlxwxcb.cn/news/detail-432163.html
??TOP??.ChatGPT | 一文詳解ChatGPT(學(xué)習(xí)必備)??????????????????文章來源地址http://www.zghlxwxcb.cn/news/detail-432163.html
到了這里,關(guān)于帶你玩轉(zhuǎn)單向鏈表(學(xué)習(xí)必備)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!