【数据结构与算法 - 数据结构基础】什么是数据结构?

文章目录

  • 【数据结构与算法 - 数据结构基础】什么是数据结构?
    • 1 数据结构包含的三个方面
      • 1.1 数据的逻辑结构
        • 1.1.1 线性结构
          • 数组【Array】
          • 链表【LinkedList】
          • 栈【Stack】
          • 队列【Queue】
        • 1.1.2 树结构【Tree】
        • 1.1.3 图结构【Graph】
          • 堆【Heap】
        • 1.1.4 散列表【Hash】
      • 1.2 数据的存储结构
        • 1.2.1 顺序存储【Sequential Storage】
        • 1.2.2 链式存储【Linked Storage】
        • 1.2.3 索引存储【Index Storage】
        • 1.2.4 哈希存储【Scatter Storage】
      • 1.3 数据操作
  • 数据,data:符号集合、处理对象
  • 结构:各个组成部分的搭配和排列
  • 数据元素:数据的基本单位,可由若干个数据项组成

→ 数据结构 data structure:数据的组织、管理和存储格式。

要与算法结合起来说的话,数据结构就是我们能够执行算法的“原材料”。数据结构 + 算法 = 程序设计。

通常情况下,更优的数据结构可以给程序带来更高的运行以及存储效率。

简单来说,数据结构的定义就是一种程序设计优化的方法论,它不仅讨论到存储的数据,同时也考虑到彼此之间的关系与运算,使之达到加快程序执行速度与减少内存占用空间等作用。

1 数据结构包含的三个方面

数据结构data structure)指数据元素之间存在的关系。

主要包含以下三个方面:

  • 数据的逻辑结构
  • 数据的存储结构
  • 数据操作

1.1 数据的逻辑结构

1.1.1 线性结构
数组【Array】

数组是一种典型的线性数据结构。它是存储在连续内存位置的相似类型数据项的集合。

数组是最简单的数据结构,它的每个数据元素都可以使用索引号随机访问。

链表【LinkedList】

链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。

Java 集合框架中的LinkList 类,底层的实现就是 链表。

栈【Stack】

栈是以数组或者链表为基础,封装出来的一种数据结构。

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。

队列【Queue】

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

1.1.2 树结构【Tree】

树,是一种一对多的数据结构,天生就非常适合用来检索。

它是由n(n≥0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

Java集合框架当中有一个TreeMap类,用于存储键和值的映射,不但查找很高效,还能保证键的有序排列。它的底层实现就是一种名为红黑树的特殊二叉树。

1.1.3 图结构【Graph】

图,是一类多对多的数据结构,非常适合用于表述众多对象之间的复杂关系。

堆【Heap】

堆是一种特别的完全二叉树。

其定义为:给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于(或大于等于)C的值。

堆最常见的作用是可以迅速找到一堆数当中的最大值或者最小值。

1.1.4 散列表【Hash】

散列表Hash table,也叫哈希表。

散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。【散列表是一种非线性的数据结构】

树是图的特例,树是连通的无回路的无向图;线性表是树的特例,线性表是单枝树。

1.2 数据的存储结构

1.2.1 顺序存储【Sequential Storage】

顺序存储是所有的结点元素存放在一块连续的存储区域中,用存储结点的物理位置来体现结点之间的逻辑关系的存储方法。

在高级语言中,一块连续的存储空间通常可用一个数组来表示。因此,顺序存储通常用一个数据元素类型的数组来存储。最经典的顺序存储结构是顺序表,将线性结构的元素按序存放在一个数组中 。

1.2.2 链式存储【Linked Storage】

链式存储结构,又叫链接存储结构。在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)

它不要求逻辑上相邻的元素在物理位置上也相邻.因此它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点。

1.2.3 索引存储【Index Storage】

索引存储,分别存放数据元素和元素间关系的存储方式。

所有的存储结点存放在一个区域。另设置一个索引区域存储结点之间的关系。

索引是为了加速检索而创建的一种存储结构。它是针对一个表而建立的,是由存放表的数据页面以外的索引页面组成的。

1.2.4 哈希存储【Scatter Storage】

哈希存储亦称“散列存储”,专用于集合结构的一种存储方式。

该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址

数据元素存放在一块连续的存储区域中。数据元素的存放位置是通过一个哈希函数计算而得的。哈希函数将数据元素作为自变量,计算得到的函数值是数据元素的存储地址。

【应用】用于支持集合结构的动态查找。

1.3 数据操作

【1】初始化。

【2】判断是否空(isEmpty)状态。

【3】存取,指获得(get)、设置(set)指定元素值。

【4】遍历(traverse),指按照某种次序访问一个数据结构中的所有元素,并且每个数据元素只被访问一次。线性次序遍历。

【5】统计数据元素个数。

【6】插入(insert)、删除(remove)指定元素。

【7】查找(search),指在数据结构中寻找满足给定条件的数据元素。

【8】比较相等(equals),指两个数据结构形态相同,其中各对应元素分别相等并且数据元素个数相等。

【9】复制数据结构(深拷贝)及其中所有元素。

【10】排序(sort),指对数据元素按照指定关键字值的大小递增(或递减)次序重新排列。

【数据结构与算法 - 数据结构基础】什么是数据结构?相关推荐

  1. 大话数据结构与算法:基础篇

    1.数据结构的重要性 数据结构是计算机软件相关专业的基础课程,几乎可以说,要想从事编程工作,无论是否是科班出身(比如我,标准的非科班人员,我是学医的,哈哈)都不可以绕过数据结构与算法这部分知识. 数据 ...

  2. 数据结构与算法之基础概述

    目录 数据结构和算法的重要性 数据结构概述 逻辑结构 存储结构 算法概述 如何理解"大O记法" 时间复杂度 空间复杂度 数据结构和算法的重要性 算法是程序的灵魂,优秀的程序可以在海 ...

  3. 获取用户列表为空_数据结构和算法(Golang实现)(15)常见数据结构-列表

    列表 一.列表 List 我们又经常听到 列表 List 数据结构,其实这只是更宏观的统称,表示存放数据的队列. 列表 List:存放数据,数据按顺序排列,可以依次入队和出队,有序号关系,可以取出某序 ...

  4. Python数据结构与算法(1.1)——数据结构与算法导论

    Python数据结构与算法(1.1)--数据结构与算法导论 0. 学习目标 1. 数据结构概述 1.1 什么是数据结构 1.2 逻辑结构和物理结构 1.3 抽象数据类型 1.4 数据结构学习的必要性 ...

  5. 数据结构与算法学习——基础知识(一)

    数据结构与算法 线性结构和非线性结构 基本概念 线性结构 非线性结构 稀疏数组 基本概念 稀疏数组的处理方法 举例说明 应用实例 代码实例 队列 基本介绍 示意图 数组模拟队列 思路分析 代码实现 数 ...

  6. 【数据结构与算法】第一篇:数据结构

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 STL库的介绍 容器(containers) 算法(algorith ...

  7. 【数据结构与算法】如何高效学习数据结构与算法

    前言 本文是个人基于覃超老师的<算法训练营>的学习笔记,此笔记的内容都是学习后的个人记录.个人总结.理解和思想.仅供参考学习. 很多同学在大学的时候会觉得数据结构与算法很枯燥,很多小伙伴都 ...

  8. 数据结构与算法(Java版) | 数据结构与算法的重要性

    通过前几讲我给大家介绍的几个经典的算法面试题,相信大家现在应该对数据结构与算法有了一个很浓烈的学习兴趣,嘻嘻

  9. 【数据结构与算法】基础数据结构与算法大全

    一.用过的编程语言 Java Python JavaScript 二.数据结构的知识梳理 数据结构入门基础梳理 数据结构一些基本常识的笔记 算法复杂度的几点笔记 对顺序表动态分配方式的思考 循环队列的 ...

  10. java 中的数据元素的定义_Java数据结构和算法的基础概念

    一.基本的概念 1.数据            是客观描述事物的符号,是计算机中操作的对象,是能被计算机识别.并输入给计算机处理的集合 2.数据元素        是组成数据的,有一定意义的基本单位. ...

最新文章

  1. MPB:生态环境中心张丽梅组-​植物微生物组DNA提取扩增及溯源分析(视频)
  2. Java判断一个数是否是回文数
  3. 人工智能TensorFlow工作笔记007---认识张量
  4. matlab虚拟现实之使用V-Realm Builder2建模
  5. Qt之QListView使用
  6. 制作的LINUX安装软件,竟然导致系统无法启动
  7. keyshot卡住了还能保存吗_Sketchup建模和渲染能取代3dsMax吗?
  8. dea分析的matlab实现,利用MATLAB进行DEA交叉评价分析
  9. 通过PyMuPDF编写增值税发票多PDF文件合并工具
  10. 使用MySQL存储过程给表批量造数据
  11. 仿9GAG制作过程(五)
  12. SQL对象名无效的解决
  13. qt中将按钮指向的鼠标变成手型
  14. Ubuntu 18.04 LTS上编译安装BCC
  15. 华为、苹果、高通,谁在领跑?全面解读清华AI芯片报告
  16. matlab三维曲线的绘制
  17. 设计分享|基于单片机的跑马灯
  18. SM2椭圆曲线公钥密码算法(Python实现)
  19. 杰理之芯片使用注意事项【篇】
  20. 喝酒摇骰子重启人生多款微信小程序源码分享

热门文章

  1. 迈向“超人认知”:脑机接口的未来
  2. Apache2.2.22 + PHP5.2.17 + MySQL5.5.22 快速搭建部署PHPWind开源论坛
  3. matlab 28m35,F28M35H52C1学习笔记3
  4. python中三引号是什么意思_python中三个单引号是什么意思
  5. 解决Expected all tensors to be on the same device, but found at least two devices, cuda:0
  6. python大赛对名_团队作业1——团队展示选题
  7. 华为设备配置SSH远程登录
  8. 盈一指风华,浅梦一程。生命的美丽
  9. 手机linux系统介绍,Ubuntu手机系统介绍及Ubuntu刷机教程分享
  10. 【English】主语从句的引导词是如何选择?