数据结构的分类:线性表、栈、队列、(字符)串、数组、广义表、树、二叉树、图
基本概念:
数据:数据(date)是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑中用到的字符串,多媒体程序处理的图形、图像、声音及动画等通过特殊编码定义后的数据。
数据元素:数据元素(date element)是数据的基本单位,是数据集合的个体,通常由若干个数据项组成,在计算机程序中通常作为一个整体来进行处理。
数据项:数据项(date item)具有原子性,是组成数据元素的、有独立含义的、不可分割的最小数据单位。
数据对象:数据对象(date object)是性质相同的数据元素的集合,是数据的子集。
数据结构:数据结构(date structure)是指相互之间存在一种或多种特定关系的数据元素的集合,是组织并存储数据以便能够有效使用的一种专门格式,它用来反映一个数据的内部构成,即一个数据有哪些成分数据构成,以什么方式构成,是什么和结构。
由于信息可以存在于逻辑思维领域,也可以存在于计算机世界,因此作为信息载体的数据同样存在于两个世界中。
表示一种数据元素及其相互关系的数据结构同样也有两种不同的表现形式:一种是数据结构的逻辑层面,即数据的逻辑结构;一种是存在于计算机世界的物理层面,即数据的存储结构。
数据结构 = 逻辑结构 + 存储结构
数据结构 = 逻辑结构 + 存储结构 + (在存储结构上的)运算 / 操作
数据结构的分类1:线性结构和非线性结构
线性结构:有且只有一个开始结点和一个终端结点,并且所有结点最多只有一个直接前驱和一个直接后继。
线性表就是一个典型的线性结构,它有四个基本特征:
1. 集合中必须存在唯一的一个“第一个元素”;
2. 集合中必须存在一个唯一的“最后的元素”;
3. 除最后元素外,其它数据元素均有唯一的“后继”;
4. 除第一元素之外,其它数据元素均有唯一的“前驱”。
即线性结构是 “一对一” 的关系
相对于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个直接后继。
常见的非线性结构:数(二叉树等)、图(网等)
数据结构的分类2:集合结构 线性结构 树状结构 网络结构
逻辑结构有四种类型:集合结构、线性结构、树状结构和网络结构。
表和树是最常用的两种高效数据结构,许多高效的算法能够用这两种数据结构来设计实现。
集合结构:就是数学中所学习的集合。
集合中的元素有三个特征:
1. 确定性:集合中的元素必须是确定的
2. 唯一性:集合中的元素互不相同
3. 无序性:集合中的元素没有先后之分
该结构的数据元素之间的关系是“属于同一个集合”,别无其它关系
因为集合中元素关系很弱,数据结构中不对该结构进行研究
线性结构:数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构
树状结构:除了一个数据元素以外每个数据元素有且仅有一个直接前驱元素,但是可以有多个直接后继元素,特点是数据元素之间是 一对多 的联系
网状结构:每个数据元素可以有多个直接前驱元素,也可以有多个直接后继元素,特点是数据元素之间是 多对多 的联系
数据的存储结构
数据的存储结构主要包括数据元素本身的存储以及数据元素之间关系表示,是数据的逻辑结构在计算机中的表示
常见的存储结构有顺序存储,链式存储,索引存储,以及散列存储
顺序存储结构:
把逻辑上相邻的节点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。由此得到的存储结构为顺序存储结构,通常顺序存储结构是借助于计算机程序设计语言(例如C/C++)的数组来描述的。
(数据元素的存储对应于一块连续的存储空间,数据元素之间的前驱和后继关系通过数据元素在存储器的相对位置来反映)
优点:节省存储空间,分配给数据的存储单元全用存放结点的数据,结点之间的逻辑关系没有占用额外的存储空间,采用这种方法时,可实现对节点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出结点的存储地址。
缺点:插入和删除操作需要移动元素,效率较低。
链式存储结构:
数据元素的存储对应的是不连续的存储空间,每个存储结点对应一个需要存储的数据元素,每个结点是由数据域和指针域组成,元素之间的逻辑关系通过存储结点之间的链接关系反映出来。
特点:
1. 比顺序存储结构的存储密度小(每个结点都由数据域和指针域组成,所以相同空间内假设全存满的话顺序比链式存储更多);
2. 逻辑上相邻的结点物理上不必相邻;
3. 插入、删除灵活(不必移动结点,只需改变结点中的指针);
4. 查找结点时链式存储要比顺序存储慢。
索引存储结构:
除建立存储结点信息外,还建立附加的索引表来标识结点的地址。比如图书、字典的目录。
散列存储结构:
根据结点的关键字直接计算出该节点的存储地址,添加、查询速度快。