嵌入式学习day17(数据结构)
大纲
数据结构、算法
数据结构:
1. 线性表:顺序表、链表(单向链表,单向循环链表,双向链表,双向循环链表)、栈(顺序栈,链式栈)、队列(循环队列,链式队列)
2. 树:二叉树、遍历、创建
算法:
查询方法、排序方式
为什么要学数据结构?
1.C语言是学习如何写程序,数据结构是学习如何简洁高效的写程序
2.如果遇到一个实际问题,需要写代码实现相应功能,需要解决两个问题:
(1).如何表达数据间的逻辑关系以及怎么存储到计算机当中?
数据结构:数据的逻辑结构以及存储操作
数据:不再是单纯的数字,而是类似于一个集合的概念
结构:数据之间的关系
(2).采用什么方法去解决?
采用算法去解决
数据结构+算法=程序
一丶数据结构
1.概念
数据的逻辑结构,存储结构及操作(数据的运算)
2.数据
数据元素:是数据的基本单位,由若干个数据项组成
数据项:是数据的最小单位,描述数据元素信息
数据元素又叫节点
3.结构
3.1逻辑结构
数据元素并不是独立存在的,他们之间存在着某种关系(联系或结构)。
元素和元素之间的关系:
线性关系:
线性关系 ---》 线性结构 ---》一对一 ----》线性表:顺序表、链表、栈、队列
层次关系:
层次关系 ---》 树形结构 ---》一对多 --- 》 树:二叉树
网状结构:
网状关系 ---》 图状结构 ---》 多对多 ---》图
3.2存储结构
数据的逻辑结构在计算机中的具体体现(数据的运算)
顺序存储:
特点:内尺连续,随机存取,每个元素占用较少
实现:数组
链式存储:
特点:内存不连续,通过指针实现
链表实现:通过定义结构体,里面是数据域和指针域
#include<stdio.h>
struct node
{int data;//数据域,存放节点要保存的地址struct node *next;//指针域,指向下一个节点的地址(类型为结构体指针)
};
int main(int argc, char const *argv[])
{ //定义三个节点struct node A={1,NULL};struct node B={2,NULL};struct node C={3,NULL};//连接三个节点A.next=&B;//连接A和B节点,让A中的指针域保存B的地址B.next=&C;//连接B和C节点,让B中的指针域保存C的地址printf("%d\n",A.data);//打印A中的数据域printf("%d\n",(A.next)->data);//打印B中的数据域printf("%d\n",(A.next)->next->data);//打印C中的数据域return 0;
}
索引存储:
也就是索引存储结构 = 索引表 + 存数据的文件
可以提高查找速度,特点检索速度快,但是占用内存多,删除数据文件要及时更改索引表。
散列存储:
数据在存储的时候与关键码之间存在某种对应关系
存的时候按照对应关系存
取的时候按照对应关系取
4.操作
二丶算法
1.概念
算法就是解决问题的思想方法,数据结构就是算法的基础
2.算法的设计
算法的设计:取决于数据的逻辑结构
算法的实现:依赖于数据的存储结构
3.算法的特点
有穷性:步骤是有限的
确定性:每一个步骤都有明确的含义,无二义性
可行性:在规定时间内可以完成
输入
输出
4.评价算法的好坏
易读性 :容易被解读
健壮性 : 容错处理
高效性 :执行效率,算法执行快慢容易受到计算机性能的影响,不可以作为评判算法高效性的标准,这通过可执行语句重复执行次数来衡量算法是否高效 。(时间复杂度)
低存储性 : 占用空间少
5.时间复杂度
T(n) = O(f(n))
T(n) //问题规模的时间函数
n //问题规模,输入量的大小
O //时间数量级
f(n) //算法的可执行语句重复执行的次数 用问题规模n的某个函数f(n)来表达
计算大O的方法
(1)根据问题规模n写出表达式 f(n)
(2) 只保留最高项,其它项舍去
(3) 如果最高项系数不为1,除以最高项系数
(4) 如果有常数项,将其置为1 //当f(n)的表达式中只有常数项的时候,有意义 f(n) = 8
如:f(n)=8 ->O(1)
f(n) = 3n^5 + 2n^3 + 6*n^6 + 10->O(n^6)
6.空间复杂度
算法占用的空间大小。一般将算法的辅助空间作为衡量空间复杂度的标准。
算法占用的存储空间包括:
1.输入输出数据所占空间
2.算法本身所占空间
3.额外需要的辅助空间
相关文章:
嵌入式学习day17(数据结构)
大纲 数据结构、算法数据结构: 1. 线性表:顺序表、链表(单向链表,单向循环链表,双向链表,双向循环链表)、栈(顺序栈,链式栈)、队列(循…...
网站怎么做敏感词过滤,敏感词过滤的思路和实践
敏感词过滤是一种在网站、应用程序或平台中实现内容审查的技术,用于阻止用户发布包含不适当、非法或不符合政策的内容。我们在实际的网站运营过程中,往往需要担心某些用户发布的内容中包含敏感词汇,这些词汇往往会导致我们的网站被用户举报&a…...
【峟思】如何使用投入式水位计才能确保测量准确性
在水利、环保、工业监测等众多领域,水位测量是一项至关重要的任务,它不仅直接关系到水资源的合理利用与保护,还影响到防洪、供水、排水等多个方面的安全与效率。投入式水位计作为一种常见的水位测量工具,以其结构简单、测量准确、…...
供应链管理系统(SCM) —— 企业物流的智能枢纽
SAP 供应链管理系统以打造数字化和集成化的供应链管理平台为使命,将传统的仓储管理系统、制造执行系统、产品管理系统等软件进行升级和上云管理,为企业提供面向客户、合作伙伴及员工的数字化SCM系统平台。 SAP SCM系统从设计到运维,全面优化供…...
计算机视觉(CV)技术的优势和挑战。
计算机视觉(CV)技术在许多领域中具有广泛的应用,并且具有一些优势和挑战。 优势: 1. 高效性:CV技术能够快速处理大量的图像和视频数据,以实现实时的分析和决策。 2. 自动化:CV技术可以自动化地…...
数据库MySQL多表设计、查询
目录 1.概述 2.一对多 3.一对一 4.多对多 5.多表查询 5.1内连接 5.2外连接 5.3子查询 1.概述 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个…...
基于vue框架的北城招聘管理平台题目7lly3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
系统程序文件列表 项目功能:用户,企业,企业信息,职位类型,职位信息,简历信息,职位应聘,求职意愿,面试信息,录取信息,实习信息,冻结信息,解冻信息 开题报告内容 基于Vue框架的北城招聘管理平台 开题报告 一、引言 随着互联网的飞速发展和企业对人才需求的不断增…...
详讲C#中如何存储当前项目的设置-超级简单省事
我们在编写软件的时候总有一些配置数据需要保存,比如用户选择的偏好设置,又如软件所用到的数据库文件等。我们有很多中方式都可以保存,比如直接保存在某个文本文件,或者ini文件中,其实最简单的办法是保存在项目的资源文…...
【QT文件操作】---xml文件读取
XML(可扩展标记语言,eXtensible Markup Language)是一种用于存储和传输数据的文本格式,广泛用于配置文件、数据交换和文档表示。XML 文件具有明确的结构和标记,这使得它能够描述复杂的层次结构和数据关系。 xml和html…...
科研软件 | Diamond 4.6 安装教程
软件介绍 Diamond一个化学专业软件。它是一款在原子水平实现晶体结构可视化的软件,包括分子和聚合物扩展、多面体、搜索结构数据、自动和批量创建结构图片等功能,支持晶体结构着色和渲染以及批注。 软件下载 https://pan.quark.cn/s/37214b5bec7c 软…...
利用keepalived达成服务高可用
官方网站Keepalived for Linux 1.keepalived简介 vrrp 协议的软件实现,原生设计目的为了 高可用 ipvs 服务 功能: 基于 vrrp 协议完成地址流动 为 vip 地址所在的节点生成 ipvs 规则 ( 在配置文件中预先定义 ) 为 ipvs 集群的各 RS 做健康状态检测 …...
Dumpy:一款针对LSASS数据的动态内存取证工具
关于Dumpy Dumpy是一款针对LSASS数据的动态内存取证工具,该工具专为红队和蓝队研究人员设计,支持重新使用打开的句柄来动态转储 LSASS。 运行机制 Dumpy可以动态调用 MiniDumpWriteDump 来转储 lsass 内存内容。此过程无需打开 lsass 的新进程句柄&…...
TinyEngine是什么?
TinyEngine 是 OpenTiny 项目下的一个开源低代码引擎,旨在帮助开发者快速构建应用程序。它提供了可视化搭建页面的能力,支持在线实时构建和二次开发或集成,适用于多种场景的低代码平台开发,例如资源编排、服务端渲染、模型驱动、移…...
FPGA跨时钟域处理
文章目录 一、为什么要做跨时钟域处理二、单bit信号从慢时钟到快时钟处理2.1 使用同步寄存器链(打两拍)2.2 仿真代码编写2.3 仿真结果观察 三、单bit信号从快时钟域到慢时钟域处理3.1 使用脉冲展宽3.2 仿真代码编写3.3 仿真结果观察 四、在任意时钟域跨单bit信号4.1 使用握手协…...
【Docker深入浅出】Docker镜像
文章目录 一. Docker镜像简介二. Docker镜像详解1. 镜像和容器的关系2. 镜像通常比较小3. 拉取镜像4. 镜像命名4.1. 镜像仓库服务4.2. 官方和非官方镜像仓库4.3. 镜像的命名和标签 5. 为镜像打多个标签6. 过滤镜像内容6.1. 虚空镜像6.2. 删除虚空镜像6.3. 过滤器与格式化输出 7…...
“LOCAL_LISTENER”参数导致业务无法连接数据库,文末附Oracle连接故障检查监听的排查流程
1. 背景及问题 今天在Oracle BCV技术[1]做数据同步,建立生产库的测试库,需要DBA配合同步前后的停库和起库。在同步完起库后,有部门反应同步好的测试库连接不上去。 2. 问题排查 以我当前的知识储备,能想到的可能就是以下几点进…...
Vmware虚拟机接入物理机路由器网络
网络适配器增加至两个,一个选NAT, 另一个选host-only,再加一个桥接,不勾选使用物理网卡,然后重启即可!...
yolov8旋转框+关键点检测
一、Yolov8obb_kpt -----------------------------------现已在v8官方库上更新旋转框分割算法和旋转框关键点检测算法-------------------------- ------------------------------------------- https://github.com/yzqxy/ultralytics-obb_segment---------------------------…...
Qt-QWidget的windowTitle属性(13)
目录 描述 相关API 使用观察 描述 这个我们之前用过很多次了,就不再赘述了,简单说就是可以给那个边框设置标题,但是这里有一个小细节需要我们注意,就是谁的窗口谁设置 相关API 使用观察 我们这样写的话会发现一个问题&#x…...
RCE编码绕过--php://filter妙用
目录 代码 如何绕过 payload构造 代码 <?php $content <?php exit; ?>; $content . $_POST[txt]; file_put_contents($_POST[filename],$content); 当你想要输入代码的时候前面会有<?php exit;?>;,代码没有办法执行下去,所以…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
