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

一、概念

程序==数据结构+算法

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.要生成的文件:所依赖的文件

  1. 生成命令方式
相关推荐
_日拱一卒6 分钟前
LeetCode:除了自身以外数组的乘积
数据结构·算法·leetcode
计算机安禾11 分钟前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio
计算机安禾43 分钟前
【数据结构与算法】第35篇:归并排序与基数排序
c语言·数据结构·vscode·算法·排序算法·哈希算法·visual studio
专注API从业者1 小时前
淘宝商品详情 API 与爬虫技术的边界:合法接入与反爬策略的技术博弈
大数据·数据结构·数据库·爬虫
汀、人工智能1 小时前
[特殊字符] 第66课:跳跃游戏
数据结构·算法·数据库架构·图论·bfs·跳跃游戏
汀、人工智能2 小时前
[特殊字符] 第70课:加油站
数据结构·算法·数据库架构·图论·bfs·加油站
favour_you___2 小时前
2026_4_8算法练习题
数据结构·c++·算法
汀、人工智能2 小时前
[特殊字符] 第57课:搜索旋转排序数组
数据结构·算法·数据库架构·图论·bfs·搜索旋转排序数组
夏乌_Wx3 小时前
剑指offer | 2.4数据结构相关题目
数据结构·c++·算法·剑指offer·c/c++
minji...3 小时前
Linux 线程同步与互斥(二) 线程同步,条件变量,pthread_cond_init/wait/signal/broadcast
linux·运维·开发语言·jvm·数据结构·c++