不知道各位读者是怎么理解链表的,还有就是链表和结构体的关系?最近开发的项目资源不是很紧凑,就用了面向对象编写,就大量的使用到结构体,有时还会配合共同体嵌套使用,顺便回顾了一些结构体的使用,这里主要简单回顾结构体和链表的关系;
链表在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
原文标题:通俗|结构体与链表
文章出处:【微信号:玩转单片机,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
为什么不建议用匿名结构体
C语言结构体使用
请问EDSADC的采样值和实际输入电压值的换算关系是怎样的?
定义IO初始化结构体
一体化解决方案Jama Software,如何支持医疗设备开发中的需求管理、风险管理与验证?
渗压计在混凝土结构体中的安装指南
GLAD应用:体全息光栅模拟
程序设计与数据结构
C语言中结构体与联合体的深度解析:内存布局与应用场景
中软国际Lumi智能体开发平台支持DeepSeek
机智云发布Gokit5 AI智能体开发板:工业级智能体流水线重构AIoT开发范式

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