1 - 数据结构

数据结构: 类型、分类与应用

原文链接

我的博客

数据结构是计算机在内存种用于组织数据的集成块。它在高效地组织、处理、访问、存储数据时十分重要。但这不是数据结构的全部。不同类型的数据结构具有它们自己的特点、特性、应用、优点与缺点。因此,如何基于自己的任务选择最优的数据结构,这个数据结构意味着什么,有哪些数据结构,这些数据结构能用来做什么,了解上面的几个问题是十分重要的。

什么是数据结构

一个数据结构是用来存储、组织数据的存储结构。它是计算机组织数据的一种方式,以保证计算机能够高效访问、更新数据。如果数据需要进行处理、更新、存储,那么它就不再仅限于访问、更新数据这样的组织形式了。有几类基础的先进的数据结构类型,可以用到几乎所有的程序或软件系统中。

数据结构与数据类型

我们已经知道数据结构的一些信息了,有时候我们会对数据结构与编程语言中的数据类型产生混淆,这里我们给到这两类内容的区别:

数据类型 数据结构
指派给变量的类型 不同数据的集合
具有值,信息密度低 单个对象具有多种类型的数据,信息密度高
不具有时间复杂度 时间复杂度扮演着重要的角色
intfloatdouble 栈、队列、树

数据结构分类

在我们日常生活中就具有很多的数据结构的使用案例。且为了解决不同的数学、逻辑问题,使用了不同的数据类型。通过使用合理的数据结构,我们可以短时间组织、处理大量的数据,下面,让我们看一下我们日常使用的数据结构类型吧。

  • 线性数据结构:

    数据以顺序或线性形式组织,每一个元素连接到它的前一个与后一个毗邻元素,比如数组、栈、队列、链表等。

    • 静态数据结构

      静态数据结构具有固定的内存大小,易于访问,比如数组

    • 动态数据结构

      动态数据结构的内存大小是不固定的,大小可以在运行时按需分配,比如队列、栈等

  • 非线性数据结构:
    数据结构不以顺序或线性形式组织,在非线性数据结构中,我们不能够靠单个路径编历所有元素,比如树、图

数组

数组是线性数据结构,它具有连续的内存空间。用来将相同数据类型的数据存储到一起。它允许以较短的时间内处理大量数据。数组中的第一个元素的索引为 0,对数据具有不同的操作,比如,查找、排序、插入、编历、反转、删除等。

数组特性:

  • 数组是一类基于索引的数据结构,使用索引可以快速定位到数组中的参数
  • 如果用户想要存储大量相同类型的数据,那么数组是一个不错的方式
  • 数组支持二维数组
  • 数组可以用来实现栈、队列、堆、散列表等
  • 查找过程实现十分简单

数组应用:

  • 解决矩阵问题
  • 数据库记录
  • 实现排序算法
  • 用来实现其他数据结构,如栈、队列、堆、散列表等
  • 用作 CPU 调度
  • 计算机中查表
  • 用在语言处理中

现实生活中的数据应用:

  • 存储数值计算数据
  • 用作图像处理
  • 用作记录管理
  • 书页是现实生活中的数组

链表

链表是线性数据结构,链表数据不存储在连续的存储空间中,在链表中的元数通过指针连接到一起。

链表的类型:

  • 单向链表
  • 双向链表
  • 循环链表
  • 双向循环链表

链表特性:

  • 链表使用额外的空间存储链信息
  • 初始化链表时,无需知道全局需要的链空间大小
  • 链表可以用来实现栈、队列、图等
  • 链表的第一个节点称为头节点
  • 尾节点通常指向 NULL
  • 链表可以轻松实现插入与删除
  • 每一个节点包含指针指向下一个节点
  • 链表可以收缩或扩张

链表应用:

  • 可用于实现栈、队列、图等
  • 可以用作长整型数值计算
  • 可以用于表示稀疏矩阵
  • 连接文件分配
  • 帮助内存管理
  • 通过存储常量到节点,实现多项式操作

现实生活中的应用:

  • 用作轮询调度算法
  • 用作照片浏览器,可以使用上一个、下一个来对照片进行切换
  • 在音乐播放器中,歌曲链接着上一首歌与下一首歌

栈式一个线性数据结构,遵循后进先出规则。

栈特性:

  • 在很多算法中用到,比如汉诺塔、树编历、递归等
  • 栈可以使用数组或链表实现
  • 遵循后进先出
  • 插入与删除只能在栈顶进行

栈应用:

  • 用于算术表达式中
  • 用于递归
  • 用于括号检查
  • 反转字符串
  • 用于内存管理
  • 处理函数调用

现实生活中的应用:

  • 浏览器使用栈数据结构来保持对前一个浏览站点的记录
  • 电话记录使用栈结构

队列

队列是一个线性数据结构,遵循先进先出规则。

队列特性:

  • 先进先出
  • 对里是相似数据类型的顺序列表

队列应用:

  • 处理网站流量
  • 持有媒体播放器的播放列表
  • 队列用在操作系统或中断处理中
  • 它帮助管理共享资源,比如打印机、CPU 任务调度等
  • 同步数据传输,比如管道、文件 IO,套接字等

现实生活中的应用:

  • 排队买票

树是非线性数据结构,树中的数据像树一样组织。在树种,最高的节点称为根节点,每一个节点包含一些数据,这个数据可以是任何类型。它包含中心节点,结构节点,子节点,节点之间通过边连接。不同的树数据结构允许快速简便的访问数据。树具有不同的术语比如,节点、根节点、边、树高度、树的层级等。

树特性:

  • 树是一类递归数据类型
  • 树的高度可由根节点到叶子节点的最长路径确定
  • 节点具有深度,根节点深度为 0

树应用:

  • 堆是一个使用数组实现的树结构,并以此来实现优先队列
  • B-TreeB+Tree 在数据库中实现索引
  • 语法树帮助编译器设计中,帮助进行扫描、戒心生成代码
  • K-D Tree 空间分隔树,在 K 维空间中组织点
  • 生成树在计算机网络的路由器中使用

现实生活中的应用:

  • 游戏开发
  • 决策树是高效的机器学习工具,通常用在决策分析
  • 树帮助实现流程图
  • 域名服务器使用树数据结构
  • 社交网络中最常使用树结构

图是非线性数据结构,由顶点与边构成。一个图由有限的顶点与有限的边组成。图用来解决最具有挑战性与罪复杂的编程问题。图具有不同的术语,路径、度、毗邻顶点等。

图特性:

  • 一个顶点的偏心率为距所有顶点的最远点
  • 具有最小偏心率的顶点视为图的中心点
  • 所有顶点的偏心率最小值是图的半径

图应用:

  • 用于表示计算流
  • 用作建模图
  • 操作系统使用资源分配图
  • 在万维网中,网页呈现节点

现实生活中的应用:

  • 谷歌地图中城市坐落为顶点,城市间的路作为边
  • 社交网络中,每一个在网络上的人是一个顶点,所有的好友关系作为边
posted @ 2022-06-17 22:16  ArvinDu  阅读(114)  评论(0编辑  收藏  举报