什么是数据结构?

图片来自度娘

目录

  • 什么是数据结构

  • 为什么学习数据结构

  • 如何学习数据结构

什么是数据结构?

一、数据结构定义

官方定义:数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构存储结构

数据结构: 数据结构就是相互之间存在一种或多种特定关系的数据元素集合。

如果你对官方定义比较懵懂,请看完 基本概念和术语 再回来

二、 基本概念和术语

1. 数据:

  • 数据指的是能输入到计算机中,并能被计算机程序处理的对象。
  • 对于数值类型(整型、实型等),可以进行数值计算;
    对于字符数据类型(声音、图像、视频等可通过编码转化为字符数据),可以进行非数值处理。

2. 数据对象:

  • 数据对象指性质相同的数据元素的集合,是数据的子集;

3. 数据元素:

  • 数据元素指组成数据的、有意义的基本单位,也被称为记录。

4. 数据项:

  • 数据项是有独立含义的、不可分割的最小单位。一个数据元素可以由若干数据项组成。

举个栗子:

假设有两张表人员表课程表如下:

人员表

课程表

这两张表就是数据,可以输入到计算机中,能够被计算机程序处理。
人员表与课程表分别都是一个数据对象
每张表中的每一行就是数据元素
而姓名、性别、身高、籍贯、时间、课程这些就是数据项

三、逻辑结构和物理结构

1. 逻辑结构:是指数据对象中数据元素之间的相互关系

逻辑结构

  • 集合结构:数据元素之间没有任何关系。


    集合结构示意图
  • 线性结构:数据元素之间定义了线性关系。1对1。


    线性结构示意图
  • 树形结构:数据元素之间定义了层次关系。1对多。


    树形结构示意图
  • 图形结构:数据元素之间定义了网状关系。多对多。


    图形结构示意图

2. 物理结构:是指数据的逻辑结构在计算机中的存储形式

物理结构

  • 顺序存储:数据元素顺序存放,每个存储结点只含一个元素。存储位置反映数据元素间的逻辑关系。存储密度大。但有些操作(如插入、删除)效率较差。

  • 链式存储:这种方式不要求存储空间连续,便于动态操作(如插入、删除等),但存储空间开销大(用于指针),另外不能折半查找等。

  • 索引存储:除数据元素存储在一组地址连续的内存空间外,还需建立一个索引表,索引表中索引指示存储结点的存储位置(下标)或存储区间端点(下标)。

  • 散列存储:通过散列函数和解决冲突的方法,将关键字散列在连续的有限的地址空间内,并将散列函数的值解释成关键字所在元素的存储地址。其特点是存取速度快,只能按关键字随机存取,不能顺序存取,也不能折半存取。

四、 常见的数据结构

常见的数据结构
  • 栈(Stack):栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。

  • 队列(Queue):队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。

  • 数组(Array):数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。

  • 链表(Linked List):链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。

  • 树(Tree):树是典型的非线性结构,它是包括,2 个结点的有穷集合 K。

  • 图(Graph):图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。

  • 堆(Heap):堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。

  • 散列表(Hash table):散列表源自于散列函数(Hash function),其思想是如果在结构中存在关键字和T相等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不用进行比较操作而直接取得所查记录。

为什么学习数据结构?

学习数据结构的重要性

  • 码农:数据结构又用不到 。程序员:数据结构很重要,无处不在。

  • 凭借一句话获得图灵奖的Pascal之父——“尼古拉斯.赵四” ,让他获得图灵奖的这句话就是他提出的著名公式:“算法+数据结构=程序”。

  • 最重要的就是工作上的需求,他可以让你升职加薪。

举个栗子:中国地大物博,有那么多省,每个省有那么多市,每个市有那么多区县,乡,镇,村,一个小地方,怎么才能知道它在哪,很明显,去看它在哪个区,哪个市,哪个省。

这就是树的作用,维护层级数据,提供更方便的访问,插入删除功能。

总之数据结构就是你编程路上的载具,区别于别人的就是你是骑自行车还是开跑车。

如何学习数据结构?

  • 你必须有一个长期学习下去的决心,而不是一段时间激情。

  • 通过现有的数据结构,模仿源码,手撸源码。

  • 多刷刷题
    LeetCode
    nowcoder

你可能感兴趣的:(什么是数据结构?)