日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

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

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

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

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

空鏈表

--->NULL

head

有n個(gè)結(jié)點(diǎn)的數(shù)組

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

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

創(chuàng)建鏈表

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

typedef struct student{

int score;

struct student *next;

} LinkList;

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

LinkList *creat(int n){

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

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

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

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é)點(diǎn)值

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

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

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é)點(diǎn)不存在");

}

}

刪除鏈表節(jié)點(diǎn)

刪除鏈表的元素也就是把前節(jié)點(diǎn)的指針域跨過要?jiǎng)h除的結(jié)點(diǎn)指向下下個(gè)節(jié)點(diǎn)。即:p->next = q->next;然后放出q節(jié)點(diǎn)的空間,即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é)點(diǎn)不存在");

}

}

插入鏈表節(jié)點(diǎn)

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

增加遞歸節(jié)點(diǎn)用到了兩個(gè)結(jié)構(gòu)體指針跟一個(gè)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é)點(diǎn)的指針域,也就是說把in的指針域指向t的下一個(gè)節(jié)點(diǎn)

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

}

else {

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

}

}

輸出鏈表

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

while (h->next != NULL) {

h = h->next;

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

}

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

總結(jié)

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

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