0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

应用开发中结构体和链表的关系是怎样的

玩转单片机 来源:玩转单片机 作者:玩转单片机 2022-12-12 10:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

不知道各位读者是怎么理解链表的,还有就是链表和结构体的关系?最近开发的项目资源不是很紧凑,就用了面向对象编写,就大量的使用到结构体,有时还会配合共同体嵌套使用,顺便回顾了一些结构体的使用,这里主要简单回顾结构体和链表的关系;

链表在RTOS上比较常见,这里会把复杂的东西简单化,这也是为啥有些推文的文字很少的原因,码农的产出就是代码,核心就是看相关代码;链表分单链表和双链表,核心都差不多的,就用单链表做展示;

| 定义节点

链表的最小单位就是节点,节点的定义就是链表的基础,下面展示一些定义的小案例:

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


//错误定义方式之一
typrder struct node
{
    unsigned char data;
    node_t *next;
}node_t;

代码都是一行一行执行的,如果没有提前声明调用的话,代码编译阶段就会报错,同样的,类型定义比类型调用使用晚也会报错;有些初学者会对结构体使用同名结构体会有疑问,其实把同名的结构体换个思路,上面的第二行是不是定义了一个struct node类型的数据,结构体成员是不是变量类型+变量名,是不是符合结构体的基本使用,所有这样的用法是合法的;

| 链接成表

链表的最小单位就是节点,那么多定义几个节点,然后就让它们链接起来,那么就形成了链表,那么这条“链”是啥呢,有时怎么把它们关联起来的呢?学过链表的同学就很清楚,就是节点中的同名结构体指针,这个指针就像电话号码,直接通过电话号码就能找到对应的人,同理也可以通过指针找到对应的节点;

申请内存的坑,申请的内存一定要强制转换类型,不强制转换默认是返回一个任意类型的指针(void *),不强制转换类型编译也会出错:

int main()
{
inttemp=10;
// 没有强制转换类型,编译报错
  int *p = malloc(siezof(temp))
}

列个完整的小程序,看完基本就学会了链表:

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


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


int main()
{
  // 创建几个节点
  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));
  
  // 初始数据
  node1->data = 1;
  node2->data = 2;
  node3->data = 3;
  
  // 链接成表
  node1->next =  node2;
  node2->next =  node3;
  node3->next =  node1;
  
  // 打印数据
  printf("data:%d
", node1->data);          // 节点1的数据 
  printf("data:%d
", node1->next->data);        // 节点2的数据
  printf("data:%d
", node1->next->next->data);    // 节点3的数据
  printf("data:%d
", node1->next->next->next->data);  // 节点1的数据
  
  // 释放内存 
  free(node1); 
  free(node2);
  free(node3);
}

链表的增删改查本质就是对节点中的指针操作,以及节点的创建和释放,基本不是什么大问题;看到这应该对链表基础知识没有疑问了吧,觉得有收获的同学动动小手指点个赞吧,我是Noah,我们下篇推文再见!

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RTOS
    +关注

    关注

    25

    文章

    862

    浏览量

    122616
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73154

原文标题:通俗|结构体与链表

文章出处:【微信号:玩转单片机,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    typedef结构使用

    虽然结构的出现能够让我们有一个更科学的数据结构来管理数据,但是每次使用结构都需要struct...,未免显得有些冗长和麻烦。有了type
    发表于 12-08 07:04

    为什么不建议用匿名结构

    bit_1:1 ;uint8_t bit_2:1 ; }; uint8_t value; }info2; }info_t; 在这个例子,下面这个就是所谓的匿名结构,因为这个 struct 没有
    发表于 12-04 07:39

    C语言结构使用

    有时候需要将不同类型的数据组合为一个整体,以便于引用。例如,一名学生有学号、姓名、性别、年龄等属性,如果针对每个属性都单独定义一个变量,那么当有多名学生时变量就难以分清。结构就是用来管理不同类
    发表于 11-12 08:30

    请问EDSADC的采样值和实际输入电压值的换算关系怎样的?

    如题,像EVADC的换算关系是 端口电压值 = 采样值 / 4096 * 5(参考电压为5V,12bit精度条件下)。那么EDSADC转换完成后得到的采样值,它跟端口电压值的换算关系怎样的呢(一端输入,一端接地)?或者说是跟输
    发表于 07-22 07:02

    定义IO初始化结构

    由上述IOPORT相关功能的枚举类型我们可以知道,在对IOPORT模块进行初始化时需要根据情况配置它们。因此我们定义一个IOPORT初始化的结构类型IOPORT_Init_t,它的成员包括了由上述所有枚举类型所声明的变量,因此该结构
    的头像 发表于 07-16 16:26 1115次阅读

    化解决方案Jama Software,如何支持医疗设备开发的需求管理、风险管理与验证?

    医疗设备开发的需求管理太复杂?试试一化解决方案Jama Connect——支持ISO 1497等关键标准的合规认证、FMEA分析、端到端可追溯性与变更管理等。
    的头像 发表于 06-25 11:36 407次阅读
    一<b class='flag-5'>体</b>化解决方案Jama Software,如何支持医疗设备<b class='flag-5'>开发</b><b class='flag-5'>中</b>的需求管理、风险管理与验证?

    晶体结构晶面和晶向的关系

    晶面和晶向是晶体学两个核心的概念,它们与硅基集成电路工艺的晶体结构有密切的关系
    的头像 发表于 06-05 16:58 2895次阅读
    晶体<b class='flag-5'>结构</b><b class='flag-5'>中</b>晶面和晶向的<b class='flag-5'>关系</b>

    渗压计在混凝土结构的安装指南

    在现代土木工程和岩土工程,渗压计是监测混凝土结构体内孔隙水压力变化的重要工具。南京峟思公司生产的渗压计因其高精度和可靠性而被广泛应用于各种工程监测项目中。一、渗压计在混凝土结构
    的头像 发表于 05-28 10:55 384次阅读
    渗压计在混凝土<b class='flag-5'>结构</b><b class='flag-5'>体</b><b class='flag-5'>中</b>的安装指南

    GLAD应用:全息光栅模拟

    用于模拟全息记录介质形成的梯度折射率分布。全息结构一旦形成,就可以在传输过程中将一束入射光波逐渐转换成形成体全息结构的另一束光波。两束光波之间的能量传递转换效率与
    发表于 05-15 09:32

    程序设计与数据结构

    《程序设计与数据结构》重点阐述了三大方向内容: 1. C语言学习的痛点:针对当前工程师在C语言学习的痛点,如指针函数与函数指针,如何灵活应用结构
    发表于 05-13 16:45

    C语言中结构与联合体的深度解析:内存布局与应用场景

    一、基础概念与核心差异 1.1 结构(Struct)的本质 **结构是C语言中实现数据封装的基石,其核心特征在于内存独立性。每个成员变量在内存
    发表于 04-08 09:18

    学习智能开发

    智能是大模型的应用落地,正在学习,这本书太及时了,非常想看看。
    发表于 03-27 15:48

    软国际Lumi智能开发平台支持DeepSeek

    作为大模型领域的一颗璀璨新星,DeepSeek从模型结构到训推流程进行了全面优化,并完全开源,打破了算力依赖路径,推动行业从 “规模至上” 迈向 “效率优先”。软国际Lumi智能开发
    的头像 发表于 02-28 15:46 936次阅读

    机智云发布Gokit5 AI智能开发板:工业级智能流水线重构AIoT开发范式

    【2025年2月26日,广州】全球领先的AIoT服务商机智云正式发布“Gokit5AI智能开发板”,该产品作为行业首个全栈式AIoT开发中枢,深度融合火山引擎云原生架构、豆包多模态大模型、扣子智能
    的头像 发表于 02-26 13:33 889次阅读
    机智云发布Gokit5 AI智能<b class='flag-5'>体</b><b class='flag-5'>开发</b>板:工业级智能<b class='flag-5'>体</b>流水线重构AIoT<b class='flag-5'>开发</b>范式

    噪声与ADC的范围和位数是什么关系呢?怎样选用和匹配?

    以上三者是什么关系呢?怎样选用和匹配?ADC的动态输入范围一般都有多大的?谢谢
    发表于 02-08 07:14