不知道各位讀者是怎么理解鏈表的,還有就是鏈表和結(jié)構(gòu)體的關(guān)系?最近開發(fā)的項目資源不是很緊湊,就用了面向?qū)ο缶帉?,就大量的使用到結(jié)構(gòu)體,有時還會配合共同體嵌套使用,順便回顧了一些結(jié)構(gòu)體的使用,這里主要簡單回顧結(jié)構(gòu)體和鏈表的關(guān)系;
鏈表在RTOS上比較常見,這里會把復(fù)雜的東西簡單化,這也是為啥有些推文的文字很少的原因,碼農(nóng)的產(chǎn)出就是代碼,核心就是看相關(guān)代碼;鏈表分單鏈表和雙鏈表,核心都差不多的,就用單鏈表做展示;
| 定義節(jié)點
鏈表的最小單位就是節(jié)點,節(jié)點的定義就是鏈表的基礎(chǔ),下面展示一些定義的小案例:
//正確定義方式之一 struct node { unsigned char data; struct node *next; }; //錯誤定義方式之一 typrder struct node { unsigned char data; node_t *next; }node_t;
代碼都是一行一行執(zhí)行的,如果沒有提前聲明調(diào)用的話,代碼編譯階段就會報錯,同樣的,類型定義比類型調(diào)用使用晚也會報錯;有些初學(xué)者會對結(jié)構(gòu)體使用同名結(jié)構(gòu)體會有疑問,其實把同名的結(jié)構(gòu)體換個思路,上面的第二行是不是定義了一個struct node類型的數(shù)據(jù),結(jié)構(gòu)體成員是不是變量類型+變量名,是不是符合結(jié)構(gòu)體的基本使用,所有這樣的用法是合法的;
| 鏈接成表
鏈表的最小單位就是節(jié)點,那么多定義幾個節(jié)點,然后就讓它們鏈接起來,那么就形成了鏈表,那么這條“鏈”是啥呢,有時怎么把它們關(guān)聯(lián)起來的呢?學(xué)過鏈表的同學(xué)就很清楚,就是節(jié)點中的同名結(jié)構(gòu)體指針,這個指針就像電話號碼,直接通過電話號碼就能找到對應(yīng)的人,同理也可以通過指針找到對應(yīng)的節(jié)點;
申請內(nèi)存的坑,申請的內(nèi)存一定要強制轉(zhuǎn)換類型,不強制轉(zhuǎn)換默認(rèn)是返回一個任意類型的指針(void *),不強制轉(zhuǎn)換類型編譯也會出錯:
int main() { inttemp=10; // 沒有強制轉(zhuǎn)換類型,編譯報錯 int *p = malloc(siezof(temp)) }
列個完整的小程序,看完基本就學(xué)會了鏈表:
#include "stdio.h" #include "stdlib.h" typedef struct node { unsigned char data; struct node *next; }node_t; int main() { // 創(chuàng)建幾個節(jié)點 node_t* node1=(node_t*)malloc(sizeof(node_t)); node_t* node2=(node_t*)malloc(sizeof(node_t)); node_t* node3=(node_t*)malloc(sizeof(node_t)); // 初始數(shù)據(jù) node1->data = 1; node2->data = 2; node3->data = 3; // 鏈接成表 node1->next = node2; node2->next = node3; node3->next = node1; // 打印數(shù)據(jù) printf("data:%d ", node1->data); // 節(jié)點1的數(shù)據(jù) printf("data:%d ", node1->next->data); // 節(jié)點2的數(shù)據(jù) printf("data:%d ", node1->next->next->data); // 節(jié)點3的數(shù)據(jù) printf("data:%d ", node1->next->next->next->data); // 節(jié)點1的數(shù)據(jù) // 釋放內(nèi)存 free(node1); free(node2); free(node3); }
鏈表的增刪改查本質(zhì)就是對節(jié)點中的指針操作,以及節(jié)點的創(chuàng)建和釋放,基本不是什么大問題;看到這應(yīng)該對鏈表基礎(chǔ)知識沒有疑問了吧,覺得有收獲的同學(xué)動動小手指點個贊吧,我是Noah,我們下篇推文再見!
審核編輯:郭婷
-
RTOS
+關(guān)注
關(guān)注
21文章
809瀏覽量
119361 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68230
原文標(biāo)題:通俗|結(jié)構(gòu)體與鏈表
文章出處:【微信號:玩轉(zhuǎn)單片機,微信公眾號:玩轉(zhuǎn)單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論