首先附上一张数据库概览图:有了它,数据库尽收眼底:
这张图是把数据结构从两个方向进行了介绍:逻辑结构,物理结构。
对照上图,那么刚才我说一堆“初印象”更是凌乱了,它把逻辑和存储(物理)结构杂糅了。
一般我们常见的是逻辑结构的一些名词:集合,数组,队列,栈,树,等等。
那我们就从逻辑结构开始说起。
一、逻辑结构
1、集合
集合没有逻辑结构,就是一堆数据组合在一起,没有任何顺序,基本所有的数据的组合,我们都可以称之为集合,集合是最普遍的一种数据结构。
2、线性结构(线性表)
A、概念
误解:线性结构是我这次学习数据结构最大的收获了。以前以为“线性结构”就是一种物理存储形式,数组,队列,栈这些东西都是按照“线”式进行存储,更具体就是,把它们当成是“顺序存储结构”。学到现在终于发现“线性结构”是逻辑分类而并非“物理存储”而得名。
现在的理解:之所以说是“线性”结构是因为,线性表中的数据是按照一定的逻辑进行串联起来,形成一个整体,有第一个数据,就可以顺着“线”找到第二个数据,而且中间没有分支。不知道我这样的理解是否可以。just think so。这样的话,顾名思义,非线性结构就不难理解了。这些概念人们在规定同时都是相对应出现的,不会凭空造出一个不相干的概念。
B、分类
一维数组(线性结构么有分支,所有这里只有可能是一维,而非多维), 队列,栈。这些概念这里就不做相信阐述,我们早就接触了。
需要强调有两点:
读取规则:队列:先进先出; 栈:先进后出。
队列有两种形式:简单队列,循环队列
如图:
3、非线性结构
非线性结构是对应线性结构出现的,包含的结构有:树,图,多维数组。这些结构不像“线式”串联起来,而且有分支结构。结构不统一。
常见的树包含:一般树,二叉树。图有无向图,有向图。这些都是根据具体的特殊结构而进行的归类定义。
二、物理结构
1、顺序存储结构
2、链式存储结构
一般顺序存储总是和链式存储结构结合起来将才更好理解。
看图:
顺序表元素的内存是挨着的,物理存储,逻辑存储都是连续的;
链表的相邻元素存储是离散存储,即物理存储结构上是离散的,逻辑结构,即展现给外部的是连续的。
链表是一种特殊的结构:链表元素有两部分组成:数据域,指针域。这样的组成结构决定了链表有多种形式:单链表,循环链表,双链表。
下图中:依次是:单链表,循环链表,双链表。
有两个指针域的为双链表,分别指向前一个,后一个元素,是两个方向的链表,灵活。但开支大。
单链表与循环链表的区别:如果链表中的最后一个元素的指针域不为“null”则为循环链表。单链表为“null”。
3、索引存储结构
索引存储结构是采用附加的索引表的方式来存储节点信息。索引表由若干索引项组成。索引存储结构中索引项的一般形式为:(关键字、地址)。其中,关键字是能够唯一标识一个节点的数据项。
索引存储结构还可以细分为两类:
稠密索引(DenseIndex):这种方式中每个节点在索引表中都有一个索引项。其中,索引项的地址指示节点所在的存储位置;
稀疏索引(SpareIndex):这种方式中一组节点在索引表中对应一个索引项。其中,索引项的地址指示一组节点的起始存储位置。
4、散列存储结构
散列存储结构是根据节点的关键字直接计算出该节点的存储地址的一种存储方式。散列只是通过记录的关键码定位该记录,么有完整的表达记录之间的逻辑关系,所以,散列主要是面向查找的存储结构,典型代表的体现是:哈希表。