日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言,链表

發(fā)布時(shí)間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言,链表 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

定義一個(gè)鏈表的節(jié)點(diǎn)

之前說(shuō)到樹(shù),里面也有一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)是用來(lái)存數(shù)據(jù)的,不管是樹(shù)還是其他什么數(shù)據(jù)結(jié)構(gòu),最終的目的都是用來(lái)處理數(shù)據(jù)的,所以節(jié)點(diǎn)里面包含兩個(gè)東西,一個(gè)是指針,指針可以指向其他位置,可以是下一個(gè)節(jié)點(diǎn),可以是上一個(gè)節(jié)點(diǎn),還有一個(gè)東西就是數(shù)據(jù)本身,我們用一個(gè)int來(lái)代表數(shù)據(jù),如果是很復(fù)雜的數(shù)據(jù),我們也可以用結(jié)構(gòu)體表示。

typedef struct Node{
int data;
struct Node * next;
}*p_Node;

定義一個(gè)鏈表頭結(jié)構(gòu)體

鏈表頭也可以是一個(gè)節(jié)點(diǎn),可以認(rèn)為他就是一個(gè)指針,這個(gè)指針就指向這個(gè)鏈表的表頭,所以我們還是用上面的結(jié)構(gòu)體來(lái)聲明這個(gè)頭節(jié)點(diǎn),再換個(gè)名字就好了。

typedef struct head{
p_Node root;
};

聲明一個(gè)鏈表頭

一個(gè)鏈表沒(méi)有頭是不行的,就像一個(gè)家庭沒(méi)有戶主是不行的,也像一個(gè)球隊(duì),如果沒(méi)有隊(duì)長(zhǎng)也是不行的,我們打正式比賽,還需要教練,但是正常一個(gè)球隊(duì),我們必須有一個(gè)隊(duì)長(zhǎng),隊(duì)長(zhǎng)非常重要,就像一個(gè)鏈表一樣,鏈表頭也是一樣的重要。

/*初始化一個(gè)鏈表*/
struct head p_head;
/*鏈表為空,鏈表指向下一項(xiàng)為空,說(shuō)明鏈表為空*/
p_head.root = NULL;

我們的鏈表頭是空的,沒(méi)有指向任何地方,這樣做有沒(méi)有問(wèn)題?所以執(zhí)行了那幾行代碼后,會(huì)變成這個(gè)樣子。這里提一下,可能很多初學(xué)者覺(jué)得這個(gè)有沒(méi)有問(wèn)題,到底是不是這樣的,我們回顧聲明和定義,什么是聲明,什么是定義呢?聲明和定義的主要區(qū)別是有沒(méi)有分配內(nèi)存空間,我們使用

struct head p_head;

定義了一個(gè)指針,那么這個(gè)就需要分配內(nèi)存空間。

向鏈表插入一個(gè)數(shù)據(jù)

插入數(shù)據(jù)的時(shí)候,因?yàn)槲覀冃枰摫眍^指針的位置,所以會(huì)做的判斷,正常插入一個(gè)數(shù)據(jù)到鏈表里面去的時(shí)候,先是開(kāi)辟一個(gè)節(jié)點(diǎn),然后操作這個(gè)節(jié)點(diǎn)的next指針,然后讓鏈表的尾部指向這個(gè)節(jié)點(diǎn)

鏈表源碼示例

#include "stdio.h"
#include "stdlib.h"

typedef struct Node{
int data;
struct Node * next;
}*p_Node;

typedef struct head{
p_Node root;
};

/*直接做插入的動(dòng)作,不給head 單獨(dú)分配內(nèi)存*/
int list_insert(struct head * p_head,int data)
{
/*新建一個(gè)節(jié)點(diǎn)*/
p_Node pTemp = (p_Node)malloc(sizeof(struct Node));
/*把數(shù)據(jù)放入這個(gè)新建的節(jié)點(diǎn)里面*/
pTemp->data = data;
pTemp->next = NULL;

if(p_head->root == NULL)
{
p_head->root = pTemp;
printf("#1list_insert:%d\n",data);
return (0);
}else{

/*找到鏈表的尾部節(jié)點(diǎn)*/
p_Node pTemp1 = p_head->root;
while(pTemp1->next != NULL)
{
pTemp1 = pTemp1->next;
}

/*插入新節(jié)點(diǎn)*/
pTemp1->next = pTemp;

printf("#2list_insert:%d\n",data);
return (0);
}
}

int list_traverse(p_Node node)
{
if(node == NULL)
{
printf("list_traverse: pHead null \n");
return (-1);
}

p_Node pTemp1 = node;
while(pTemp1 != NULL)
{
printf("data:%d\n",pTemp1->data);
pTemp1 = pTemp1->next;
}
}

int main()
{
int i = 0;
printf("main Entering ...\n");
/*初始化一個(gè)鏈表*/
struct head p_head;
/*鏈表為空,鏈表指向下一項(xiàng)為空,說(shuō)明鏈表為空*/
p_head.root = NULL;

/*像鏈表插入數(shù)據(jù)*/
for(i = 0;i< 10;i++)
{
list_insert(&p_head,i);
}

/*遍歷鏈表*/
list_traverse(p_head.root);

printf("main Exiting ...\n");
return (0);
}

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

最后

用上面這個(gè)圖片來(lái)表示鏈表就很簡(jiǎn)單了,我們后面還會(huì)看到循環(huán)鏈表,我們知道鏈表的尾部是指向NULL的,如果我們把最后的那個(gè)鏈表指向head,就是循環(huán)鏈表。

—————END—————

掃碼或長(zhǎng)按關(guān)注

回復(fù)「?加群?」進(jìn)入技術(shù)群聊

總結(jié)

以上是生活随笔為你收集整理的C语言,链表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。