【嵌入式软件-数据结构与算法】01-数据结构
摘录于老师的教学课程~~(*๓´╰╯`๓)~~内含链表、队列、栈、循环队列等详细介绍~~
基础知识系列 有空再继续更~~~
目录
【链表】
一、单链表
1、存储结构:带头结点的单链表
2、单链表结点类型的定义
3、创建单链表
1)头插法
2)尾插法
4、单链表插入结点
5、单链表删除结点编辑
6、单链表的遍历模型
1)模型1:指向头结点
2)模型2:指向首结点
二、双链表
1、存储结构:带头结点的双链表
2、双链表结点类型的定义
3、创建双链表
1)头插法
2)尾插法
4、双链表插入结点
方法1:在第 i 位置插入,先定位到第 i-1 位置编辑
方法2:在第 i 位置插入,定位到第 i 位置
5、双链表删除结点
方法1:删除第 i 位置结点,先定位到第 i-1 位置
方法2:删除第 i 位置结点,定位到第 i 位置编辑
三、循环链表
1、循环单链表
2、循环双链表
3、其他操作方法与单链表和双链表操作一样
【栈】
一、顺序栈
1、存储结构
2、顺序栈类型的定义
3、顺序栈的 四 要素
4、顺序栈的运算(节选)
二、共享栈
1、存储结构
2、共享栈类型的定义
3、共享栈的 四 要素
三、链栈
1、存储结构:带头结点的链栈
2、链栈结点类型的定义
3、链栈的 四 要素
4、链栈的运算(节选)
1)进栈 Push(&s, e)
2)出栈 Pop(&s, &e)
3)取栈顶元素 GetTop(s, &e)
【队列】
一、顺序队
1、存储结构
2、顺序队类型的定义
3、顺序队的 四 要素
4、顺序队的运算(节选)
二、链队
1、存储结构
2、链队结点类型的定义
3、链队的 四 要素
4、链队的运算(节选)
1)进队 enQueue(q , e)
2)出队 deQueue(q , e)
三、变形链队
1、变化要点
2、存储结构
3、变形链队的 四 要素
四、双端队列
1、不受限的双端队列:两端都可以进行进队和出队操作的队列
2、输出受限的双端队列:一端允许进队和出队,另一端只允许进队
3、输入受限的双端队列:一端允许进队和出队,另一端只允许出队
五、环形队列(循环队列)
1、环形队列(循环队列) 四 要素
六、变形环形队列
1、变化要点
2、变形环形队列类型的定义
3、变形环形队列的 四 要素
【链表】
一、单链表
1、存储结构:带头结点的单链表

2、单链表结点类型的定义
typedef struct LNode    // 定义单链表节点类型
{ElemType data;      // 节点的数据部分,类型为 ElemType(通常是自定义的数据类型)struct LNode *next; // 指向后继结点
}LinkNode;              // 将结构体命名为 LinkNode
 
  如图:
  
3、创建单链表
1)头插法
        
代码理解:先接s后面,再接s前面
2)尾插法

代码理解:先接s前面,再收s后面
4、单链表插入结点

代码理解:先cv后面(先接s后面),再接s前面
5、单链表删除结点
 
代码理解:直指后一位,跳过中间
6、单链表的遍历模型
1)模型1:指向头结点
       
循环初始条件:p 指向链表的头节点 L 。(意味着循环将从头节点开始)
循环结束条件:循环在当前节点的下一个节点不为空时继续执行。(意味着循环会只遍历到倒数第二个节点,并且不会打印最后一个节点的数据)
2)模型2:指向首结点
        
           循环初始条件:p 指向链表的第一个有效节点(即 L ->next ,意味着循环将从第一个有效节点开始,跳过了头节点)。
循环结束条件:循环在 p 不为空时继续执行。(意味着循环会遍历整个链表,包括最后一个节点)
二、双链表
1、存储结构:带头结点的双链表
  
2、双链表结点类型的定义
typedef struct DNode        //双链表结点类型
{ElemType data;struct DNode *prior;    //指向前驱结点struct DNode *next;     //指向后继结点
}DlinkNode;
 
 
3、创建双链表
1)头插法
     
代码理解:先接s后面,判断是否后能回扣s,再接s前面,前回扣s
2)尾插法
      
代码理解:先接s前面,后s回扣前面,最后r(即旧的s,新的r)指空
4、双链表插入结点
        方法1:在第 i 位置插入,先定位到第 i-1 位置
 
代码理解:先s接,后回扣;先接后,再接前
方法2:在第 i 位置插入,定位到第 i 位置
    
    ![]()
5、双链表删除结点
方法1:删除第 i 位置结点,先定位到第 i-1 位置

代码理解:跳过结点,往下直指下一位,下一位回扣上一位
        方法2:删除第 i 位置结点,定位到第 i 位置
 
 
 
三、循环链表
1、循环单链表
     
2、循环双链表

3、其他操作方法与单链表和双链表操作一样
【栈】
一、顺序栈
1、存储结构
        
2、顺序栈类型的定义
typedef struct
{ElemType data[MaxSize]; //大小为 MaxSize,用于存储栈中的元素int top;                //栈顶指针
}SqStack; 
 
3、顺序栈的 四 要素
   
代码理解:由于栈从0开始记,所以栈空为-1,栈满为最大(MaxSize)减一;
进栈,先加后进;退栈,先取后减;
4、顺序栈的运算(节选)

要记得判断是否栈满与栈空
二、共享栈
1、存储结构
  
两头往中间增,空间共享
2、共享栈类型的定义
typedef struct
{ElemType data[MaxSize]; //存放共享栈中元素int top1,top2;          //两个栈的栈顶指针
}DStack; 
 
3、共享栈的 四 要素
  
代码理解:
栈空为两指针至两栈外(-1,MaxSize);
栈满为两指针相邻;
进栈,top1进则先加再进(top1为左),top2进则先减再进(top2为右),都为向中靠拢
出栈,top1出则先取再减(top1为左),top2出则先取再加(top2为右),都为向两边取
三、链栈
1、存储结构:带头结点的链栈
  
2、链栈结点类型的定义
typedef struct linknode
{ElemType data;         //数据域struct linknode *next; //指针域
}LinkStNode; 
 
3、链栈的 四 要素
  
链栈栈满取决于电脑的内存设置,所以不考虑;
栈空即为头结点s下一位为空;
4、链栈的运算(节选)
1)进栈 Push(&s, e): 要点:链表的头插法插入结点
        
代码理解:头插-先接后再接前
2)出栈 Pop(&s, &e): 要点:删除链表的首结点
        
代码理解:跳过删除结点连上,释放节点
3)取栈顶元素 GetTop(s, &e):
        
代码理解:取栈顶赋值于e
【队列】
一、顺序队
1、存储结构
  
2、顺序队类型的定义
typedef struct
{ElemtType data[MaxSize];int front,rear;            //队首和队尾指针
}SqQueue; 
3、顺序队的 四 要素
rear指向队尾元素;front指向队头元素的前一个位置。
  
代码理解:队空为重合,队满尾最高;进队尾加后入,出队前加后出;
4、顺序队的运算(节选)
1)进队列 enQueue(q,e):在队列不满的条件下,将队尾指针 rear 增 1,然后将元素添加到该位置。
2)出队列 deQueue(q,e):在队列不为空的条件下,将队首指针 front 循环增 1,并将该位置的元素值赋给 e。
          
二、链队
1、存储结构
   
一个链队的组成,包含两种类型的结点:
           (1)存储队列数据元素的链表结点
            (2)存储队头和队尾指针的链队头结点
2、链队结点类型的定义
链队的数据节点类型DataNode
typedef qnode
{ElemType data;      //数据元素struct qnode *next;
}DataNode; 
链队的头结点类型LinkQuNode
typedef struct
{DataNode *front;  //指向单链表队头结点DataNode *rear;   //指向单链表队尾结点
}LinkQuNode; 
3、链队的 四 要素


代码理解:队空为前后指向空;链队队满取决于内存大小,不考虑;进队尾插法,出队从头删;
4、链队的运算(节选)
1)进队 enQueue(q , e)

代码理解:先判队是否为空,是则既头又尾,否则尾插进入,接前再接尾;
2)出队 deQueue(q , e)
        
代码理解:删前先判断,为空则回错(return false),t指首结点;为独则设空,前后都指空;为多则好删,跳格接前再存值,最后再释放;
三、变形链队
1、变化要点
使用循环双链表,保留队尾指针rear。(队头指针可通过rear->next得出)
2、存储结构
                
尾指针rear会回指到队头
3、变形链队的 四 要素
                  
代码理解:队满看内存,不考虑;队空则尾指为空;进队则尾插法;出队则删头;
四、双端队列
1、不受限的双端队列:两端都可以进行进队和出队操作的队列
       
两端都可进出
2、输出受限的双端队列:一端允许进队和出队,另一端只允许进队
         
出口唯一,两端可进;后进为两边,先进在中间;
3、输入受限的双端队列:一端允许进队和出队,另一端只允许出队
        
进口唯一,两端可进;出队结果看两边;
五、环形队列(循环队列)
1、环形队列(循环队列) 四 要素      
 
代码理解:队空为重叠;队满则相邻(尾指针的下一个位置等于头指针的位置,牺牲一个元素);进队从尾进,出队从头出;
涉及环形更新指针解析:

六、变形环形队列
1、变化要点:
取消尾指针,利用队列中元素个数代替队尾指针
2、变形环形队列类型的定义
typedef struct
{ElemType data[MaxSize];int front;              //队头指针int count;              //队列中元素个数
}QuType; 
 
3、变形环形队列的 四 要素
        
代码解析:可参照环形队列;多了一个count来作为计数(记空与满),方便很多;
相关文章:
【嵌入式软件-数据结构与算法】01-数据结构
摘录于老师的教学课程~~(*๓╰╯๓)~~内含链表、队列、栈、循环队列等详细介绍~~ 基础知识系列 有空再继续更~~~ 目录 【链表】 一、单链表 1、存储结构:带头结点的单链表 2、单链表结点类型的定义 3、创建单链表 1)头插法 2)尾插法 …...
Windows应用开发-解析AVI视频文件
本Windows应用解析AVI视频文件,以表格的方式显示AVI文件结构。并可以将结果保存到bmp图片。下面是,使用该应用解析一部AVI电影获得的图片。 应用开发信息 定义一个INFO结构,包含两个字符串对象,一个ULONGLONG变量,和…...
探索TCP协议的奥秘:Python中的网络通信
引言 在网络通信的世界里,TCP协议(传输控制协议)就如同一座桥梁,连接着数据的发送方和接收方。作为一名拥有20年实战经验的编码专家,我深知TCP协议在构建稳定、可靠的网络应用中的重要性。今天,我将带领大…...
每日学习一个数据结构-树
文章目录 树的相关概念一、树的定义二、树的基本术语三、树的分类四、特殊类型的树五、树的遍历六、树的应用场景 树的遍历一、前序遍历二、中序遍历三、后序遍历使用java代码实现遍历总结 树的相关概念 树是一种重要的非线性数据结构,在计算机科学中有着广泛的应用…...
简单PCL库读文件(linux vscode编译)
#include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/common.h> #include <iostream>int main(int argc, char** argv) {if (argc ! 2) {std::cerr << "请指定 PCD 文件路径" << std::endl;return -…...
【自动驾驶】最近计划看的论文
将对应的论文链接贴出来,当作监督自己。 方向:端到端自动驾驶 方法论文代码UniADhttps://arxiv.org/pdf/2212.10156https://github.com/OpenDriveLab/UniADVADhttps://arxiv.org/pdf/2303.12077https://github.com/hustvl/VADUADhttps://arxiv.org/pdf…...
vue3学习:axios输入城市名称查询该城市天气
说来惭愧,接触前端也有很长一段时间了,最近才学习axios与后端的交互。今天学习了一个查询城市天气的案例,只需输入城市名称,点击“查询”按钮便可以进行查询。运行效果如下: 案例只实现了基本的查询功能,没…...
影刀RPA实战:Excel拆分与合并工作表
1.影刀操作excel的优势 Excel,大家都不陌生,它是微软公司推出的一款电子表格软件,它是 Microsoft Office 套件的一部分。Excel 以其强大的数据处理、分析和可视化功能而闻名,广泛应用于商业、教育、科研等领域。可以说࿰…...
STM32三种启动模式:【详细讲解】
STM32在上电后,从那里启动是由BOOT0和BOOT1引脚的电平决定的,如下表: BOOT模式选引脚启动模式BOOT0BOOT1X0主Flash启动01系统存储器启动11内置SRAM启动 BOOT 引脚的值在重置后 SYSCLK 的第四个上升沿时被锁定。在重置后,由用户决定是如何设…...
Ray_Tracing_The_Next_Week
1动态模糊 动态模糊在摄影中就是快门的速度慢,捕捉光的时间长,物体运动时进行捕捉成像,拍出来的结果是这个运动过程每一帧的平均值 我们的思路是: 每一条光线都拥有自己存在的一个时间点。随着时间变化随机生成光线,一般来说我…...
DBT hook 实战教程
本文将介绍dbt中在模型和seed级别使用post-hook的几个具体示例。dbt中的Post-hooks是一个强大而简单的特性,它在构建模型之后(如果是pre-hook,甚至在此之前)执行SQL语句。这些语句实际上(几乎)可以是任何东西,从将表复制到另一个数据库/模式&…...
SpringBoot整合JPA详解
SpringBoot版本是2.0以上(2.6.13) JDK是1.8 一、依赖 <dependencies><!-- jdbc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><!--…...
【微服务】springboot 实现动态修改接口返回值
目录 一、前言 二、动态修改接口返回结果实现方案总结 2.1 使用反射动态修改返回结果参数 2.1.1 认识反射 2.1.2 反射的作用 2.1.3 反射相关的类 2.1.4 反射实现接口参数动态修改实现思路 2.2 使用ControllerAdvice 注解动态修改返回结果参数 2.2.1 注解…...
【前端开发入门】html快速入门
目录 引言一、html基础模板内容二、html文档流三、html 标签1.块级元素2.行内元素3.功能性元素4.标签嵌套 四、html编码习惯五、总结 引言 本系列教程旨在帮助一些零基础的玩家快速上手前端开发。基于我自学的经验会删减部分使用频率不高的内容,并不代表这部分内容不…...
python配置环境变量
方法一:首先卸载重新安装,在安装时勾选增加环境变量 方法二:我的电脑-属性-高级系统配置 手动添加环境变量,路径为python的安装路径 检查:查看环境变量是否安装成功 安装第三方lib winr,输入cmd pip ins…...
从0到1:培训机构排课小程序开发笔记一
业务调研 随着人们生活水平的提高,健康意识和学习需求日益增强,私教、健身和培训机构的市场需求迅速增长。高效的排课系统不仅可以提升机构的管理效率,还能提高学员的满意度。解决传统的排课方式存在的时间冲突、信息不对称、人工操作繁琐等…...
方法重载(Overload)
前言 在前面的学习中,我们学到了重写(Override),这里我们主要进行重载(Overload)的介绍,同时对重写和重载的区别进行分析。 1. 重载(Overload) #方法重载 在同一个类中定义多个同名但参数不同的方法。我们称方法与方法之间构成方法重载 在Java中&…...
[论文笔记]SGPT: GPT Sentence Embeddings for Semantic Search
引言 解码器Transformer的规模不断壮大,轻松达到千亿级参数。同时由于该规模,基于提示或微调在各种NLP任务上达到SOTA结果。但目前为止解码器Transformer还无法应用在语义搜索或语句嵌入上。 为了简单,下文中以翻译的口吻记录,比…...
基于微信小程序的旅游拼团系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
富格林:警悟可信经验安全投资
富格林指出,黄金具有不错的投资价值,一直以来备受投资者的喜爱,近年来大家也纷纷加入现货黄金市场为己增值财富。但是要为投资安全护航的前提,是需要投资者使用合适可信的方法以及掌握相对应的投资技巧。下面富格林将总结以下可信…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
