数据结构与算法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++语言中提供了一种引用运算符“&”用于描述输出型参数。

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


相关文章
|
4月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
216 6
|
3天前
|
存储 算法 Java
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
32 9
 算法系列之数据结构-二叉树
|
2天前
|
算法 Java
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
43 22
|
1月前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
88 29
|
1月前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
99 25
|
1月前
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
72 23
|
3月前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
85 20
|
2月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
55 2
|
4月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
4月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
104 1