chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

C語言的單鏈表應(yīng)用

汽車電子技術(shù) ? 來源:玩轉(zhuǎn)單片機(jī) ? 作者: noah ? 2023-02-20 15:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近在看一些開源項(xiàng)目,大佬的思路還是很值得去學(xué)習(xí),今天就簡單介紹一下單鏈表的應(yīng)用,配合回調(diào)函數(shù)可以玩出新花樣,廢話不多說直接看代碼!

| 頭文件

#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;


// 創(chuàng)建對象
sensor_t sensor1;
sensor_t sensor2;
sensor_t sensor3;


// 回調(diào)函數(shù)
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);
}


// 傳感器開始(往鏈表添加節(jié)點(diǎn))
void sensor_start(sensor_t* handle)
{
  sensor_t* target = head_handle;
  if(head_handle == NULL)
  {
    /* 鏈表為空 */
    head_handle = handle;
    handle->next = NULL;
  }
  else
  {
    /* 鏈表中存在節(jié)點(diǎn),遍歷找最后一個節(jié)點(diǎn) */
    while(target->next != NULL)
    {
      /* 去掉重復(fù)節(jié)點(diǎn) */
      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;
  }
}

| 運(yùn)用

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

這個寫法是理論上只會受限于內(nèi)存大小,理想狀態(tài)下可以無限創(chuàng)建對象,通過綁定回調(diào)函數(shù),能在一定程度上解決調(diào)用耦合的問題!

--END--

收錄于合集 **#**c語言

2

上一篇C語言|void 指針

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

    關(guān)注

    30

    文章

    4899

    瀏覽量

    70630
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    88

    瀏覽量

    11885
  • 單鏈表
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    7010
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語言-鏈表(單向鏈表、雙向鏈表)

    在前面章節(jié)已經(jīng)學(xué)習(xí)了數(shù)組的使用,數(shù)組的空間是連續(xù)空間,數(shù)組的大小恒定的,在很多動態(tài)數(shù)據(jù)存儲的應(yīng)用場景下,使用不方便;而這篇文章介紹的鏈表結(jié)構(gòu),支持動態(tài)增加節(jié)點(diǎn),釋放節(jié)點(diǎn),比較適合存儲動態(tài)數(shù)據(jù)的應(yīng)用場景,而且鏈表的空間是存儲在堆上面的,可以動態(tài)分配,釋放
    的頭像 發(fā)表于 09-09 11:30 ?1994次閱讀

    源碼|學(xué)生信息管理系統(tǒng)(C語言鏈表實(shí)現(xiàn))

    源碼|學(xué)生信息管理系統(tǒng)(C語言鏈表實(shí)現(xiàn))
    發(fā)表于 11-03 10:24 ?634次閱讀

    C語言實(shí)現(xiàn)靜態(tài)鏈表的建立

    在這么卷的時代,我覺得硬件工程師還是 要掌握基本的C語言編寫能力,鏈表在學(xué)生階段是一個比較難的知識點(diǎn),可能有些同學(xué)上完一個大學(xué)都不會鏈表的編寫,但是在未來工作中,
    發(fā)表于 01-13 15:08 ?934次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>實(shí)現(xiàn)靜態(tài)<b class='flag-5'>鏈表</b>的建立

    C語言鏈表的應(yīng)用

    最近在看一些開源項(xiàng)目,大佬的思路還是很值得去學(xué)習(xí),今天就簡單介紹一下鏈表的應(yīng)用,配合回調(diào)函數(shù)可以玩出新花樣,廢話不多說直接看代碼!
    發(fā)表于 02-17 09:22 ?541次閱讀

    C語言算法題:反轉(zhuǎn)一個單向鏈表

    鏈表是編程學(xué)習(xí)的一個難點(diǎn)。其實(shí),在C語言編程以及單片機(jī)裸機(jī)開發(fā)中,鏈表運(yùn)用并不多。但是如果想提升嵌入式技能水平或收入水平,可以考慮深入嵌入式系統(tǒng)層面(如參與操作系統(tǒng)設(shè)計(jì)、深入學(xué)習(xí)新的操
    發(fā)表于 06-21 11:07 ?1370次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>算法題:反轉(zhuǎn)一個單向<b class='flag-5'>鏈表</b>

    C語言鏈表知識點(diǎn)(2)

    C語言鏈表知識點(diǎn)(2)
    發(fā)表于 08-22 10:38 ?431次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>鏈表</b>知識點(diǎn)(2)

    C語言鏈表

    C語言鏈表,,,
    發(fā)表于 11-07 17:19

    C語言玩轉(zhuǎn)鏈表

    C語言是必學(xué)的一個課程,不管你是單片機(jī)還是嵌入式物聯(lián)網(wǎng),都是基礎(chǔ),所以還是要好好學(xué)習(xí)的今天推薦的資料是關(guān)于C語言鏈表的資料我自己看了一下主要
    發(fā)表于 11-13 13:50

    怎么實(shí)現(xiàn)c語言循環(huán)鏈表?

    怎么實(shí)現(xiàn)c語言循環(huán)鏈表?
    發(fā)表于 10-19 06:07

    C語言實(shí)現(xiàn)鏈表舉例

    所謂鏈表,就是用一組任意的存儲單元存儲線性表元素的一種數(shù)據(jù)結(jié)構(gòu)。鏈表又分為鏈表、雙向鏈表和循環(huán)鏈表
    發(fā)表于 07-11 16:40 ?87次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>實(shí)現(xiàn)<b class='flag-5'>單</b><b class='flag-5'>鏈表</b>舉例

    C加加建立動態(tài)鏈表

    C加加建立動態(tài)鏈表利用C語言c++編寫程序
    發(fā)表于 11-19 13:43 ?0次下載

    C語言鏈表的模擬學(xué)生成績管理系統(tǒng)

    鏈表編寫的模擬學(xué)生成績管理系統(tǒng),索要進(jìn)行的項(xiàng)目可以再菜單中進(jìn)行選擇
    發(fā)表于 11-26 15:46 ?12次下載

    C語言鏈表相關(guān)資料下載

    C語言鏈表相關(guān)資料
    發(fā)表于 03-08 10:47 ?5次下載

    C語言_鏈表總結(jié)

    本篇文章介紹C語言鏈表相關(guān)知識點(diǎn),涉及鏈表的創(chuàng)建、單向鏈表、循環(huán)鏈表、雙向
    的頭像 發(fā)表于 08-14 09:53 ?2100次閱讀

    OpenHarmony中軟件模塊的鏈表實(shí)現(xiàn)

    為了性能考慮,嵌入式系統(tǒng)一般使用C語言進(jìn)行開發(fā),由于C語言標(biāo)準(zhǔn)庫沒有封裝鏈表,所以嵌入式系統(tǒng)一般自己設(shè)計(jì)和實(shí)現(xiàn)
    發(fā)表于 08-30 09:25 ?467次閱讀