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

嵌入式培训之数据结构学习(一)数据结构的基础概念、线性表

一、基础概念

1、数据结构:相互之间存在一种或多种特定关系的数据元素的集合。(特定关系有逻辑关系与线性关系)

(1)逻辑结构

        集合,所有数据在同一个集合中,关系平等(数组)

        线性,数据和数据之间是一对一的关系(数组)

        树, 一对多

        图,多对多

注:数组属于线性表的一种形式;

(2)物理结构(在内存当中的存储关系)

        顺序存储,数据存放在连续的存储单位中,逻辑关系和物理关系一致;

        链式存储(链表),数据存放的存储单位是随机或任意的,可以连续也可以不连续  (一般认为不连续)

2、数据、 数剧项、数据元素、数据对象

(1)数据:可输入输出,具备一些操作(相当于C语言中的变量)

(2)数据项:给变量赋予一定的含义

(3)数据元素:多个基础的数据项拼在一起(C语言中用struct自定义表示)

(4)数据对象:数据元素的集合

eg:

struct Per //数据元素
{
char name;//数据项
int age;
char phone;
}
struct Per list[100]; //数据对象


3、数据的类型,ADT    abstruct datatype

(1)ADT:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。

        原子类型,int,char,float

        结构类型,sturct, union,

(2)抽象数据类型, 数学模型 + 操作。

4、数据结构角度解释程序:(程序 =  数据(被加工对象) + 算法(函数))

(1)算法的定义:是解决特定问题求解步骤的描述,计算机中表现为指令的有限

列,每条指令表示一个或多个操作。

(2)算法的特征:
        输入,输出特性:输入时可选的,输出时必须的(调用函数后要发生一些变化);

        有穷性:执行的步骤会自动结束,不能是死循环,并且每一步是在可以接受的时间

内完成;    

         确定性:同一个输入,会得到唯一的输出;

         可行性:每一个步骤都是可以实现的(用编程语言实现)。

(3)算法的设计:

         正确性:语法正确;

                       合法的输入能得到合理的结果;

                       对非法的输入,给出满足要求的规格说明;

                       对精心选择,甚至刁难的测试都能正常运行,结果正确(加必要的判                               断);

        可读性:便于交流,阅读,理解(适当注释,编写项目文档)

        健壮性:输入非法数据,能进行相应的处理,而不是产生异常

        高效性:存储低,效率高 (时间与空间两个方面)

5、算法时间复杂度

(1)是执行这个算法所花时间的度量,eg:O(n)   O(1)

(2)推时间复杂度:

        用常数1 取代运行时间中的所有加法常数;

        在修改后的运行函数中,只保留最高阶项;

        如果最高阶存在且不是1,则取除这个项相乘的常数。

(3)时间复杂度排序:

        O(1)<O(logn)<O(N)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)

二、线性表

1、定义:有零个或多个数据元素的有限序列;

2、元素之间是有顺序的,如果存在多个元素,第一个元素无前驱,最有一个没有后

继,其他的元素只有一个前驱和一个后继;

3、当线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,为空表。在非空的

表中每个元素都有一个确定的位置,如果a1是第一个元素,那么an就是第n个元素。

4、线性表中的顺序表:

表头结构(数组当前状态,后期方便应用管理)

typedef struct list {
    DATATYPE *head;//指针
    int tlen;//总长度
    int clen;//当前长度(数组元素个数)(未使用空间时为0)
}SeqList//顺序表;

5、sudo:以管理员身份运行命令;

6、memcpy函数:需要包含头文件#incude<string.h>

        更通用的一个函数(整个内存空间发到需要的地方)

        函数形式:void *memcpy(void *restrict_dest, void *restrict_src, unsigned n);

http://www.xdnf.cn/news/400195.html

相关文章:

  • 【AXI总线专题】AXI-FULL-Master
  • 具身-机器人-分层框架-大脑模块-RoboBrain1.0 RoboOS
  • AI大模型学习二十、利用Dify+deepseekR1 使用知识库搭建初中英语学习智能客服机器人
  • IBM BAW(原BPM升级版)使用教程第十二讲
  • ACL访问控制列表:access-list 10 permit 192.168.10.1
  • Matlab 模糊pid的液压舵机伺服系统
  • 重构金融数智化产业版图:中电金信“链主”之道
  • 【AI提示词】波特五力模型专家
  • Jenkins:库博静态工具CI/CD 的卓越之选
  • Pytorch常用统计和矩阵运算
  • 榜单按行显示
  • IP代理技术原理深度解析:从基础架构到应用实践
  • Open CASCADE学习|由大量Edge构建闭合Wire:有序与无序处理的完整解析
  • Matlab 基于GUI的汽车巡航模糊pid控制
  • STM32 变量存储
  • 深入浅出 iOS 对象模型:isa 指针 与 Swift Metadata
  • 生成对抗网络(GAN)深度解析:理论、技术与应用全景
  • SEGGER Embedded Studio 如何将其中的一个c文件 打包成静态库?
  • 最大m子段和
  • WebGL图形编程实战【6】:性能优化 × 调试工具与技巧精讲
  • (done) 补充:xv6 的一个用户程序 init 是怎么启动的 ?它如何启动第一个 bash ?
  • 模块化PCB设计中联排半孔的应用
  • 接口出现 请求参数格式错误 的解决方法
  • 使用 Navicat 将 Excel 导入数据库
  • C#WPF里不能出现滚动条的原因
  • geoserver发布arcgis瓦片地图服务(最新版本)
  • web 自动化之 Unittest 应用:报告装饰器断言
  • spring中的@PropertySource注解详解
  • 【SSM-SSM整合】将Spring、SpringMVC、Mybatis三者进行整合;本文阐述了几个核心原理知识点,附带对应的源码以及描述解析
  • 《步进电机最小转速终极指南:从理论到实战,突破低速极限的5大秘技》