1.5 数据结构基础(一)
1.5.1 逻辑结构:线性表、树和图
线性结构中的数据有前驱-后继关系;树中的数据有父子关系和由此产生的层次关
系;图中的任何两个元素都可以有关系,它在三者中是最广泛的。
1.5.2 逻辑结构的物理实现
最简单的逻辑结构是线性结构,它有两种物理结构:数组和链表,前者是连续
的,后者是不连续的。前者通过绝对位置定位,地址是下标的函数;后者通过相对位
置定位,地址依赖于其他元素。
数组(array) 数组采取绝对定位,所有元素的物理位置是连续的。
链表(linked list) 链表采用相对定位,每个元素保存下一个元素的位置。
二叉树可以用链式存储。
二叉树也可以用数组存储,从根开始,每层自左向右编号为1,2,3⋯,如图1.9。
除了结点1外,每个结点i的父亲是i/2,左儿子是2i,右儿子是2i+1。同样是以数组作为
物理结构,这里我们把它理解为了一棵二叉树。
图有两种常用的表示法:邻接矩阵(adjacency matrix) 和邻接表(adjacency list)
边比较少的图称为稀疏图,经常用邻接表表示;因为空间占用小而且很多算法的
时间效率也较高,而稠密图或者结点数较少的图经常用邻接矩阵表示,基于邻接矩阵
的算法常常简单、容易记忆,且对这类图特别有效。
1.5.3 外部特性和内部结构
不管是物理结构还是逻辑结构,数据结构的某些属性可以被外界所感知,而另外
一些属性却是不可见的。换句话说,数据结构包含外部特性和内部结构两个方面。外
部特性决定了它将如何被使用,而内部结构决定了它的原理和具体实现。