冰冻非一日之寒
线性表是n个数据元素的有限序列。
线性表是一种真正的动态数据结构,不需要处理固定容量问题,长度可根据需要增长或缩短,即需要存储多少个数据,就开辟多少个存储单元。
前面讲到的动态数组、栈、队列三种数据结构,底层实现都是依托静态数组,靠resize()方法解决固定容量问题。
线性表也是最简单的动态数据结构,后面会讲到二分搜索数、AVL树、红黑树等更加复杂的动态数据结构,其原理也是建立在线性表这种数据结构基础上的
特点:
存在唯一的一个被称作“第一个”的数据元素;
存在唯一的一个被称作“最后一个”的数据元素;
除第一个元素外,集合中的每个数据元素均只有一个前驱;
除最后一个元素外,集合中的每个数据元素均只有一个后继。
线性表的顺序表示指的是用一组连续的存储单元依次存储实现线性表的数据元素。
线性表的链式表示指的是用一组任意的存储单元存储线性表的数据元素,这个存储单元可以是连续的,也可以是不连续的。
线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素。但是,这个特点也导致了这种存储结构的弱点:在作插入或删除操作时,需移动大量元素。而链式存储结构,它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有的弱点,但同时也失去了顺序表可随机存取的优点。
本章节,重点介绍线性表的链式存储,简称链表。