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

数据结构——考研笔记(一)绪论

目录

  • 数据结构
    • 一、绪论
      • 1.1 数据结构的基本概念
        • 1.1.1 什么是数据?
        • 1.1.2 数据元素——描述一个个体
        • 1.1.3 什么是数据对象
        • 1.1.4 什么是数据机构
      • 1.2 数据结构的三要素
        • 1.2.1 逻辑结构
        • 1.2.2 数据的运算
        • 1.2.3 物理结构
        • 1.2.4 数据类型、抽象数据类型
        • 1.2.5 知识回顾与重要考点
      • 1.3 算法的基本概念
        • 1.3.1 什么是算法?
        • 1.3.2 算法的特性
        • 1.3.3 “好”算法的特质
        • 1.3.4 知识回顾与重要考点
      • 1.4 算法效率的度量
        • 1.4.1 算法时间复杂度
        • 1.4.2 知识回顾与重要考点
        • 1.4.3 算法空间复杂度
        • 1.4.4 知识回顾与重要考点

数据结构

数据结构在学什么?

  • 如何用程序代码把现实世界的问题信息化
  • 如何用计算机高效地处理这些信息从而创造价值

image-20240711175010794

一、绪论

需要具备的知识:C/C++(408只能用C/C++答题)。

image-20240711175452068

1.1 数据结构的基本概念

数据结构的基本概念:

  • 数据
  • 数据元素、数据项
  • 数据对象、数据结构
1.1.1 什么是数据?

image-20240711175945635

数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。

1.1.2 数据元素——描述一个个体

image-20240711180906753

数据元素、数据项:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。

1.1.3 什么是数据对象

image-20240711181301794

数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。

数据结构:数据机构是相互之间存在一种或多种特定关系的数据元素的集合。

1.1.4 什么是数据机构

image-20240711181758687

1.2 数据结构的三要素

image-20240711182035976

数据结构三要素

  • 逻辑结构:
    1. 集合结构
    2. 线性结构(一对一)
    3. 树形结构(一对多)
    4. 图状结构(多对多)
  • 数据的运算
  • 物理结构(存储结构)
1.2.1 逻辑结构

集合:各个元素同属一个集合,别无其他关系

image-20240711182431306

线性结构:数据元素之间是一对一的关系。除了第一个元素,所有元素都有唯一前驱;除了最后一个元素,所有元素都有唯一后继。

image-20240711182710865

树形结构:数据元素之间是一对多的关系。

image-20240711182839423 image-20240711182855453

图结构:数据元素之间是多对多的关系。

image-20240711183056035

1.2.2 数据的运算

image-20240711183419766

基本运算:

  1. 查找第i个数据元素
  2. 在第i个位置插入新的数据元素
  3. 删除第i个位置的数据元素……
1.2.3 物理结构

image-20240711183714626

数据的存储结构

  1. 顺序存储
  2. 链式存储
  3. 索引存储
  4. 散列存储

顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

image-20240711184009777

链式存储:逻辑上相邻的元素在物理位置上可以不相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。

image-20240711184229358

索引存储:在存储元素信息的同时,还建立附加的索引表。索引表中每项称为索引项,索引项的一般形式是(关键字,地址)。

image-20240711184453763

散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希(Hash)存储

image-20240711184734799


image-20240711185049001

  1. 若采用顺序存储,则各个数据元素在物理上必须是连续的;若采用非顺序存储,则各个数据元素在物理上可以是离散的
  2. 数据的存储结构会影响存储空间分配的方便程度。
  3. 数据的存储结构会影响对数据运算的速度。
  • 运算的定义是针对逻辑结构的,指出运算的功能;
  • 运算的实现是针对存储结构的,指出运算的具体操作步骤。
1.2.4 数据类型、抽象数据类型

数据类型:数据类型是一个值的集合和定义在此集合上的一组操作的总称。

  1. 原子类型:其值不可再分的数据类型。
  2. 结构类型:其值可以再分解为若干成分(分量)的数据类型。

image-20240711190135032

抽象数据类型(Abstract Data Type,ADT):是抽象数据组织及与之相关的操作。

image-20240711190408700

1.2.5 知识回顾与重要考点

image-20240711190508259

1.3 算法的基本概念

算法的基本概念

1. 什么是算法
2. 算法的五个特性
3. “好”算法的特质
1.3.1 什么是算法?

程序 = 数据结构 + 算法

数据结构:如何用数据正确地描述现实世界的问题,并存入计算机。

算法:如何高效地处理这些数据,以解决实际问题

算法:算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。

image-20240712113143989

1.3.2 算法的特性

有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。

注:算法必须是有穷的,而程序可以是无穷的

确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。

可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。

输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。

输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

1.3.3 “好”算法的特质
  1. 正确性:算法应能够正确地解决求解问题。
  2. 可读性:算法应具有良好的可读性,以帮助人们理解。
  3. 健壮性:输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
  4. 高效率和低存储量需求:花的时间少且内存开销少,也就是时间复杂度和空间复杂度低。
1.3.4 知识回顾与重要考点

image-20240712124148843

1.4 算法效率的度量

image-20240712124458939

算法效率的度量

1. 时间复杂度
2. 空间复杂度
1.4.1 算法时间复杂度

算法时间复杂度:事前预估算法时间开销T(n)与问题规模n的关系(T表示“time”)

image-20240712125259478

思考

问题一:是否可以忽略表达式某些部分?

问题二:如果有好几千行代码,按这种方法需要一行一行数?

image-20240712125729648

大O表示“同阶”,同等数量级。即:当n -> ∞时,二者之比为常数。

  • 时间复杂度的运算规则

    image-20240712130131378

上述最后结果为多少呢?可以参照下面

image-20240712130352454


image-20240712130826051

image-20240712130844596

记住以上三个结论:

1. 顺序执行的代码只会影响常数项,可以忽略
2. 只需挑循环中的一个基本操作分析它的执行次数与n的关系即可
3. 如果有多层嵌套循环,只需关注最深层循环循环了几次

image-20240712131110925

  • 总结
    • 最坏时间复杂度:最坏情况下算法的时间复杂度;
    • 平均时间复杂度:所有输入示例等概率出现的情况下,算法的期望运行时间;
    • 最好时间复杂度:最好情况下算法的时间复杂度。
1.4.2 知识回顾与重要考点

image-20240712131954252

1.4.3 算法空间复杂度

image-20240712132438867


image-20240712132601269

只需关注存储空间大小与问题规模相关的变量


image-20240712132749053


image-20240712132838669

  • 运算规则

    image-20240712132900988


  • 函数递归调用带来的内存开销

    image-20240712133327509

空间复杂度 = 递归调用的深度

1.4.4 知识回顾与重要考点

image-20240712133547345

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 百日筑基第十八天-一头扎进消息队列1
  • Nature Communications|柔性高密度、高灵敏应变传感器阵列(柔性应变传感/界面调控/电子皮肤/柔性电子)
  • Backend - C# 基础知识
  • PyTorch 2-深度学习-模块
  • Java版Flink使用指南——自定义无界流生成器
  • 【爬虫】解析爬取的数据
  • [1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)
  • 基于React 实现井字棋
  • vue vite+three在线编辑模型导入导出
  • Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?
  • S5730 OSPF: 配置 OSPF 进程和区域
  • 硬盘模式vmd怎么改ahci_电脑vmd改ahci模式详细步骤
  • Visual Studio编译优化选项
  • PPTP、L2TP、IPSec、IPS 有什么区别?
  • 星网安全产品线成立 引领卫星互联网解决方案创新
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • CSS中外联样式表代表的含义
  • Hexo+码云+git快速搭建免费的静态Blog
  • httpie使用详解
  • JS基础之数据类型、对象、原型、原型链、继承
  • Otto开发初探——微服务依赖管理新利器
  • PHP 7 修改了什么呢 -- 2
  • scrapy学习之路4(itemloder的使用)
  • Shadow DOM 内部构造及如何构建独立组件
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 基于web的全景—— Pannellum小试
  • 解析 Webpack中import、require、按需加载的执行过程
  • 经典排序算法及其 Java 实现
  • 配置 PM2 实现代码自动发布
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 通过几道题目学习二叉搜索树
  • 移动端 h5开发相关内容总结(三)
  • 怎么将电脑中的声音录制成WAV格式
  • 第二十章:异步和文件I/O.(二十三)
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​低代码平台的核心价值与优势
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #Linux(Source Insight安装及工程建立)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (13)DroneCAN 适配器节点(一)
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (笔试题)合法字符串
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (力扣)1314.矩阵区域和
  • (十三)Flink SQL
  • (算法)N皇后问题