首页 理论教育链式存储结构:计算机导论精要

链式存储结构:计算机导论精要

【摘要】:在8.1节已讨论过链式存储结构下图书信息表的存储方法,图8-2给出了链式存储结构下图书信息表的存储关系示意,图8-2给出了链式存储结构下某次计算机运行时的内存存储图。图8-6 线性表的链式存储结构示意图高级语言要实现链式存储结构需要具有指针功能和内存空间的动态申请功能。链式存储结构的最大优点是内存资源的使用合理,除附加的指针内存空间外,不会出现太大的内存空间资源浪费,最大缺点是操作的实现方法相对复杂。

链式存储结构就是每当需要新的内存单元时就向系统申请,每次申请的内存空间中除了包括要存储的数据元素的内存空间外,还包括存放下一个数据元素的内存单元地址(称为指针)的内存空间,每次申请的内存空间称为一个结点,所有结点依靠指针链接起来。

在8.1节已讨论过链式存储结构下图书信息表的存储方法,图8-2(a)给出了链式存储结构下图书信息表的存储关系示意,图8-2(b)给出了链式存储结构下某次计算机运行时的内存存储图。

对于一个线性表,假设我们用a0,a1,a2,a3,⋯,an-1来抽象的表示线性表中要存储的n个数据元素,用箭头抽象的表示指针指示的下一个结点的内存单元地址,则链接存储结构下线性表的存储结构示意图如图8-6所示。

图8-6 线性表的链式存储结构示意图

高级语言要实现链式存储结构需要具有指针功能和内存空间的动态申请功能。所谓指针,就是内存单元的地址。对于两个整数类型变量x和y,假设变量x中有数值5,则把变量x赋给变量y就是把变量x中保存的数值5赋给变量y,赋值操作后,变量y中也将保存着数值5。其操作示意图如图8-7(a)所示。

系统在定义一个变量时,同时记录了系统为该变量分配的内存单元地址。假设系统为变量x分配的内存单元地址为1000,变量z为指针类型变量。所谓指针类型的变量,就是该变量用来存储一个内存单元地址。那么,把变量x的地址赋给指针z就是把变量x的地址1000赋给指针z,指针赋值操作后指针z中将保存着数值1000(变量x在内存中的地址)。其操作示意图如图8-7(b)所示。

图8-7 变量赋值和指针赋值比较(www.chuimin.cn)

(a)变量赋值;(b)指针赋值

用户程序向系统申请内存单元空间有两种方法:一种是静态的方法,即在程序编译时系统就根据用户程序中定义的变量和数组,为用户程序分配相应大小的内存单元空间。另一种是动态的方法,即在程序运行时,每当需要新的内存单元空间时,用户程序才向系统申请。

静态方法申请的内存空间是一次性申请的,所以内存单元的地址是连续的,如一个一维数组的内存单元地址就是连续的,系统可以通过用户定义数组时给出的数据类型,计算出任意一个数组元素在内存中的地址。动态方法申请内存空间的时间是随机的,每次只申请本次需要的内存单元空间。由于动态方法不是一次性申请的,所以内存单元的地址是不连续的。因此,要保持数据元素之间的逻辑关系,就需要一个指针把这些数据元素链接起来。

大部分高级语言都支持内存空间的动态申请。例如,C语言、C++语言、PASCAL语言等都支持内存空间的动态申请。

链式存储结构的最大优点是内存资源的使用合理,除附加的指针内存空间外,不会出现太大的内存空间资源浪费,最大缺点是操作的实现方法相对复杂。