链表(Link List)

我们把这些利用结构指针连接起来的结构变量称为链表(Link List),每一个结构变量
(相当于链条中的每个环节)称为链表的结点(Node)。如右上图9.5.4 所示。
和数组一样,链表也可以用来存储一系列的数据,它也是电脑中存储数据的最基本的结
构之一。然而,我们已经拥有了数组,也了解了数组的动态分配(堆内存),我们为什么还
需要链表呢?
相信很多人都玩过即时战略游戏(RTS),比如时下流行的魔兽争霸、曾红极一时的红
色警戒。可是大家有没有考虑过,每个战斗单位都有它们各自的属性,电脑又是如何为我们
造出来的部队分配内存的呢?
显然,部队的数量在程序执行之前是未知的。如果用数组来存储这些数据,那么就会造
成游戏前期浪费内存(没有那么多的部队),游戏后期存储空间不够(战斗单位数大大增加)
的情况。
那么使用数组的动态分配行不行呢?还是不行。因为部队的数量在程序执行的时候仍然
是未知的。甚至连玩家自己也不知道要造多少战斗单位,只是根据战斗的实际情况来发展自
己的势力。所以,这时候最合理的内存分配方式就是每造一个战斗单位分配一个内存空间。
然而,新问题又出现了:建造各单位的时间一般不可能是完全连续的,根据不同时刻程
序运行的实际情况,每个单位分配到的内存空间也不是连续的了。空间不连续就意味着没有
了方便的数组下标。我们就很难把这些零零散散的内存空间集中起来管理。
链表的出现改变了这个情况。它可以在程序运行时根据实际需要一个个分配堆内存空
间,并且用它的指针可以把一系列的空间串联起来,就像一条链子一样。这样一来,我们就
能够利用指针对整个链表进行管理了。



posted on 2010-04-12 18:28  王六石  阅读(639)  评论(0编辑  收藏  举报

导航