# 基本的数据结构

# 认识数据结构

# 数据结构的说明


数据结构起源于程序设计,是用计算机来存储、组织数据的方式。数据结构不是使我们学会编码,而是为我们提供一种编程的思想,具有更好的思路。

关于数据结构有两种说法,如下:

  • 广义的说法:数据结构 = 数据存储 + 算法
  • 狭义的说法:数据结构 = 数据的存储;

# 数据结构和算法的关系


数据结构与算法是相互依托的关系。计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法:

  • 数据结构 ==> 建筑工程中的建筑设计图
  • 算法 ==> 工程中的施工流程图

# 用数据结构可以做什么


  • 程序员的内功心法之一
  • 有效管理数据对象
  • 解决处理性能问题
  • 面试加分项(现在一些简单的数据结构和算法已经是必备项了)

# 基本数据结构及衍生结构

# 几个算法中的基本概念


  • 数据
  • 数据元素
  • 数据项
  • 数据对象
  • 数据结构

它们之间的关系就像下图一样:

算法的几个基本概念

# 浅析数据结构


数据元素相互之间的关系称为结构。数据结构是与算法紧密结合的。

  • 逻辑结构:反映数据元素之间的逻辑关系。
  • 存储结构:数据结构在计算机中的表示。
  • 算法:对数据的操作

数据结构分类

数据结构与算法体系图

# 基本的逻辑结构


基本的逻辑结构

  • 集合
  • 线性结构
  • 树状结构
  • 图状结构(网状结构)

# 集合

数据结构中的集合关系就类似于数学中的集合。

集合

  • 集合中的数据成员是无序的。
  • 每个数据成员在集合中不能重复,仅且只出现一次。

# 线性表

线性结构中的数据元素之间是一对一的关系。也就是数据元素一个接一个地排列。

  • 用来存放特定的某一个类型的元素
  • 物理结构为顺序表和链表
  • 线性表的基本操作
    • 1.创建线性表
    • 2.添加元素
    • 3.删除元素
    • 4.读数据
    • 5.遍历线性表
    • 6.查找线性表
    • 7.销毁线性表

# 线性表的衍生结构

  • 1.栈
  • 2.队列
  • 3.串
  • ...

#

栈是一种被限制操作的线性表。栈是一种先进后出 LIFO(Last In First Out) 的数据结构。(桶装的薯片是现实中一个最简单的栈结构))

栈

  • 基本概念

    • 向栈中添加数据叫入栈
    • 从栈中向外拿数据叫出栈
    • 栈中没有数据叫空栈
    • 空栈或者栈中只有1个元素的时候 栈顶即是栈底
    • 添加元素的时候,栈顶在不断的变化
  • 操作规则

    • 创建栈结构
    • 入栈
    • 出栈
    • 读栈顶
    • 清空栈
    • 销毁栈结构
  • 用途:

    • 解决括号匹配检查
    • 浏览器的后退或编辑器的undo功能

# 队列

队列是一种被限制操作的线性表。队列是一种先进先出 FIFO(First In First Out) 的数据结构。(我们在吃自助的时候,放冰淇凌筒的那个管子就是一种队列,只能从上往下走)

队列

  • 基本概念

    • 向队列中添加数据叫入队
    • 从队列中向外拿数据叫出队
    • 队列中没有数据叫空队
    • 当队列中只有1个元素的时候 该元素即是队首,又是队尾
  • 用途:

    • 消息队列、视频弹幕
    • 维护打印机任务

也有一些特殊的队列,比如生活中在车站买票的时候有军人优先,这就是优先队列; 事件循环机制是一种环形队列;

#

树是由若干个有限节点组成的一个具有层次关系的集合。我们把它叫做“树”是因为它看起来像一棵倒挂的树。树是基本的几种数据结构之一。

树

以下基本概念不如看图来的简单明了,请优先看图,或在看基本概念的时候请结合上图(树)。

  • 主要基本概念

    • 每个元素称为结点(node)
    • 有一个特定的结点被称为根结点或树根(root)
    • 除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)
  • 其余基本概念

    • 单个结点是一棵树,树根就是该结点本身
    • 空集合也是树,称为空树。空树中没有结点
    • 一个结点含有的子树的个数称为该结点的
    • 度为0的结点称为叶结点或终端结点
    • 度不为0的结点称为非终端结点或分支结点
    • 若一个结点含有子结点,则这个结点称为其子结点的父结点
    • 一个结点含有的子树的根结点称为该结点的子结点
    • 具有相同父结点的结点互称为兄弟结点
    • 一棵树中,最大的结点的度称为树的度
    • 从根开始定义起,根为第1层,根的子结点为第2层,也叫深1深2
    • 树的高度或深度说的就是树中结点的最大层次
    • 从根到该结点所经分支上的所有结点称为该节点的祖先
  • 树的数学基础是:

    • 图论
  • 树的特点

    • 每个结点有零个或多个子结点;
    • 没有父结点的结点称为根结点;
    • 每一个非根结点有且只有一个父结点;
    • 除了根结点外,每个子结点可以分为多个不相交的子树;
    • 一棵树中每两个点之间都有且只有一条路径
    • 一颗有N个点的树有N-1条边

试一试

分辨下图哪一个是树:

分辨哪一个是树

# 树的遍历

按照某种规则,不重复地访问某种树的所有节点。

  • 先序遍历(深度优先) 先序遍历

  • 中序遍历(深度优先) 中序遍历

  • 后序遍历(深度优先) 后序遍历

  • 层序遍历(广度优先) 层序遍历

# 树的衍生

  • 无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树
  • 有序树:树中任意节点的子结点之间有顺序关系
  • 二叉树:每个节点最多含有两个子树的树称为二叉树
  • 完全二叉树:除了最后一层,其它各层节点数都达到最大
  • 满二叉树:每一层上的结点数都是最大结点数
  • 霍夫曼树:带权路径最短的二叉树,也叫最优二叉树

具体的可以移步Wiki或者百度百科 (^-^)

#

由顶点的集合(不能是空集)和边的集合组成的结构,表现的是多对多的关系

图

  • 数学基础是:图论
  • 几个基本概念:
    • 顶点
    • 有向图与无向图

# 前端中的数据结构应用

  • 1.了解常识级别的数据结构与算法
  • 2.传统前端的核心是DOM
  • 3.编写自己的前端控件
  • 4.前端游戏
  • 5.图像处理
  • ...

# 结语

到这里大家应该对于基本的数据结构有了一定的了解,算法的世界中,了解数据结构有助于我们更好的、更快的处理数据。

计算机世界的知识很多都是从现实世界中学习过来的。多了解我们的生活,也就是在了解计算机世界。

# 致谢

感谢大家阅读我的文章,如果对我感兴趣可以点击页面右上角,帮我点个star。

作者:前端小然子

链接: https://xiaoranzife.com/guide/arithmetic/0.structure.html

来源:前端小然子的博客

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上次更新: 2019-11-11 1:41:29 ├F10: PM┤