数据结构的基本概念
基础概念
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
:@(高兴) 简单来说 数据 是 所有信息的总称 ,而 数据元素 、 数据项 和 数据对象 则是对 数据 进行 组织和分类 的 不同层次的概念 。
从微观到宏观的角度来看:
数据元素 是 最小单位
数据项 是 数据元素的组合
数据对象 是 数据项的集合
而这一切都构成了广义上的数据。下面的是单个的字段解释。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
数据(Data)
数据是指所有可以被收集、存储、处理和传播的信息的集合。它可以是数字、文字、图像、声音等任何形式的信息。数据是信息的基础,未经加工的数据本身并不携带意义。
数据元素(Data Element)
数据元素是数据的基本单位,它是数据集中最小的、不可再分的数据单元。例如,在一个学生信息表中,“姓名”、“年龄”、“性别”等都是数据元素。
数据项(Data Item)
数据项有时也称为字段或属性,它是一个或一组值,通常用来描述某个实体的一个特定方面。数据项可以由一个或多个数据元素组成。例如,在记录一个学生的成绩时,“数学成绩”就是一个数据项,它可能包含具体的分数值。
数据对象(Data Object)
数据对象是一组相关的数据元素的集合,这些数据元素共同描述了一个实体的状态。数据对象可以看作是现实世界中某个具体事物的抽象表示。例如,一个学生的全部信息(包括姓名、年龄、性别、成绩等)可以被看作是一个数据对象。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
:@(高兴) 好,在上面的四个概念的内容后,下面将引入数据结构这个概念,简单来讲数据结构就是多个数据对象之间存在的关系的集合,是计算机中组织、管理和存储数据的方式,以便高效地访问和修改。
多个数据对象之间,如A、B、C、D 可以用不同的结构进行表示,具体选择哪种结构取决于应用场景和需求。下面的是单个的字段解释。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
数据结构(Data Structure)
一种数据组织、管理和存储的格式。它是相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术相关。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
在数据结构中分逻辑结构和存储结构
逻辑结构中分为以下四种结构:集合结构、线性结构、树结构、图结构/网状结构
这里通过数据元素之间的关系进行区分类型
集合结构:一个或多个数据元素是否属于某个集合,只有属于或不属于的关系。
线性结构:一个数据元素和一个数据元素存在一对一的关联关系。更准确的表达数据元素之间存在一对一的前驱和后继关系,即每个元素(除第一个和最后一个外)都有一个唯一的前驱和一个唯一的后继。
树结构:一个数据元素和多个数据元素存在一对多的关联关系。
图结构/网状结构:多个数据元素和数据元素之间存在多对多的关联关系。
此外在此基础上这四个结构还分为线性结构和非线性结构
线性 | 非线性 |
---|---|
线性结构 | 集合结构、树结构、图结构/网状结构 |
和它的名字一样除了线性结构其他都是非线性 ::(狂汗)
在这四个结构基础上可以分为这几类
线性结构
线性结构只有线性表一个分支,在线性表下分为三类:一般线性、特殊线性和线性表的推广
一般线性
一般线性表是最基础的线性结构,其中每个元素(除了第一个和最后一个)都有唯一的一个直接前驱和一个直接后继。线性表中的元素可以是任意类型的,如整数、字符等。常见的操作包括插入、删除、查找等。
特殊线性
特殊线性通常是指在线性表基础上添加了某些特定条件或限制的一类线性结构。例如:
栈(Stack):一种只能在一端进行插入或删除的线性表,遵循后进先出(LIFO)的原则。
队列(Queue):一种只能在表的一端进行插入而在另一端进行删除的线性表,遵循先进先出(FIFO)的原则。
循环队列:通过首尾相接形成环状结构的队列,用于解决传统队列空间利用率不高的问题。
双端队列(Deque):允许两端进行插入和删除操作的队列。
线性表的推广
线性表的推广是指对传统线性表概念的扩展,以适应更复杂的数据组织需求。这类结构可能不再严格保持一对一的关系,但在某种程度上仍然保留了线性表的基本特性。例如:
多重链表:每个节点可以有多个链接指向其他节点,这些链接可能指向同一层的不同节点或者不同层的节点,适用于表示多维数组或树形结构的一部分。
双向链表:每个节点不仅包含指向下一个节点的指针,还包含指向前一个节点的指针,使得遍历方向更加灵活。
跳表(Skip List):一种可以在平均O(log n)时间内完成插入、删除和查找操作的数据结构,通过增加额外的层次来加速搜索过程。
非线性结构
在非线性下分为了三个分支:树结构、图结构、集合
树结构
树是一种非线性的数据结构,由一组节点组成,这些节点通过边连接起来,形成一个层次结构。树具有以下特点:
根节点:树中唯一的没有前驱的节点。
叶子节点:没有后继的节点。
子树:除了根节点外,任何一个节点及其所有后代构成的树。
路径:从一个节点到另一个节点的序列。
深度:从根节点到某个节点的最长路径上的边数。
高度:树中最长路径上的节点数。
可以分为树和二叉树,两者最大的区别在于二叉树是一种特殊的树结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点,但是树每个节点可以有任意数量的子节点。
图结构
图结构是一种更通用的非线性数据结构,它由一组节点(顶点)和连接这些节点的边组成。图结构可以分为:
无向图:边没有方向,即两个节点之间的边是双向的。
有向图:边有方向,即从一个节点到另一个节点的边是单向的。
在此基础上还可以对边加上权重,来表示距离、成本等参数。
集合
集合是一种抽象的数据类型,用于存储不重复的元素。集合的特点包括
无序性:集合中的元素没有固定的顺序。
唯一性:集合中的元素不能重复。
动态性:集合可以动态地添加和删除元素。
存储结构
数据的逻辑结构在计算机中的存储方式,它是实现数据结构的基础,直接影响着数据的访问和修改效率。根据不同的应用场景和需求,存储结构可以分为以下两种主要类型
顺序存储结构
顺序存储结构是最直观的存储方式之一,它通过将数据元素存储在连续的内存空间中来实现。
优点:支持随机访问,即可以通过数组下标直接访问任一元素,访问速度极快;存储密度大,因为每个元素占用的内存空间都是有效的。
缺点:插入和删除操作效率较低,因为这两个操作通常需要移动大量元素以保持数组的连续性;此外,顺序存储结构的大小在创建时需要预先确定,不便于动态调整。
链式存储结构
链式存储结构通过指针将数据元素链接起来,每个元素(节点)不仅包含数据信息,还包含指向下一个元素的指针。
优点:插入和删除操作效率高,因为这些操作只需要更改指针,而不需要移动元素;支持动态增长,可以根据需要随时添加或删除节点。
缺点:不支持随机访问,必须从头节点开始逐个访问节点;存储密度较小,因为每个节点都需要额外的空间来存储指针。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}