0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

應(yīng)用開發(fā)中結(jié)構(gòu)體和鏈表的關(guān)系是怎樣的

玩轉(zhuǎn)單片機 ? 來源:玩轉(zhuǎn)單片機 ? 作者:玩轉(zhuǎn)單片機 ? 2022-12-12 10:57 ? 次閱讀

不知道各位讀者是怎么理解鏈表的,還有就是鏈表和結(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,我們下篇推文再見!

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 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)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    C語言和C++結(jié)構(gòu)的區(qū)別

    同樣是結(jié)構(gòu),看看在C語言和C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?101次閱讀

    在TAS5558兩者之間的映射關(guān)系怎樣的?

    在TAS5558,兩者之間的映射關(guān)系怎樣的?
    發(fā)表于 10-18 07:18

    ota升級的庫結(jié)構(gòu)upgrade_server_infopespconn的作用是什么?

    check_cb; struct espconn *pespconn; }; 這個結(jié)構(gòu)已經(jīng)有ip,port,pespconn這個結(jié)構(gòu)
    發(fā)表于 07-12 06:33

    你是否真的了解結(jié)構(gòu)占用了多少字節(jié)?

    結(jié)構(gòu)成員所占內(nèi)存空間大小一般情況下,如果想知道結(jié)構(gòu)成員的內(nèi)存占用情況需要:1、先用結(jié)構(gòu)在內(nèi)
    的頭像 發(fā)表于 06-04 08:04 ?362次閱讀
    你是否真的了解<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>占用了多少字節(jié)?

    嵌入式C語言結(jié)構(gòu)基本實現(xiàn)

    : ? ??在struct 聲明了一個含有若干新成員的數(shù)據(jù)類型。 ????tag ?是結(jié)構(gòu)標(biāo)簽。 ????member-list ?是標(biāo)準(zhǔn)的變量定義,比如 int i; 或者 float f,或者其他
    的頭像 發(fā)表于 05-11 08:49 ?908次閱讀
    嵌入式<b class='flag-5'>中</b>C語言<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>基本實現(xiàn)

    數(shù)組和鏈表在內(nèi)存的區(qū)別 數(shù)組和鏈表的優(yōu)缺點

    數(shù)組和鏈表在內(nèi)存的區(qū)別 數(shù)組和鏈表的優(yōu)缺點? 數(shù)組和鏈表是常見的數(shù)據(jù)結(jié)構(gòu),用于組織和存儲數(shù)據(jù)。它們在內(nèi)存
    的頭像 發(fā)表于 02-21 11:30 ?859次閱讀

    數(shù)組和鏈表有何區(qū)別

    數(shù)組和鏈表的區(qū)別,這個問題,不僅面試中經(jīng)常遇到,考研的同學(xué)也得掌握才行。
    的頭像 發(fā)表于 02-19 15:33 ?435次閱讀
    數(shù)組和<b class='flag-5'>鏈表</b>有何區(qū)別

    經(jīng)典 C 語言編程,結(jié)構(gòu)和聯(lián)合體如何共用?

    結(jié)構(gòu) 結(jié)構(gòu)占用的內(nèi)存大小,首先和編譯器的系統(tǒng)位數(shù)有關(guān)系,類似于CPU是 64 bits 還是 32 bits 的情形;其次,
    的頭像 發(fā)表于 01-11 18:24 ?1230次閱讀
    經(jīng)典 C 語言編程,<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>和聯(lián)合體如何共用?

    結(jié)構(gòu)與指針的關(guān)系

    在C語言中,結(jié)構(gòu)(Struct)是一種用戶自定義的數(shù)據(jù)類型,它允許您將不同類型的數(shù)據(jù)項組合在一起,以便形成一個更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)可以
    的頭像 發(fā)表于 01-11 08:00 ?913次閱讀
    <b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>與指針的<b class='flag-5'>關(guān)系</b>

    keil arm工程結(jié)構(gòu)1字節(jié)對齊如何實現(xiàn)

    在Keil Arm工程結(jié)構(gòu)的對齊方式可以通過使用特定的編譯器指令或者關(guān)鍵字來實現(xiàn)。結(jié)構(gòu)的對齊方式會直接影響
    的頭像 發(fā)表于 01-05 14:40 ?3315次閱讀

    使用關(guān)系數(shù)據(jù)庫的半結(jié)構(gòu)化數(shù)據(jù)

    NoSQL革命已經(jīng)進(jìn)入了關(guān)系世界。您可能正在使用關(guān)系數(shù)據(jù)庫,但仍必須查詢和理解隱藏在文本列、JSON或 XML文檔的半結(jié)構(gòu)化數(shù)據(jù)。
    的頭像 發(fā)表于 12-20 10:46 ?602次閱讀
    使用<b class='flag-5'>關(guān)系</b>數(shù)據(jù)庫<b class='flag-5'>中</b>的半<b class='flag-5'>結(jié)構(gòu)</b>化數(shù)據(jù)

    數(shù)據(jù)結(jié)構(gòu):刪除有序鏈表的重復(fù)節(jié)點

    給定一個有序單鏈表(從小到大有序)的頭結(jié)點head(該結(jié)點有值),刪除鏈表的重復(fù)元素,使鏈表的所有元素都只出現(xiàn)一次。如當(dāng)輸入 {1,1,
    的頭像 發(fā)表于 12-05 15:46 ?812次閱讀
    數(shù)據(jù)<b class='flag-5'>結(jié)構(gòu)</b>:刪除有序<b class='flag-5'>鏈表</b>的重復(fù)節(jié)點

    數(shù)據(jù)結(jié)構(gòu):判斷鏈表回文結(jié)構(gòu)

    給定一個鏈表,判斷該鏈表是否為回文結(jié)構(gòu)。回文是指該字符串正序逆序完全一致。如當(dāng)輸入鏈表 {1,2,3,2,1} 時,斷定是回文結(jié)構(gòu),輸出Tr
    的頭像 發(fā)表于 12-01 13:26 ?585次閱讀
    數(shù)據(jù)<b class='flag-5'>結(jié)構(gòu)</b>:判斷<b class='flag-5'>鏈表</b>回文<b class='flag-5'>結(jié)構(gòu)</b>

    數(shù)據(jù)結(jié)構(gòu):單鏈表的排序

    給定一個單鏈表的頭結(jié)點head(該結(jié)點有值),長度為n的無序單鏈表,對其按升序排序后,返回新鏈表。如當(dāng)輸入鏈表 {3,1,4,5,2} 時,經(jīng)升序排列后,原
    的頭像 發(fā)表于 11-30 13:56 ?1443次閱讀
    數(shù)據(jù)<b class='flag-5'>結(jié)構(gòu)</b>:單<b class='flag-5'>鏈表</b>的排序

    安全存儲功能中使用的重要結(jié)構(gòu)

    安全存儲功能中使用的重要結(jié)構(gòu) 在整個安全存儲功能的操作過程,存在一些很重要的結(jié)構(gòu),這些結(jié)構(gòu)
    的頭像 發(fā)表于 11-21 14:36 ?465次閱讀
    安全存儲功能中使用的重要<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>