嵌入式从0到精通——数据结构
一、基本概念数据结构数据结构存储具有一种或多种特定关系的数据的集合如何组织和存储数据。程序设计 数据结构 算法数据与数据之间的关系逻辑结构 数据元素与元素之间的关系集合 数据元素与元素之间关系平等线性结构 数据元素与元素之间一对一的关系顺序表数组、链表、队列、栈树形结构 数据元素与元素之间一对多的关系二叉树图形结构 数据元素与元素之间多对多的关系网状结构物理结构 数据元素在计算机内存中的存储方式顺序存储选取内存中连续空间进行存储​ 代表顺序表数组1. 内存空间必须连续 1. 数据元素的插入和删除需要移动后续大量数据不方便 1. 访问元素效率高 1. 需要预分配把内存空间分配不合适可能造成内存空间浪费或者数组越界链式存储 可以选取非连续内存空间进行存储代表链式表内存空间可以不连续插入和删除数据元素方便访问数据元素必须要遍历不需要预分配内存空间可以根据数据动态存储索引存储将要存储的元素关键字和存储位置构建索引表数据查找是通过查询索引表获取数据的真正存储位置。散列存储哈希存储将要存储的元素的关键字和存储位置之间建立起对应关系这个关系称为哈希函数数据存储时按照哈希函数的映射进行存储数据查找时也按照哈希函数的映射进行查找。数据结构学习内容顺序表数组单向链式表双向链表循环链表队列栈二叉树哈希表4 . 知识储备​ 结构体​ 指针​ 动态内存分配二、单向链表API应用程序接口创建链表链表插入(头插、尾插)链表删除头删、尾删查找修改链表遍历链表销毁链表数据类型构造//链表结点类型 typedef struct node { int data; //数据域保存的数据 struct node *pnext; //指针域下一个结点的地址 }Node_t; //链表对象类型 typedef struct link { Node_t *phead; //链表头节点指针 int clen; //链表当前结点的个数 }Link_t;单向链表的创建Link_t *create_link() { Link_t *plink malloc(sizeof(Link_t)); if (NULL plink) { printf(malloc error\n); return NULL; } plink-phead NULL; plink-clen 0; return plink; }单向链表头插创建结点为结点赋值让要插入结点的指针域指向原来的头节点让phead指向新插入结点int insert_link_head(Link_t *plink, int data) { Node_t *pinsert malloc(sizeof(Node_t)); if (NULL pinsert) { printf(malloc error\n); return -1; } pinsert-data data; pinsert-pnext NULL; pinsert-pnext plink-phead; plink-phead pinsert; plink-clen; return 0;extern }单向链表尾插int insert_link_tail(Link_t *plink, int data) { Node_t *pinsert malloc(sizeof(Node_t)); if (NULL pinsert) { printf(mallocc error\n); return -1; } pinsert-data data; pinsert-pnext NULL; if (is_empty_link(plink)) { plink-phead pinsert; } else { Node_t *ptmp plink-phead; while (ptmp-pnext ! NULL) { ptmp ptmp-pnext; } ptmp-pnext pinsert; } plink-clen; return 0; }单向链表尾删int delete_link_tail(Link_t *plink) { if (is_empty_link(plink)) { return -1; } else if (NULL plink-phead) { free(plink-phead); plink-phead NULL; } else { Node_t *ptmp plink-phead; while (ptmp-pnext-pnext ! NULL) { ptmp ptmp-pnext; } free(ptmp-pnext); ptmp-pnext NULL; } plink-clen--; return 0; }内存泄露用户自己申请的堆区空间使用完没有及时释放则造成内存泄露。检测程序有没有内存泄露valgrind内存错误检测工具GNU提供可以检测程序运行过程中的内存泄露情况以及野指针的使用情况等。使用方法安装valgrind工具sudo apt-get isntall valgrind 编译完程序后使用 valgrind ./a.out valgrind --leak-checkfull ./a.out 6742 HEAP SUMMARY: 6742 in use at exit: 112 bytes in 7 blocks 6742 total heap usage: 10 allocs, 3 frees, 1,168 bytes allocated 6742 6742 LEAK SUMMARY: 6742 definitely lost: 16 bytes in 1 blocks 6742 indirectly lost: 96 bytes in 6 blocks 6742 possibly lost: 0 bytes in 0 blocks 6742 still reachable: 0 bytes in 0 blocks 6742 suppressed: 0 bytes in 0 blocks 6742 Rerun with --leak-checkfull to see details of leaked memory

相关新闻

如何快速切换OneNav主题:从默认到自定义的完整指南

如何快速切换OneNav主题:从默认到自定义的完整指南

如何快速切换OneNav主题:从默认到自定义的完整指南 【免费下载链接】onenav 使用PHP SQLite 3开发的书签管理系统,将浏览器书签集中式管理,做到一处部署,随处访问。 项目地址: https://gitcode.com/gh_mirrors/on/onenav …

2026/10/25 9:39:00 阅读更多 →
如何低成本快速建设一个微商的网站并实现销量爆发式增长全攻略

如何低成本快速建设一个微商的网站并实现销量爆发式增长全攻略

在这个万物互联、指尖触达一切的时代,如果你还在纠结要不要搞自己的私域流量池,要不要搞自己的独立商城,那我只能告诉你,你的竞争对手可能已经悄悄把客户圈走了。很多人一提到“建设一个微商的网站”,脑海中浮现的往往是那些花里胡哨、代码乱飞、加载慢得像蜗牛的科技产品…

2026/11/1 22:12:41 阅读更多 →
驾驶事故处理策略

驾驶事故处理策略

拿了驾照2个月,平时租车先练练,这里总结一下事故处理操作指南,防范于未然。其他blog如下: 学车过程与经验记录:(考证相关) https://blog.csdn.net/runafterhit/article/details/117394820 自动挡…

2026/10/31 7:42:40 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/2 0:25:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/1 10:36:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/1 10:36:51 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/2 1:16:51 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/1 10:35:11 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/1 9:35:41 阅读更多 →

日新闻

周新闻

月新闻