使用单项链表存储多行字符串数据

深入解析Memcached:内部机制、存储结构及在大数据中的应用 Memcached作为一种轻量级、高性能的内存缓存解决方案,具有简单易用、扩展性强等优点。其在大数据应用中的作用尤为突出,可以显著提升系统的查询和计算效率。通过与Spring Boot框架的集成,可以方便地将Memcached应用于Java项目中,为大数据处理提供高效的缓存支持。 阅读详情

       在嵌入式软件开发中,涉及到双机通信过程中,接收方有多条数据接收,并要逐条处理的情况,这样就需要先接收,存储到缓存中,然后再从缓存中读取并逐一处理。针对这种场景,通常有两种方式,一是建立一个多维数组,每一纬用于存储一条数据,这种方式比较直观,操作方便,涉及到多维数组的遍历,数组的数据写入和读取等常规操作,缺点是因为是多维数组,在定义时就要确定数组的维数和数组的长度,比如data_list[4][512];数组的维数和长度都要按照实际情况的最大值来设定,这样有可能带来空间上的浪费,为了确保某一条不常用的长数据的存储就要将所有的数据长度都定义长最大长度,比如某种情况下发送方有可能发送来超过1024字节的数据,那么上面的数据就得定义成data_list[4][2048];造成空间的极大浪费,对于资源敏感的嵌入式开发来说不能忍受,而且数据的条数固定在4条以内,超过4条就会造成接收数据不完整,不够灵活。所以我们这里介绍通过单项链表的方式来逐条接收连接数据,每条数据的大小都按实际大小动态分配内存,然后接入到链表中,处理的时候逐一遍历链表来访问每条数据。优点是比较灵活,节约内存空间,缺点是需要动态分配内存,接入链表,然后使用完成后释放动态内存,操作要精准,避免内存泄漏。

重点记录如下:

1.定义链表数据节点结构

typedef struct data_note  
{
    struct data_note *p_next;
    char   *data;
    uint16_t len;
} data_note;

typedef struct
{
  uint32_t parts;
  char  name[AT_CMD_NAME_LEN];
  uint32_t parameter_num;
  data_note *p_para_line;
}dbg_cmd_t;

for(i=0;i<nDatas;i++)
     {
        int len=para_info[i].len;
        data_note *p_para_line=rt_malloc(sizeof(data_note));
        if(p_para_line==RT_NULL)
        {
          LOGPV("#Err:p_para_line malloc fail\r\n");
        }
        p_para_line->data=rt_malloc(len+1);
        if(p_para_line==RT_NULL)
        {
          LOGPV("#Err:data malloc fail\r\n");
        }
        p_para_line->len =len;
        memcpy(p_para_line->data,para_info[i].pstr,len);
        p_para_line->data[len]='\0';

        //2.新创节点插入到头节点
        p_para_line->p_next=dbgCmd.p_para_line;
        dbgCmd.p_para_line =p_para_line;        
     }

3.因为插入节点时都是后接入作为链表头,所以链表是和接收数据的顺序是反序的,后接入的在前,先接入的在后,所以接收完成需要反转一下:

static void reverse_at_para_line(dbg_cmd_t *p_atcmd)
{
    data_note *pcur,*pnext;
    
    pcur   = p_atcmd->p_para_line;  
    p_atcmd->p_para_line = NULL;  

    while (pcur != NULL)                 
    {
        pnext = pcur->p_next;            
        
        pcur->p_next = p_atcmd->p_para_line;//当前节点指向上一个头节点           
        p_atcmd->p_para_line = pcur;        //更新当前节点作为头节点,一直移动到最后,即原来链表最后的节点翻转为新链表的头节点,p_line最终存储的是头节点               
        
        pcur = pnext;                    
    }
}

4.最后在处理完链表后记得释放动态申请的链表节点和里面的数据指针:

static void free_para_line(dbg_cmd_t *p_atcmd)
{
    data_note *pcur,*pnext;
    
    pcur   = p_atcmd->p_para_line;  
    p_atcmd->p_para_line = NULL;  

    while (pcur != NULL)                 
    {
        pnext = pcur->p_next;
        
        rt_free(pcur->data);
        pcur->data=RT_NULL;
        
        rt_free(pcur);
        pcur      =RT_NULL;
              
        pcur = pnext;                    
    }
}

题解:洛谷 P1203 [USACO1.1] 坏掉的项链 Broken Necklace 假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事(颜色可能与在这之前收集的不同)。) 三种颜色珠子组成的环形项链。例如,在图片 A 中的项链中,在珠子 9 和珠子 10 或珠子 24 和珠子 25 之间打断项链可以收集到 8 个珠子。个红色的,白色的,或蓝色的珠子组成的项链,珠子是随意安排的。当收集珠子的时候,一个被遇到的白色珠子可以被当做红色也可以被当做蓝色。输出一行一个整数,表示从给出的项链中可以收集到的珠子的最大数量。 阅读详情

相关推荐

题解:洛谷 P14924 [GESP202512 八级] 宝石项链

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。请帮小 A 计算在满足条件的前提下,宝石项链最多可以划分为多少段。小 A 想将宝石项链分给他的好朋友们。枚宝石的宝石项链,这些宝石按照在项链中的顺序依次以。输出一行,一个整数,表示宝石项链最多可以划分的段数。,分别表示宝石项链中的宝石的数量与种类数。洛谷:[P14924。,表示每枚宝石的种类。#普及+# #队列#

团爸讲算法 160

链表

链表 链表是根据元素节点逻辑关系排列起来的一种数据结构,和数组类似,都可以保存多个数据。每一个链表都包含多个节点,节点又包含两个部分,一个是数据域(储存节点含有的数据),一个是引用域 (储存下一个节点或者上一个节点的地址)。链表在物理存储单元上非连续、非顺序。 链表的种类 单项链表:每一链表节点的引用域只指向下一节点; 双向链表:每一节点中有两个引用域,分别指向上一节点和下一节点; 环形链表:链表最后一节点的引用域指向头节点; 双向环形链表:每一节点中有两个引用域,分别指向上一节点和下一节点,其中链表最后一

cynthiahunter的博客 775

Frida Stalker实战:如何用指令级追踪破解OLLVM混淆的AES算法

本文深入探讨了如何使用Frida Stalker进行指令级追踪,破解经过OLLVM混淆的AES算法。通过动态分析技术,逆向工程师可以精准识别控制流平坦化等混淆手段,还原算法逻辑,特别适用于移动安全领域的加密算法分析。文章提供了详细的配置指南、核心机制解析和实战案例,帮助读者掌握对抗高级代码混淆的有效方法。

weixin_29325955的博客 475

链表:自引用结构

链表: 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作。 例: #include typedef struct student {

和光official的博客 1296

f103vet6 SD卡SDIO+DMA配置避坑指南:从初始化卡死到稳定读写的全流程解析

本文详细解析STM32F103VET6芯片SD卡SDIO与DMA配置中的常见问题,从初始化卡死到读写不稳定的全流程解决方案。重点分析总线宽度配置、时钟分频调整及DMA通道管理技巧,帮助开发者避开常见陷阱,实现稳定高效的数据存储。

u0v1w2x3的博客 666

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

添加新设备(PLC)->设备和网络管理->点击PLC->看到硬件目录选择通信板->点到点->CB1241(RS485)->看到6ES7241-1CH30-1XB0选择添加,如图。指向Modbus保持寄存器数据块的指针 我这里指向了自定义的DB块数据中一个INT数组。在通信->通信处理模块->MODBUS(选择不带RTU的通信指令块)注意:接线时,TRA接485调试模块的B- TRB接调试模块的A+组态后的硬件标识符 270 对应自己组态后自动生成的。1:事务完成,且无任何错误。波特率对应自己使用的。

swmyaopeng的博客 2万+

C语言用链表存储字符串

【代码】C语言用链表存储字符串。

jlfcc的博客 1431

单细胞转录组聚类分析R包——SC3的应用

前言 在做单细胞相关聚类分析的过程中,为了研究异质性,发现了一种专门用于单细胞转录组的聚类分析R包——SC3(single cell consensus clustering,单细胞一致性聚类)。该聚类算法发表于Nature Methods(2017),能够让单细胞RNA-seq基于转录组特征对细胞类型进行定量表征。这是一种用户友好的无监督聚类工具,它通过一致方法将多个聚类解决方案组合在一起,从而得到高精度和鲁棒性的分群结果。SC3包的官方具体使用教程见:http://www.bioconductor.or

m0_51042606的博客 5005

串的链式存储及其基本操作实现

我们大部分时间都是在使用数组来存储串 , 然后进行操作的 , 对于链串我们不经常使用, 在这里我们为了练习的需要 , 实现一下链串的基本操作 , 其实也就是插入,删除, 替换 ,然后指针的交替罢了.我们通常的操作是 在链串里面 ,每个节点存储四个字节的数据, 就是一个字的数据 , 在这个我们方便对数据进行操作 , 每个 节点只放一个字节 , 那一个节点明明可以存储 4 个字节 , 我们只存一个字节 ,那就会空余 3 个字节的空间 , 那也没办法 , 继续操作即可。

qq_57484399的博客 4236

hCaptcha Enterprise绕过方案对比:四种Capsolver任务类型怎么选?

本文深入评测了hCaptcha Enterprise的四种Capsolver任务类型(HCaptchaEnterpriseTask、HCaptchaEnterpriseTaskProxyLess、HCaptchaTurboTask和HCaptchaTurboTaskProxyLess),分析其技术架构、性能表现及适用场景。通过基准测试和成本模型比较,帮助技术团队选择最优解决方案,提升自动化流程的验证通过率与成本效益。

rrr55的博客 322

ue 打包linux程序 在windows系统 2026

ue 打包linux程序 在windows系统 2026

jacke121的专栏 371

C++结构体中的string类型在链表中的存储问题

由于string类是C++新增加的类,在使用string时会自动调用它的默认构造函数。C中的malloc()只是申请内存,它不会调用string类的构造函数。所以我们可以使用C++中的new()来替代malloc(),new不仅仅会申请内存,而且会调用string类的构造函数。(参考博客new()的用法) ​

weixin_63365084的博客 2078

一文吃透 Tools for Applying SAP Notes:从 SNOTE、TCI 到 Solution Manager 与 SAP Cloud ALM

本文系统梳理了SAP技术与运维团队应用SAP Notes的高效工具与方法,涵盖On-Premise与云环境。文章首先阐述了精研SAP Notes工具的必要性,指出其是实施错误修复、法务变更和性能改进的关键载体。随后详细介绍了SNOTE、TCI、Solution Manager、Cloud ALM和Maintenance Planner等核心工具的定位与适用场景,并通过采购异常案例展示了标准更正流程。针对复杂修复场景,文章提出了TCI的批量处理方案,并强调将Note实施纳入变更治理流程的重要性。最后总结了三种

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 354

USACO_CHA1_破碎的项链

废话 USACO TRAINING的网站又进不去了,所以我将刷题网站转到了ACwing。 这个网站上的相关题目是已经经过翻译了的,比较友好。我个人购买了ACwing上y总的USACO TRAINING习题辅导的网课,对刷题很有帮助。 牛课上也可以找到这套题的汉化版,但是个人还是更喜欢ACwing,因为当题目WA掉的时候,他会给出WA了的测试数据。 中文题干 链接:https://www.acwing.com/problem/content/1344/ 来源:ACwing 你有一条由 N 个珠子串成的项链,珠

S__ph的博客 327

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

c语言 将两个单项链表合并且删除重复元素(9)

参考文章:https://blog.youkuaiyun.com/ziyoudefeng/article/details/6929767 代码实现: #include<stdio.h> #include<stdlib.h> typedef int ElemType; /*单项链表的声明*/ typedef struct LNode { ElemT...

Yannie's Blog 3900

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

N-DCA算法:基于项链编码的分布式公平分配方案深度解析

在分布式系统与多方协作场景中,如何公平地分配协作产生的价值是一个核心挑战。这涉及到博弈论中的经典概念——夏普利值,它从数学上定义了基于边际贡献的公平分配原则。然而,其计算复杂度随参与者数量指数级增长,难以在分布式环境中直接应用。为解决这一工程难题,项链编码作为一种高效的数据结构被引入,它能将复杂的联盟组合关系压缩并表示,从而将全局计算任务分解为可并行处理的独立单元。这项技术的核心价值在于,它使得原本不可行的精确公平计算变得可行,为构建可持续的协作生态提供了信任基石。其应用场景广泛,例如在联邦学习中量化各数据

weixin_31240035的博客 311

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

高级篇七、InnoDB数据存储结构

页a,页b,页c … 页n 这些页可以不在物理结构上相连,只要通过双向链表相关联即可每个数据页中的记录会按照主键值从小到大的顺序组成一个单项链表每个数据页都会为存储在它里面的记录生成一个页目录,通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽然后再遍历该槽对应分组中的记录即可快速找到指定的记录。

白羊座的橙子 506

Python数据结构13:散列(哈希)表,完美散列函数,解决冲突方法,开放寻址,负载因子,平均查找次数

散列表的概念。 散列表的实现。 开放寻址散列表。 数据项链列表实现

YangStudent的博客 4368

使用InnoDB存储引擎的表进行单表访问的访问方法及含义

完整的访问方法有:system,const,eq_ref,ref,fulltext,ref_or_null,index_merge,unique_subquery,index_subquery,range,index,ALL 本文就只介绍几个常见的方法及含义,所用表的储存引擎为InnoDb system 表中只有一条记录切该表使用的储存引擎的统计数据是精确的,那么对该表的访问就是system,但是不同的是 在innodb中是all const 根据主键或者唯一二级索引与 常数进行等职匹配的时候,.

qq_39298872的博客 291

用C语言实现链表,附代码注释(简洁版)

用C语言实现链表,附代码注释 这里给已经在学C和数据结构的小伙伴提供一些弹药支持,虽然不知道管不管用,在这里大佬就勿扰了吧!哈哈! 在实现一个简单的链表前需要用到哪些知识点呢? C语言基础知识,比如要用到的结构体、指针、函数、运算 一点数据结构的知识,在学习数据结构也能看到链表的身影,我们这里实现的是单项链表 有手,有脑 现在上代码: # include<stdio.h> # in...

沧海一粟 985

HAUT1289 arufuonsusnoufura(区间dp,河南省多校连萌(七))

题目: 1289: arufuonsusnoufura 时间限制: 10 秒  内存限制: 128 MB 提交: 15  解决: 11 提交 状态  题目描述 爱德华有一天遇到了一个难题,他准备给弟弟送一个项链,不过炼金术师都有这么一个小爱好:喜欢对称,他希望买到的项链也是对称的,不过集市上左右对称的项链早就卖光了。聪明的爱德华准备随便买来一个自己取下几颗珍珠变成对称的。由

riba2534的博客 2650

5.22牛客做题

判断:在表头和表尾都可能有元素被插入的情况下,在单循环链表中设置尾指针比设置头指针好。( )正确。原因如下:在设置尾指针时,对于链表的头插和尾插操作都可以在O(1)时间复杂度内完成。如果设置头指针,虽然在头部插入元素的操作可以在 O(1) 时间复杂度内完成,但在尾部插入元素就需要从头开始遍历整个链表,直到找到尾部的元素,这样的时间复杂度是 O(n),n 是链表的长度。

Tian Meng的博客 1113

码蹄杯真题分享

算法题分享

2301_80350265学无止尽5的博客 3119
上一篇: 嵌入式软件设计之:宏、常量
下一篇: rt_mq_send 发送失败,返回-3 (-RT_EFULL)问题分析及解决
μLink
博客等级 码龄5年 123粉丝 44原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值