当前位置: 首页 > news >正文

FreeRtos进阶——通用链表的实现方式

在这里插入图片描述

通用链表实现方式(一)

struct node_t {struct node_t *next;
};struct person {struct node_t node;char *name;int age;
};struct dog {struct node_t node;char *name;int age;char *class;
};

在此链表中,node结构体被放在了最前面,因此当我们用node结构体存储不同类型(dog或者person)结构体信息时,node 结构体位置就是dog或者person结构体的位置。在想要使用dog或者person时,只需要使用强制类型转换的方法即可。

通用链表实现方式(二)

使用操作系统:Linux,RT-Thread

struct person {char *name;int age;struct node_t node;char *address;
};struct dog {char *name;int age;char *class;struct node_t node;    
};

在此链表中,node结构体的位置在最后面,因此我们需要根据person或者dog结构体的大小反推出他们的指针起始位置。
具体代码如下:

p = (struct person *)((char *)pre - (unsigned int)&((struct person *)0)->node);
n = (struct person *)((char *)next - (unsigned int)&((struct person *)0)->node);

pre指针转换为char*后加减操作是以字节为单位了,否则是以sizeof(struct node_t)为单位来进行加减计算。
unsigned int类型的强制转换是因为要减去对应的字节数。

通用链表实现方式(三)

使用操作系统:FreeRtos

struct node_t {void *container;struct node_t *next;
};

与前面俩种方法类似,如果直接在contianer存储person或者dog的结构体地址,那么就不需要再去计算或者反推对应结构体的地址了。

http://www.lryc.cn/news/360138.html

相关文章:

  • 【kubernetes】关于k8s集群如何将pod调度到指定node节点(亲和与反亲和等)
  • AOP基础
  • EXSI虚拟机新增磁盘并将空间扩充到已有分区
  • 民国漫画杂志《时代漫画》第39期.PDF
  • 每天一个数据分析题(三百四十二)
  • c++会员消费积分系统
  • 如何获知表中数据被删除
  • 机器学习之sklearn基础教程
  • ES升级--04--SpringBoot整合Elasticsearch
  • eclipse如何debug
  • 无人售货机零售业务成功指南:从市场分析到创新策略
  • 开源代码分享(32)-基于改进多目标灰狼算法的冷热电联供型微电网运行优化
  • 7、架构-架构的安全性
  • LeetCode题练习与总结:路径总和Ⅱ--113
  • Java复数计算
  • MySQL-事务日志
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类坐标点QPoint)
  • 算法练习——字符串
  • Flutter 中的 SliverOverlapInjector 小部件:全面指南
  • 7个Python爬虫入门小案例
  • linux 利用 ~$() 构造数字
  • 七大获取免费https的方式
  • JVM(Java虚拟机)笔记
  • 秒杀基本功能开发(显示商品列表和商品详情)
  • centos 记录用户登陆ip和执行命令
  • JZ2440笔记:DM9000C网卡驱动
  • 【数据结构】二叉树:简约和复杂的交织之美
  • 信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!
  • 编程学习技巧——实战
  • GPU学习(1)