🌈个人主页:聆风吟
🔥系列专栏:数据结构、算法模板、汇编语言
🔖少年有梦不应止于心动,更要付诸行动。
文章目录
- 📋前言
- [一. 数组结构起源](#一. 数组结构起源)
- [二. 基本概念和术语](#二. 基本概念和术语)
-
- [2.1 数据](#2.1 数据)
- [2.2 数据元素](#2.2 数据元素)
- [2.3 数据项](#2.3 数据项)
- [2.4 数据对象](#2.4 数据对象)
- [2.5 数据结构](#2.5 数据结构)
- [三. 逻辑结构和物理结构](#三. 逻辑结构和物理结构)
-
- [3.1 逻辑结构](#3.1 逻辑结构)
- [3.2 物理结构](#3.2 物理结构)
- [四. 数据类型](#四. 数据类型)
-
- [4.1 数据类型的定义](#4.1 数据类型的定义)
- [4.2 抽象数据类型](#4.2 抽象数据类型)
- 📝全文总结
📋前言
💬 文章主要介绍:本系列主要对数据结构的进行由浅入深的讲解,希望对你今后的学习有一定的帮助。如果有发现错误的地方还请在评论区告知,非常感谢!
📚 系列专栏:本期文章收录在《图解数据结构》,大家有兴趣可以浏览和关注,后面将会有更多精彩内容!
🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝
一. 数组结构起源
摘录:
早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。可现实中,我们更多的不是解决数值计算的问题,而是需要一些更科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好地处理问题。所以:
数据结构是一门研究非数值计算的程序设计问题的操作对象,以及他们之间的关系和操作等相关问题。
1968年,美国的高德纳(Donald E. Knuth)教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统地阐述了数据的逻辑结构和存储结构及其操作,开创了数据结构的课程体系。同年,"数据结构" 作为一门独立的课程,在计算机科学的学位课程中开始出现。也就是说,那之后计算机相关专业的学生开始接受"数据结构"的"折磨"------其实应该是享受才对。
之后,20世纪70年代初,出现了大型程序,软件也开始相对独立,结构程序设计成为程序设计方法学的主要内容,人们越来越重视"数据结构",认为 程序设计的实质是对确定的问题选择一种好的结构,加上设计一种好的算法 。可见,数据结构在程序设计当中占据了重要的地位。
二. 基本概念和术语
2.1 数据
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别的,并输入给计算机处理的符号集合。 数据不仅仅包括整形、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。
2.2 数据元素
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。 比如在人类中,人是数据元素;在禽兽类中,牛、马、鸡等动物都是禽兽类的数据元素。
2.3 数据项
数据项:一个数据元素可以由若干数据项组成。数据项是数据不可分割的最小元素。 比如人这样一个数据元素,可以有眼睛、耳朵、鼻子、嘴巴、手、脚这些数据项,也可以有名字、年龄、性别、家庭地址、联系电话、邮政编码、等数据项,具体有哪些数据项有你来决定。
2.4 数据对象
数据对象:是性质相同的数据元素的集合,是数据的子集 。其中,性质相同是指数据元素具有相同的数量和类型的数据项。
2.5 数据结构
以上是关于数据的定义。结构的定义是:不同数据数据元素之间不是相互独立的,而是存在特定关系,我们称这些关系为结构。介绍了数据和结构的定义,那数据结构的定义呢?
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合
三. 逻辑结构和物理结构
按照视点的不同,我们把数据结构分为逻辑结构和物理结构。
3.1 逻辑结构
逻辑结构:是指数据对象中数据元素的之间的相互关系。逻辑结构分为一下四种:
-
集合结构
集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有其他关系 。如下图所示:
-
线性结构
线性结构:线性结构中的数据元素之间是一对一的关系 。如下图所示:
-
树形结构
树形结构:树形结构中的数据元素存在一种一对多的层次关系 。如下图所示:
-
图形结构
图形结构:图形的数据元素是多对多的关系 。如下图所示:
注意事项: 用示意图表示数据的逻辑时,需要注意一下两点:
- 将每一个数据元组看作一个结点,用圆圈表示;
- 元素之间的逻辑关系用结点之间的连线表示,如果这个关系是有方向的,那么用带箭头的连线表示。
3.2 物理结构
物理结构(在很多书中也称存储结构):是指数据的逻辑结构在计算机中的存储形式。数据元素的存储结构形式有两种:顺序存储和链式存储。
-
顺序存储结构
顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的 。如下图所示:
-
链式存储结构
链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的 。因为数据元素的存储关系并不能直接反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样通过地址就可以找到相数据元素的位置。如下图所示:
四. 数据类型
数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
4.1 数据类型的定义
数据类型是按照值的不同进行划分的。在高级语言中,每个变量、常量和表达式都有各自的取值范围。类型就是用来说明变量或表达式的取值范围和所能进行的操作。在c语言中,按照值的不同,数据可以分为两类:
- 原子类型
原子类型是不可以在分解的基本类型,包括整型、实型、字符型等。 - 结构类型
结构类型是由若干个类型组合而成,是可以再分解的。例如,整型数组是由若干整型数据组合而成。
4.2 抽象数据类型
抽象数据类型(Abstract Data Type,ADT)是指一个数学模型及定义在该模型上的一组操作。抽象类型的定义取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。
实际上,抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性 。抽象数据类型把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来。
抽象数据类型的标准格式:
cpp
ADT 抽象数据类型名
Data
数据元素之间的逻辑关系的定义
Operation
操作 1
初始条件
操作结果描述
操作 2
......
操作 n
......
endADT
📝全文总结
本文主要讲解了数据结构的起源、基本概念、数据结构的分类等相关基础知识,意在让大家对数据结构有个初步了解,为后面的学习打下基础。
今天的干货分享到这里就结束啦!如果觉得文章还可以的话,希望能给个三连支持一下,聆风吟的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的最大动力!