嵌入式从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/9/29 9:41:26 阅读更多 →
如何低成本快速建设一个微商的网站并实现销量爆发式增长全攻略

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

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

2026/10/5 1:34:48 阅读更多 →
驾驶事故处理策略

驾驶事故处理策略

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

2026/9/22 12:37:19 阅读更多 →

最新新闻

Python后端中间件专题15:一条坏消息堵住整条队列——有限重试、DLQ 与重放

Python后端中间件专题15:一条坏消息堵住整条队列——有限重试、DLQ 与重放

Python后端中间件专题15:一条坏消息堵住整条队列——有限重试、DLQ 与重放 值班人员收到一条“通知队列持续失败”告警。如果 Worker 没有终点,一条缺字段的 JSON 会被反复投递,占用执行槽并刷屏日志。如果直接 ACK 并丢弃,现场证…

2026/10/12 3:48:18 阅读更多 →
数据库学生成绩管理系统课程设计:从E-R图到SQL实现全攻略

数据库学生成绩管理系统课程设计:从E-R图到SQL实现全攻略

简介:一份以SQL Server 2008与VC6.0为开发环境的学生成绩管理系统数据库课程设计报告,适合计算机、软件工程等专业学生在数据库课程设计、毕业设计或实训中参考。报告从课题背景与需求分析出发,完整覆盖概念设计(E-R模型&#xff…

2026/10/12 3:48:18 阅读更多 →
Python GIL 深度解析:从多线程翻车到并行方案

Python GIL 深度解析:从多线程翻车到并行方案

我第一次在 Python 里正儿八经写并发的时候,一度怀疑是电脑坏了。任务很简单:8 个线程分别跑一段纯 CPU 计算,按道理就算不跑满 8 核,至少也比单线程快个三四倍吧。结果 8 个线程跑完的时间不但没变短,反而比串行还慢了…

2026/10/12 3:48:18 阅读更多 →
Dev Container 并行生命周期脚本执行:object 语法原理、规范与实战

Dev Container 并行生命周期脚本执行:object 语法原理、规范与实战

开发工具 【免费下载链接】spec Development Containers: Use a container as a full-featured development environment. 项目地址: https://gitcode.com/gh_mirrors/spec2/spec 点击查看 免费下载 导读 本文围绕 Development Container Specification&#xff0…

2026/10/12 3:48:18 阅读更多 →
LangChain检索与文档:文档加载、切分、向量化与检索调优实践

LangChain检索与文档:文档加载、切分、向量化与检索调优实践

1. 从模型对话到检索增强:为什么这块值得单独拎出来讲如果你已经跟着这个系列用 LangChain 搭过几次基本对话链,大概率会产生一个疑惑:模型生成能力都这么强了,上下文窗口也越做越大,为什么还要搞一套"检索与文档…

2026/10/12 3:48:17 阅读更多 →
Visual Studio Code 1.53(2021 年 1 月)更新全解:工作台、调试、Notebook 与扩展 API 深度指南

Visual Studio Code 1.53(2021 年 1 月)更新全解:工作台、调试、Notebook 与扩展 API 深度指南

文档教程 【免费下载链接】vscode-docs Public documentation for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-docs 点击查看 免费下载 本文全面解读 VS Code 2021 年 1 月发布的 1.53 版本(对应仓库文档 release-notes/v…

2026/10/12 3:47:17 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →