衡阳派盒市场营销有限公司

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

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

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

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

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

不知道各位讀者是怎么理解鏈表的,還有就是鏈表和結(jié)構(gòu)體的關(guān)系?最近開發(fā)的項(xiàng)目資源不是很緊湊,就用了面向?qū)ο缶帉懀痛罅康氖褂玫浇Y(jié)構(gòu)體,有時(shí)還會(huì)配合共同體嵌套使用,順便回顧了一些結(jié)構(gòu)體的使用,這里主要簡(jiǎn)單回顧結(jié)構(gòu)體和鏈表的關(guān)系;

鏈表在RTOS上比較常見(jiàn),這里會(huì)把復(fù)雜的東西簡(jiǎn)單化,這也是為啥有些推文的文字很少的原因,碼農(nóng)的產(chǎn)出就是代碼,核心就是看相關(guān)代碼;鏈表分單鏈表和雙鏈表,核心都差不多的,就用單鏈表做展示;

| 定義節(jié)點(diǎn)

鏈表的最小單位就是節(jié)點(diǎn),節(jié)點(diǎn)的定義就是鏈表的基礎(chǔ),下面展示一些定義的小案例:

//正確定義方式之一
struct node
{
    unsigned char data;
    struct node *next;
};


//錯(cuò)誤定義方式之一
typrder struct node
{
    unsigned char data;
    node_t *next;
}node_t;

代碼都是一行一行執(zhí)行的,如果沒(méi)有提前聲明調(diào)用的話,代碼編譯階段就會(huì)報(bào)錯(cuò),同樣的,類型定義比類型調(diào)用使用晚也會(huì)報(bào)錯(cuò);有些初學(xué)者會(huì)對(duì)結(jié)構(gòu)體使用同名結(jié)構(gòu)體會(huì)有疑問(wèn),其實(shí)把同名的結(jié)構(gòu)體換個(gè)思路,上面的第二行是不是定義了一個(gè)struct node類型的數(shù)據(jù),結(jié)構(gòu)體成員是不是變量類型+變量名,是不是符合結(jié)構(gòu)體的基本使用,所有這樣的用法是合法的;

| 鏈接成表

鏈表的最小單位就是節(jié)點(diǎn),那么多定義幾個(gè)節(jié)點(diǎn),然后就讓它們鏈接起來(lái),那么就形成了鏈表,那么這條“鏈”是啥呢,有時(shí)怎么把它們關(guān)聯(lián)起來(lái)的呢?學(xué)過(guò)鏈表的同學(xué)就很清楚,就是節(jié)點(diǎn)中的同名結(jié)構(gòu)體指針,這個(gè)指針就像電話號(hào)碼,直接通過(guò)電話號(hào)碼就能找到對(duì)應(yīng)的人,同理也可以通過(guò)指針找到對(duì)應(yīng)的節(jié)點(diǎn);

申請(qǐng)內(nèi)存的坑,申請(qǐng)的內(nèi)存一定要強(qiáng)制轉(zhuǎn)換類型,不強(qiáng)制轉(zhuǎn)換默認(rèn)是返回一個(gè)任意類型的指針(void *),不強(qiáng)制轉(zhuǎn)換類型編譯也會(huì)出錯(cuò):

int main()
{
inttemp=10;
// 沒(méi)有強(qiáng)制轉(zhuǎn)換類型,編譯報(bào)錯(cuò)
  int *p = malloc(siezof(temp))
}

列個(gè)完整的小程序,看完基本就學(xué)會(huì)了鏈表:

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


typedef struct node
{
    unsigned char data;
    struct node *next;
}node_t;


int main()
{
  // 創(chuàng)建幾個(gè)節(jié)點(diǎn)
  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é)點(diǎn)1的數(shù)據(jù) 
  printf("data:%d
", node1->next->data);        // 節(jié)點(diǎn)2的數(shù)據(jù)
  printf("data:%d
", node1->next->next->data);    // 節(jié)點(diǎn)3的數(shù)據(jù)
  printf("data:%d
", node1->next->next->next->data);  // 節(jié)點(diǎn)1的數(shù)據(jù)
  
  // 釋放內(nèi)存 
  free(node1); 
  free(node2);
  free(node3);
}

鏈表的增刪改查本質(zhì)就是對(duì)節(jié)點(diǎn)中的指針操作,以及節(jié)點(diǎn)的創(chuàng)建和釋放,基本不是什么大問(wèn)題;看到這應(yīng)該對(duì)鏈表基礎(chǔ)知識(shí)沒(méi)有疑問(wèn)了吧,覺(jué)得有收獲的同學(xué)動(dòng)動(dòng)小手指點(diǎn)個(gè)贊吧,我是Noah,我們下篇推文再見(jiàn)!

審核編輯:郭婷

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

    關(guān)注

    22

    文章

    819

    瀏覽量

    119889
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4828

    瀏覽量

    69055

原文標(biāo)題:通俗|結(jié)構(gòu)體與鏈表

文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī),微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    結(jié)構(gòu)成員的順序會(huì)影響結(jié)構(gòu)的大小嗎

    相同的結(jié)構(gòu)成員,如果把順序調(diào)整一下,會(huì)不會(huì)影響結(jié)構(gòu)的大小? 答案是會(huì)的,這主要跟字節(jié)對(duì)齊有關(guān)。 比如這樣的結(jié)構(gòu)
    的頭像 發(fā)表于 11-25 16:24 ?268次閱讀

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

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

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

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

    請(qǐng)問(wèn)VG與增益的線性關(guān)系怎樣的?

    看了VCA820數(shù)據(jù)手冊(cè),沒(méi)找到VG與增益的線性關(guān)系怎樣的,應(yīng)該是增益線性可控的吧??還是自己理解錯(cuò)咯? 請(qǐng)求回答!!!
    發(fā)表于 09-26 06:21

    AMC1302-Q1芯片輸入輸出電壓對(duì)應(yīng)關(guān)系怎樣的?

    AMC1302-Q1芯片輸入輸出電壓對(duì)應(yīng)關(guān)系怎樣的?根據(jù)數(shù)據(jù)手冊(cè),增益41,輸出Vo=(V+—V-)=1.44+41*Vi 嗎? 另下面電路圖是TI官網(wǎng)上的設(shè)計(jì),輸入1.2mV/A與輸出77.7mV/A,是
    發(fā)表于 08-08 08:01

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

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

    ESP32-C3如何把一個(gè)const結(jié)構(gòu)固定放在生成的bin文件的最末尾?

    我的芯片是ESP32-C3,需要把一個(gè)const結(jié)構(gòu)固定放在生成的bin文件的最末尾,例如: #define USER_SECTION__attribute__ ((used,section
    發(fā)表于 06-18 07:52

    請(qǐng)問(wèn)esp-idf&vscode結(jié)構(gòu)索引不到對(duì)應(yīng)的成員如何解決?

    兄弟們,我用VSCode 初始化結(jié)構(gòu)時(shí),索引不到對(duì)應(yīng)的成員,并且索引會(huì)出現(xiàn)不屬于結(jié)構(gòu)體內(nèi)的東西,有解決辦法嗎,球球了
    發(fā)表于 06-14 06:42

    MOSFET的基本結(jié)構(gòu)與工作原理

    MOS柵結(jié)構(gòu)是MOSFET的重要組成部分,一個(gè)典型的N溝道增強(qiáng)型結(jié)構(gòu)示意圖如圖1所示。其中柵極、源極和漏極位于同一個(gè)平面內(nèi),半導(dǎo)體的另一個(gè)平面可以稱為端,所以在一些書籍和資料中,也將MOSFET
    發(fā)表于 06-13 10:07

    你是否真的了解結(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 ?570次閱讀
    你是否真的了解<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>占用了多少字節(jié)?

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

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

    定義了一個(gè)結(jié)構(gòu),但是分配的地址不連續(xù),為什么?

    定義了一個(gè)結(jié)構(gòu),但是分配的地址不連續(xù),是KEIL的問(wèn)題還是我的問(wèn)題?
    發(fā)表于 04-26 08:12

    C語(yǔ)言結(jié)構(gòu)史上最詳細(xì)的講解【軟件干貨】

    struct結(jié)構(gòu)數(shù)據(jù)類型 前言 我們知道,在C語(yǔ)言中有一些基本的數(shù)據(jù)類型,如?char?int?float?long?double?string(c99) 等等數(shù)據(jù)類型,他們可以表示一些事物
    的頭像 發(fā)表于 03-28 17:52 ?853次閱讀

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

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

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

    數(shù)組和鏈表的區(qū)別,這個(gè)問(wèn)題,不僅面試中經(jīng)常遇到,考研的同學(xué)也得掌握才行。
    的頭像 發(fā)表于 02-19 15:33 ?572次閱讀
    數(shù)組和<b class='flag-5'>鏈表</b>有何區(qū)別
    黔江区| 爱赢娱乐城| 什么百家乐平注法| 百家乐官网鞋业| 新奥博娱乐城体育投注| 百家乐电投网址| 沙龙百家乐官网娱乐平台| 澳门百家乐论坛| 威尼斯人娱乐场色| 百家乐有无规律可循| 百家乐官网龙虎台布多少钱| 岑溪市| 大发888娱乐场下载 制度| 申博百家乐公式软件| 飞天百家乐官网的玩法技巧和规则| 百家乐官网棋牌技巧| 大发888娱乐场ylc8| 百家乐常用公式| 做生意招牌什么颜色旺财| 百家乐官网免佣台| 娱乐| 六合彩开奖记录| 全讯网开奖结果| 阴宅24山坟前放水口| 百家乐官网公式软件| 百家乐官网赢新全讯网| 六合彩公式| 威尼斯人娱乐场图片| 百家乐真人游戏娱乐平台| 百家乐实战技术| 百家乐官网反缆公式| 百家乐官网翻天片尾曲| 普格县| 博彩网址大全| 威尼斯人娱乐网网址| 免佣百家乐规则| 百家乐投注法减注| 恒利百家乐官网的玩法技巧和规则 | 百家乐筹码| 香港六合彩现场直播| 大发888游戏平台3403|