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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何理解C语言链表,如何理解c语言链表

發(fā)布時間:2024/1/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何理解C语言链表,如何理解c语言链表 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C語言鏈表就是一種數(shù)據(jù)結(jié)構(gòu),可以在上面動態(tài)的進行傳輸分配還可以定義節(jié)點數(shù)據(jù)類別或者實現(xiàn)對節(jié)點的增刪改查等

鏈表是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)體指針在這里得到了充分的借助。鏈表可以動態(tài)的進行傳輸分配,也就是說,鏈表是一個功能極為強大的變量,它可以在結(jié)點中定義多種數(shù)據(jù)類別,還可以按照需要輕易增添,刪除,插入節(jié)點。接下來將在文章中為你們具體介紹C語言中的鏈表,希望對你們有所幫助

【推薦課程:C語言教程】

鏈表都有一個頭指針,一般以head來表示,存放的是一個地址。鏈表中的節(jié)點分為兩類,頭結(jié)點和通常節(jié)點,頭結(jié)點是沒有數(shù)據(jù)域的。鏈表中每個結(jié)點都分為兩部份,一個數(shù)據(jù)域,一個是指針域。鏈表就好似車鏈子一樣,head指向第一個元素:第一個元素既指向第二個元素;……,直到最后一個元素,該元素不再指向其他元素,它稱為“表尾”,它的地址部分存放了一個“NULL”(表示“空地址”),鏈表到此結(jié)束。作為有強大功能的鏈表,對它的操作顯然有許多,比如:鏈表的創(chuàng)建,修改,刪除,插入,輸出,排序,反序,清空鏈表的元素,求鏈表的長度等等。初學鏈表,一般從單向鏈表開始

空鏈表

--->NULL

head

有n個結(jié)點的數(shù)組

---->[p1]---->[p2]...---->[pn]---->[NULL]

head p1->next p2->next pn->next

創(chuàng)建鏈表

一般創(chuàng)建泛型我們都用typedef struct,因為這樣定義結(jié)構(gòu)體變量時,我們就可以直接可以用LinkList *a;定義結(jié)構(gòu)體類型變量了。

typedef struct student{

int score;

struct student *next;

} LinkList;

初始化一個鏈表,n為數(shù)組節(jié)點個數(shù)

LinkList *creat(int n){

LinkList *head, *node, *end;//定義頭節(jié)點,普通節(jié)點,尾部節(jié)點;

head = (LinkList*)malloc(sizeof(LinkList));//分配地址

end = head; //若是空鏈表則頭尾節(jié)點一樣

for (int i = 0; i < n; i++) {

node = (LinkList*)malloc(sizeof(LinkList));

scanf("%d", &node->score);

end->next = node;

end = node;

}

end->next = NULL;//結(jié)束創(chuàng)建

return head;

}

修改鏈表節(jié)點值

修改鏈表節(jié)點值很簡單。下面是一個傳入鏈表和要更改的結(jié)點c ++鏈表,來設置值的函數(shù)。

void change(LinkList *list,int n) {//n為第n個節(jié)點

LinkList *t = list;

int i = 0;

while (i < n && t != NULL) {

t = t->next;

i++;

}

if (t != NULL) {

puts("輸入要修改的值");

scanf("%d", &t->score);

}

else {

puts("節(jié)點不存在");

}

}

刪除鏈表節(jié)點

刪除鏈表的元素也就是把前節(jié)點的指針域跨過要刪除的結(jié)點指向下下個節(jié)點。即:p->next = q->next;然后放出q節(jié)點的空間,即free(q);

void delet(LinkList *list, int n) {

LinkList *t = list, *in;

int i = 0;

while (i < n && t != NULL) {

in = t;

t = t->next;

i++;

}

if (t != NULL) {

in->next = t->next;

free(t);

}

else {

puts("節(jié)點不存在");

}

}

插入鏈表節(jié)點

我們可以看起來,插入節(jié)點就是用插入前節(jié)點的指針域鏈接上插入節(jié)點的數(shù)據(jù)域c ++鏈表,再把插入節(jié)點的指針域鏈接上插入后節(jié)點的數(shù)據(jù)域。根據(jù)圖,插入節(jié)點也就是:e->next = head->next; head->next = e;

增加遞歸節(jié)點用到了兩個結(jié)構(gòu)體指針跟一個int數(shù)據(jù)。

void insert(LinkList *list, int n) {

LinkList *t = list, *in;

int i = 0;

while (i < n && t != NULL) {

t = t->next;

i++;

}

if (t != NULL) {

in = (LinkList*)malloc(sizeof(LinkList));

puts("輸入要插入的值");

scanf("%d", &in->score);

in->next = t->next;//填充in節(jié)點的指針域,也就是說把in的指針域指向t的下一個節(jié)點

t->next = in;//填充t節(jié)點的指針域,把t的指針域重新指向in

}

else {

puts("節(jié)點不存在");

}

}

輸出鏈表

輸出數(shù)組很簡單,邊遍歷邊輸出就行了

while (h->next != NULL) {

h = h->next;

printf("%d ", h->score);

}

總結(jié):以上就是本篇文章的全部內(nèi)容了,希望對你們有所幫助。

總結(jié)

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

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