当前位置: 首页 > news >正文

嵌入式——数据结构:基础知识和链表①

一、概念

        程序==数据结构+算法

                1.描述数据存储和操作的结构        

                2.操作数据对象的方法

二、衡量代码的质量和效率     

        无论代码操作数据量多大,希望程序代码的运行时间保持恒定        

        随着数据的增长,程序运行时间缓慢增长

        随着数据的增长,程序运行时间快速增长

(一)时间复杂度:数据量的增长与程序运行时间的增长所呈现的比例函数关系,称为时间渐进复杂度函数,简称时间复杂度

        1.O(1):程序运行时间维持恒定

        2.O(log n)(二分法):程序刚开始运行时间可能增长较快,但经过一定数据量后,程序运行趋于恒定

        3.O(n):(for循环)程序运行时间随数据量增长呈现固定的比例关系关系

        4.O(nlog n)        5.O(n^2)        6.O(n^3)        7.O(2^n)

(二)空间复杂度:数据的增长与程序占据空间的增长所呈现的比例函数关系,称为空间复杂度

三、数据结构

(一)逻辑结构:线性结构:表(一对一),非线性结构:树(一对多)、图(多对多)

(二)存储结构:顺序结构、链式存储、散列存储、索引存储

(三)常见的数据结构

        1.顺序表

        2.链式表(*)

        3.顺序栈(*)

        4.链式栈(*)

        5.顺序队列(*)

        6.链式队列(*)

        7.二叉树(*)

        8.邻接表

        9.邻接矩阵

四、链表

(一)链表

        1.顺序表(数组)特点

                1.1存储空间连续

                1.2访问元素方便

                1.3无法利用小的空间,必须连续的大空间

                1.4顺序表元素必须有限(不存在无限连续的空间)

                1.5插入和删除效率低

        2.链表特点

                2.1存储空间不需要连续        

                2.2访问元素不方便

                2.3可以利用一些小的存储空间

                2.4链表元素可以没有上限

                2.5插入和删除效率高

(二)链表分类

        1.单向链表:只能通过链表节点找到后一个节点,访问链表元素的方向是单向的

        2.双向链表:能够通过链表节点找到前一个节点和后一个节点

        3.循环链表:能够通过第一个节点快速找到最后一个节点,能够通过最后一个节点快速找到第一个节点

        4.内核链表:Linux内核所采用的一种通用的链表结构

(三)单向链表

        1.定义链表节点类型        

        2.空链表的创建

                   return        ptmpnode;

                2.1创建一个空的链表节点

                2.2data不需要赋值(最好赋值),空白节点不存放数据,主要为了保证链表操作的便利性

                2.3pnext必须赋值为NULL,表示该节点为最后一个节点

                2.4将节点地址返回

        3.链表的头插法:在链表的开头插入一个元素

                3.1申请新的节点空间

                3.2将存放的数据放入新申请的数据空间中

                3.3将新申请节点的pnext赋值为空白节点的pnext

                3.4将空白节点pnext赋值为新申请节点

                3.5代码

        4.链表的遍历:访问链表中每个节点元素

        5.链表的删除:从链表中删除指定元素

                5.1定义两个指针ptmpnode用来遍历链表查找要删除的节点元素,ppernode永远指向ptmpnode的前一个元素

                5.2当ptmpnode找到要删除的节点元素,让pprenode->pnext赋值为ptmpnode->pnext

                5.3将要删除的节点元素释放

                5.4让ptmpnode判断下一个节点元素是否要删除,直到该指针指向NULL为止

        

五、Makefilee

(一)Makefile:工程管理工具,主要用来管理代码的编译

        1.Makefile可以根据文件中的规则来选择符合条件的代码完成编译

        2.Makefile能够依赖关系和文件修改的时间戳来决定哪些代码需要编译,哪些代码不需要重新编译

(二)使用规则

        1.在工程目录下,创建一个Makefile或makefile的文件

        2.在Makefile中编写对应的文件编译规则

        3.在工程目录下使用make来调用Makefile中的规则完成代码编译

        4.编译代码成功后,即可运行可执行程序

(三)语法规则

        1.要生成的文件:所依赖的文件

        2.             生成命令方式

        

http://www.dtcms.com/a/312127.html

相关文章:

  • LQR个人笔记
  • Flutter开发 dart语言基本语法
  • Java 集合框架: LinkedHashSet
  • Redis7 String类型数据
  • 梦幻花瓣雨
  • spring学习笔记二
  • MC0364魔法链路
  • 全排列(回溯算法)
  • OLTP,OLAP,HTAP是什么,数据库该怎么选
  • 力扣-230.二叉搜索树中第K小的元素
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第6章 锁
  • Amazon Q Developer:AI 增强编码生产力的未来
  • Arpg第二章——流程逻辑
  • 第六章第二节 定时器定时中断 定时器外部时钟
  • 电子病历:现代HIS系统不可或缺的核心组成部分
  • 12:java学习笔记:多维数组1
  • yolo为什么可以作为目标检测框架?它的底层原理是什么?
  • 客流人数统计准确率↑22%:陌讯动态追踪融合算法实战解析
  • 【高等数学】第七章 微分方程——第七节 常系数齐次线性微分方程
  • OSPF综合实验(一)
  • 分享一个可以测试离线服务器性能的脚本
  • 八股训练--JUC
  • 包装类、日期等常用类型
  • C语言数据结构(5)双向链表
  • 深入剖析Nacos:云原生架构的基石
  • Python编程基础与实践:Python基础数据类型入门
  • 中国工程院郑裕国院士确认出席:2025第五届生物发酵营养源高峰论坛生物发酵展
  • CMake基础使用指南
  • QtC++ 调用 tesseract开源库 搭配 Opencv 实现文字识别:从tesseract库基本介绍到实际应用实现
  • 【华为OD机试】计算图形面积