「列表 list」是一个抽象的数据结构概念,它表示元素的有序集合,支持元素访问、修改、添加、删除和遍历 等操作,无须使用者考虑容量限制的问题。列表可以基于链表或数组实现。
‧ 链表天然可以看作一个列表,其支持元素增删查改操作,并且可以灵活动态扩容。
‧ 数组也支持元素增删查改,但由于其长度不可变,因此只能看作一个具有长度限制的列表。
当使用数组实现列表时,长度不可变的性质会导致列表的实用性降低。为解决此问题,我们可以使用「动态数组 dynamic array」来实现列表。它继承了数组的各项优点,并且可 以在程序运行过程中进行动态扩容。 一般情况把“列表”和“动态数组”视 为等同的概念。
初始化列表
通常使用“无初始值”和“有初始值”这两种初始化方法:
访问元素
列表本质上是数组,因此可以在 𝑂(1) 时间内访问和更新元素,效率很高。
插入与删除元素
相较于数组,列表可以自由地添加与删除元素。在列表尾部添加元素的时间复杂度为 𝑂(1) ,但插入和删除元素的效率仍与数组相同,时间复杂度为 𝑂(𝑛) 。
遍历列表
与数组一样,列表可以根据索引遍历,也可以直接遍历各元素。
拼接列表
给定一个新列表 list1 ,我们可以将其拼接到原列表的尾部。
排序列表
完成列表排序后,我们便可以使用在数组类算法题中经常考查的“二分查找”和“双指针”算法。