ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1 - 数据结构

2022-06-17 22:36:38  阅读:94  来源: 互联网

标签:队列 链表 数组 数据结构 数据 节点


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

原文链接

我的博客

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

什么是数据结构

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

数据结构与数据类型

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

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

数据结构分类

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

  • 线性数据结构:

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

    • 静态数据结构

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

    • 动态数据结构

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

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

数组

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

数组特性:

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

数组应用:

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

现实生活中的数据应用:

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

链表

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

链表的类型:

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

链表特性:

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

链表应用:

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

现实生活中的应用:

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

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

栈特性:

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

栈应用:

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

现实生活中的应用:

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

队列

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

队列特性:

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

队列应用:

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

现实生活中的应用:

  • 排队买票

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

树特性:

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

树应用:

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

现实生活中的应用:

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

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

图特性:

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

图应用:

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

现实生活中的应用:

  • 谷歌地图中城市坐落为顶点,城市间的路作为边
  • 社交网络中,每一个在网络上的人是一个顶点,所有的好友关系作为边

标签:队列,链表,数组,数据结构,数据,节点
来源: https://www.cnblogs.com/arvin-blog/p/16387181.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有