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

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

3天内不再提示

C语言的单链表应用

汽车电子技术 来源:玩转单片机 作者: noah 2023-02-20 15:03 次阅读

最近在看一些开源项目,大佬的思路还是很值得去学习,今天就简单介绍一下单链表的应用,配合回调函数可以玩出新花样,废话不多说直接看代码!

| 头文件

#include "stdio.h"
#include "stdint.h"


typedef struct sensor
{
    uint8_t flag;
    void (*callback)(void);
    struct sensor* next;
}sensor_t;


extern sensor_t sensor1;
extern sensor_t sensor2;
extern sensor_t sensor3;


void sensor1_callback(void);
void sensor2_callback(void);
void sensor3_callback(void);


void sensor_init(sensor_t* handle, void(*callback)(void));
void sensor_start(sensor_t* handle);
void sensor_handle(void);

| 源码

// 链表头指针
static sensor_t* head_handle = NULL;


// 创建对象
sensor_t sensor1;
sensor_t sensor2;
sensor_t sensor3;


// 回调函数
void sensor1_callback(void)
{
    printf("sensor1!\\r\\n");
}


void sensor2_callback(void)
{
    printf("sensor2!\\r\\n");
}


void sensor3_callback(void)
{
    printf("sensor3!\\r\\n");
}


// 传感器初始化
void sensor_init(sensor_t* handle, void(*callback)(void))
{
  handle->callback = callback;
  handle->flag = 0x00;
  sensor_start(handle);
}


// 传感器开始(往链表添加节点)
void sensor_start(sensor_t* handle)
{
  sensor_t* target = head_handle;
  if(head_handle == NULL)
  {
    /* 链表为空 */
    head_handle = handle;
    handle->next = NULL;
  }
  else
  {
    /* 链表中存在节点,遍历找最后一个节点 */
    while(target->next != NULL)
    {
      /* 去掉重复节点 */
      if(target == handle){
        break;
      }
      target = target->next;
    }
    target->next = handle;
    handle->next = NULL;
  }
}


// 传感器处理(遍历链表)
void sensor_handle(void)
{
  sensor_t* target = head_handle;
  while(target != NULL)
  {
    target->callback();
    target = target->next;
  }
}

| 运用

int main()
{
    sensor_init(&sensor1,sensor1_callback);
    sensor_init(&sensor2,sensor2_callback);
    sensor_init(&sensor3,sensor3_callback);
    sensor_handle();
    while (1)
    {
        /* code */
    }
}

这个写法是理论上只会受限于内存大小,理想状态下可以无限创建对象,通过绑定回调函数,能在一定程度上解决调用耦合的问题!

--END--

收录于合集 **#**c语言

2

上一篇C语言|void 指针

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

    关注

    30

    文章

    4555

    浏览量

    66772
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11455
  • 单链表
    +关注

    关注

    0

    文章

    13

    浏览量

    6882
收藏 人收藏

    评论

    相关推荐

    源码|学生信息管理系统(C语言链表实现)

    源码|学生信息管理系统(C语言链表实现)
    发表于 11-03 10:24 405次阅读

    C语言链表的应用

    最近在看一些开源项目,大佬的思路还是很值得去学习,今天就简单介绍一下单链表的应用,配合回调函数可以玩出新花样,废话不多说直接看代码!
    发表于 02-17 09:22 321次阅读

    C语言链表知识点(2)

    C语言链表知识点(2)
    发表于 08-22 10:38 181次阅读
    C<b class='flag-5'>语言</b><b class='flag-5'>链表</b>知识点(2)

    C语言链表

    C语言链表,,,
    发表于 11-07 17:19

    C语言玩转链表

    C语言是必学的一个课程,不管你是单片机还是嵌入式物联网,都是基础,所以还是要好好学习的今天推荐的资料是关于C语言链表的资料我自己看了一下主要
    发表于 11-13 13:50

    链表的缺陷是什么

    链表有一定的缺陷,就是单向性,只能从一个结点到下一个节点,而不能访问到上一个结点,而循环链表就可以解决这一问题,当然,用双向链表更加方便#include #include typed
    发表于 07-14 08:09

    怎么实现c语言循环链表

    怎么实现c语言循环链表
    发表于 10-19 06:07

    linux基本操作与C语言基础

    目录C语言基础C++linux基本操作io操作数据结构进程线程网络编程实战项目C语言基础基本数据类型指针结构体、联合体、枚举
    发表于 12-17 07:53

    请问链表在单片机C语言中有应用吗?

    链表在单片机C语言中有应用么?
    发表于 10-16 07:28

    C语言链表的作用是什么?

    C语言中指针用的很少,链表、文件操作几乎没用过,所以也不能理解到底有什么作用。各位有经常在做程序时会用到这些吗。
    发表于 11-06 06:23

    c语言单向链表

    发表于 09-13 21:10 3次下载

    C语言链表的模拟学生成绩管理系统

    用单链表编写的模拟学生成绩管理系统,索要进行的项目可以再菜单中进行选择
    发表于 11-26 15:46 12次下载

    C语言链表相关资料下载

    C语言链表相关资料
    发表于 03-08 10:47 5次下载

    C语言动态链表的详细资料说明

      动态链表:在程序执行的过程中,动态地开辟一块内存空间,可以是不在一起的内存空间,通过链表联系起来。
    发表于 07-29 08:00 4次下载
    C<b class='flag-5'>语言</b>动态<b class='flag-5'>链表</b>的详细资料说明

    C语言_链表总结

    本篇文章介绍C语言链表相关知识点,涉及链表的创建、单向链表、循环链表、双向链表、单向循环
    的头像 发表于 08-14 09:53 1479次阅读