数据结构系列(一)概论总结

引言

计算机解决一个具体问题时,一般需要经过以下几个步骤:

  1. 从具体的问题抽象出一个适当的数学模型;什么是数学模型呢?数学模型常常是现实世界的一个简化,是抽取对象的本质特性构造出来的。尽管数学是一门精准的科学,但是我们建立数学模型却要从实际出发,要针对问题做必要简化,简化的标准有两个:够用、易解。
  2. 设计一个求解该数学模型的算法
  3. 用某种计算机编程语言编写实现该算法的程序,调试和运行程序直至最终得到问题的解。

计算机解决问题的步骤

基本概念和术语

data_structure

  • 数据:所有被计算机存储、处理的对象。
  • 数据对象:是性质相同的数据元素的集合,是数据的子集。
  • 数据元素:数据的基本单位,也是运算的基本单位。例如在数据库中,又称为记录(Record)/元组(Tuple)。
  • 数据项:数据不可分割的最小单位。例如在数据库中,又称为字段(Field)/域(Domain)。
  • 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。它包括:
    • 数据的逻辑结构
    • 数据的存储结构
    • 数据的基本运算

逻辑结构

https://en.wikipedia.org/wiki/Abstract_data_type

集合结构

任意两个结点之间都没有邻接关系,组织形式松散:

集合结构

集合的三大特性:

  • 确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。
  • 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。有时需要对同一元素出现多次的情形进行刻画,可以使用多重集,其中的元素允许出现多次。
  • 无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序。但就集合本身的特性而言,元素之间没有必然的序。

集合之间可以进行运算:

数学符号 含义 英文
Intersection
Union
Difference

线性结构

顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。

而与它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。

线性结构

特征:

  • 排队(1:1)
  • 起始节点无直接前驱
  • 终端节点无直接后继
  • 中间节点都有直接前驱和直接后继

树形结构

父子(1:N)

树形结构的相关术语

有没有想过为啥只有二叉树,而没有一叉树?实际上链表就是特殊的树,即一叉树。

图结构

地图(N:M)

图结构

存储结构

数据的逻辑结构在计算机中的实现,称为数据的存储结构(或物理结构)。

一般情况下,一个存储结构包括以下两个部分:

  • 存储数据元素本身
  • 数据元素之间的关联方式

逻辑结构常见的存储结构实现如下:

顺序存储方式 链式存储方式 散列存储方式 索引存储方式
集合结构 散列表(Hash Table)
线性结构 数组(一维、二维)
顺序栈
循环队列(取余运算)
链表(单向/双向、是否循环)
链栈
链队列
树形结构
(二叉树)
一维数组
  • 满二叉树
  • 完全二叉树
  • 非完全二叉树(需增设虚拟结点转为完全二叉树)
  • 链表
  • 二叉链表
  • 三叉链表
  • 树形结构
    (树)
    双亲表示法(一维数组) 孩子链表表示法(一维数组 + 单链表)
    孩子兄弟表示法(二叉链表,LC-RS)
    图结构 邻接矩阵(二维数组) 邻接表(一维数组 + 单链表)

    顺序存储方式

    所有存储结点存放在一个连续的存储区中。利用结点在存储区中的相对位置来表示数据元素之间的逻辑关系。

    链式存储方式

    每个存储结点除了含有一个数据元素之外,还包含指针,每个指针指向一个与本结点有逻辑关系的结点。利用指针表示数据元素之间的逻辑关系。

    散列存储方式

    散列表(Hash Table)。

    索引存储方式

    基本运算

    基本运算,是指在某种逻辑结构上施加的操作,即对逻辑结构的加工。这种加工以数据的逻辑结构为对象。一般而言,在每个逻辑结构上,都定义了一组基本运算,这些运算包括:等。

    • 建立(Init)
    • 读取(Access)
    • 查找(Search)
    • 插入(Insert)
    • 删除(Delete)

    算法

    定义:一个算法规定了求解给定问题所需的处理步骤及其执行顺序,使得给定问题能在有限时间内被求解。

    算法分析:

    • 正确性
    • 易读性
    • 健壮性
    • 时空性

    时间复杂度

    空间复杂度

    常用数据结构

    data_structure

    参考

    https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

    https://www.bigocheatsheet.com

    https://the-algorithms.com/

    数据结构与算法教程 C 语言版教程

    Techie Delight