数据结构与算法01:绪论【LEARN FROM 李春葆《数据结构教程》】(一)

简介: 数据结构与算法01:绪论【LEARN FROM 李春葆《数据结构教程》】

写在前面

关于本文,被收集在我的专栏《数据结构与算法教程笔记》中,笔记整理来自李春葆老师的《数据结构教程第六版》。更多章节可参考该专栏。【该专栏目前处于持续更新状态 -2022/9/11 】

1.数据结构总览

1.1 内容

基本数据组织和数据处理方法

各种数据的逻辑结构描述

各种数据的存储结构表示

各种数据结构的运算定义

设计实现运算的算法

分析算法的效率

1.2 数据结构在计算机课程体系(偏软)中的地位

计算机基础C语言

C语言

数据结构

算法设计与分析操作系统

编译原理

数据库原理

软件工程

1.3 数据结构与程序设计类课程的关系

基本编程

以数据机构为中心的算法设计

基本算法设计方法

通用算法设计

算法设计方法学

程序设计语言

数据结构

算法设计与分析

识字

写小作文

写大文章

1.4 数据结构的学习目标

  • 掌握数据结构的基本概念、基本原理和基本方法。
  • 掌握数据的逻辑结构、存储结构及基本运算的实现过程。
    提炼
    设计
    实现
    求解问题
    数据运行-->数据
    数据逻辑结构
    数据存储结构
    数据基本运行:算法
  • 掌握算法基本的时间复杂度与空间复杂度的分析方法,能够设计出求解问题的高效算法。
    ✏️ 同一求解问题通常有多种实现算法,通过时间复杂度与空间复杂度的分析,找出最好的实现算法。

1.5 数据结构的学习方法

  • 理解各种数据结构的逻辑特性和存储结构设计
    映射:计算机中的表示

    逻辑特性
    存储结构
    线性表

    队列

    数组

    二叉树

  • 掌握各种数据结构算法设计的基本方法
    ✏️ 只有掌握了数据的存储结构表示,才能在此之上设计算法
    映射:计算机中的表示
    运算实现
    逻辑特性
    存储结构
    算法设计
  • 利用各种数据结构来求解实际问题



    求解问题
    数据如何表示(选择合适的数据结构)
    数据运算如何实现
    数据运算如何高效实现
  • 演绎和归纳相结合
    演绎学习
    训练
    归纳总结
    数据结构
    鱼(内容):基本概念,基本原理和基本方法
    练习(作业和编程)
    渔(方法):求解问题的能力

2.什么是数据结构

2.1 数据结构的定义

2.1.1 数据结构中的几个概念

  1. 数据:所有能够输入到计算机中,且能被计算机处理的符号的集合。数据结构中主要讨论结构化数据。

  2. 数据元素:是数据(集合)中的一个“个体”,它是数据的基本单位。
  3. 数据项:数据项是用来描述数据元素的,它是数据的最小单位。
  4. 数据对象:具有相同性质的若干个数据元素的集合,如整数数据对象是所有整数的集合。默认情况下,数据结构中讨论的数据都是数据对象。
  5. 数据结构:是指带结构的数据元素的集合。


    数据结构
    数据对象:相同性质的数据元素的集合
    结构:数据元素之间的关系构成结构

2.1.2 一个数据结构的构成

逻辑结构

存储结构

数据运算

  1. 数据的逻辑结构:数据元素之间的逻辑关系
  2. 数据的存储结构(或物理结构):数据元素及其关系在计算机存储器中的存储方式
  3. 数据运算:施加在该数据上的操作

2.1.2.1 数据的逻辑结构表示

  1. 数据的逻辑结构是面向用户的,它有多种表示形式。
  2. 二元组是一种通用的逻辑结构表示方法。
  3. 每个关系的用若干个序偶来表示

2.1.2.2 数据的存储结构表示

1️⃣ 数据在计算机存储器中的存储方式就是存储结构。它是面向程序员的。逻辑结构映射存储结构。

2️⃣ 设计存储结构的这种映射应满足两个要求:

  1. 存储所有元素
  2. 存储数据元素间的关系
  3. 结构体数组(顺序存储结构)
  • 所有元素占用一整块内存空间
  • 逻辑上相邻的元素,物理上也相邻。
  1. 链表(链式存储结构)
  • 一个逻辑元素用一个结点存储,每个结点单独分配,所有结点的地址不一定是连续的。
  • 用指针来表示逻辑关系。

2.1.2.3 数据运算

数据运算是对数据的操作。分为两个层次:运算描述 和 运算实现。

  • 同一逻辑结构可以对应多种存储结构。
  • 同样的运算,在不同的存储结构中,其实现过程是不同的

2.2 逻辑结构类型

各种各样的数据呈现出不同的逻辑结构,归纳为4种。

2.2.1 集合

  • 元素之间关系:无。
  • 特点:数据元素之间除了“属于同一个集合”的关系外,别无其他逻辑关系。是最松散的,不受任何制约的关系。

2.2.2 线性结构

  • 元素之间关系:一对一。
  • 特点:开始元素和终端元素都是唯一的,除此之外,其余元素都有且仅有一个前驱元素和一个后继元素。

2.2.3 树形结构

  • 元素之间关系:一对多。
  • 特点:开始元素唯一,终端元素不唯一。除终端元素以外,每个元素有一个或多个后继元素;除开始元素外,每个元素有且仅有一个前驱元素。

2.2.4 图形结构

  • 元素之间关系:多对多。
  • 特点:所有元素都可能有多个前驱元素和多个后继元素。

2.3 存储结构类型

在软件开发中,人们设计了各种存储结构。 归纳为4种基本的存储结构。

  • 顺序存储结构
  • 链式存储结构
  • 索引存储结构
  • 哈希(散列)存储结构

2.4 数据类型和抽象数据类型

2.4.1 数据类型

1️⃣ 在高级程序语言中提供了多种数据类型。不同数据类型的变量,其所能取的值的范围不同,所能进行的操作不同。

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

3️⃣ 数据类型和数据结构的关系:数据类型就是已经实现了的数据结构。

2.4.2 抽象数据类型

1️⃣ 抽象数据类型(ADT)指的是从求解问题的数学模型中抽象出来的数据逻辑结构和运算(抽象运算),而不考虑计算机的具体实现。

2️⃣ 抽象数据类型 = 逻辑结构 + 抽象运算

3️⃣ 抽象数据类型实质上就是对一个求解问题的形式化描述(与计算机无关),程序员可以在理解基础上实现它。

3.算法及其描述

3.1 什么是算法

数据元素之间的关系有逻辑关系和物理关系,对应的运算有基于逻辑结构的运算描述和基于存储结构的运算实现。

1️⃣ 数据是各种信息的表现形式

2️⃣ 算法表现为“处理”和“数据”的结合

通常把基于存储结构的运算实现的步骤或过程称为算法。更一般地,算法是 解决问题的处理步骤

✏️ 算法的五个重要的特性

  • 有穷性:在有穷步之后结束,算法能够停机。
  • 确定性:无二义性。
  • 可行性:可通过基本运算有限次执行来实现,也就是算法中每一个动作能够被机械地执行。
  • 输入:0个或多个输入【表示存在数据处理】
  • 输出:1个或多个输出【表示存在数据处理】

✏️ 算法和程序的区别

  • 程序是指使用某种计算机语言对一个算法的具体实现,即具体要怎么做。
    程序不一定满足有穷性
  • 算法侧重于对解决问题的方法描述,即要做什么。
    算法一定满足有穷性
  • 算法用计算机语言描述 --> 程序

3.2 算法描述

❓ 如何描述输出型参数

📍 C++语言中提供了一种引用运算符“&”用于描述输出型参数。

✏️ 算法可以采用自然语言流程图或者表格方式等来描述。但是,一个学习计算机的学生应该使用某种计算机语言来描述算法。


相关文章
|
21天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
65 4
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
91 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
18天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
26天前
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
87 23
|
17天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
46 1
|
26天前
|
算法 vr&ar 计算机视觉
数据结构之洪水填充算法(DFS)
洪水填充算法是一种基于深度优先搜索(DFS)的图像处理技术,主要用于区域填充和图像分割。通过递归或栈的方式探索图像中的连通区域并进行颜色替换。本文介绍了算法的基本原理、数据结构设计(如链表和栈)、核心代码实现及应用实例,展示了算法在图像编辑等领域的高效性和灵活性。同时,文中也讨论了算法的优缺点,如实现简单但可能存在堆栈溢出的风险等。
38 0
|
2月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
40 4
|
2月前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
25 0
数据结构与算法学习十四:常用排序算法总结和对比
|
2月前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
2月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
31 0