![算法竞赛宝典(第三部):基础数据结构](https://wfqqreader-1252317822.image.myqcloud.com/cover/631/27110631/b_27110631.jpg)
上QQ阅读APP看书,第一时间看更新
第一章 链表
何谓链表
我们知道,一般用数组存放一组数据时,必须事先定义固定的长度(即元素个数)。这在某些问题的解决中,并不是特别的适用。例如,记录不同班级的学生数据时,由于各班人数不同,会出现开辟过大的数组导致内存浪费、开辟过小的数组导致数组元素不够用的情况。而链表可以根据需要动态开辟内存单元,是一种常见的重要数据结构。图1.1所示为最简单的一种链表结构。
![](https://epubservercos.yuewen.com/38FD6E/15477640904532306/epubprivate/OEBPS/Images/figure_0012_0001.jpg?sign=1738945957-g0lONnSWAkMEE0tZNb3FnOdDO1VVXZEm-0-de662836c98b1a2de2d8351a6ea2cb24)
图1.1
链表如同铁链一样,一环扣一环,中间是不能断开的。打个通俗的比方:幼儿园老师带领小朋友出来散步,老师牵着第一个小朋友的手,第一个小朋友的手牵着第二个小朋友的手……这就是一个“链”,最后一个小朋友的手是空的。
老师即“头指针”变量,图1.1中以Head表示,它存放一个地址。链表中每一个元素称为“结点”,每个结点都应该包括两部分:一为实际元素值,一为下一结点的地址。
最后一个元素不指向其他元素,它被称为“表尾”,以“NULL”表示,“NULL”在C++语言里指向“空地址”。
很显然,这种链表的数据结构,必须要用指针变量才能实现。