线性表
- 前驱元素与后继元素
- 头节点与尾节点
- 除了头节点与尾节点,其他元素有且只有一个前驱和后继元素
顺序表
- 顺序表的容量可变
1. 在插入元素时不管是直接插入(无参数,直接在尾部插入),还是定点插入(在指定位置处插入),都需要先判断容量是否已满,若是,则调用另外的扩容函数(其实就是新建一个2倍容量的顺序表,指向原来的表,并将数值复制到新表中) - 时间复杂度
各个方法的复杂度 - 顺序表底层是由数组实现,而数组的长度是固定的,在操作中涉及到扩容时,会导致操作某些需要扩容的元素时,时间复杂度会剧增,这样就会导致时间复杂度不是线性的
- ArrayList
1. 用数组实现
2. 有扩容操作
3. 提供遍历的方式
链表
- 单向链表——LinkList
单向链表头节点的item为null - 双向链表——TowWayLinkList
每个结点都包括一个数据域,两个指针域pre,next
双向链表的头节点的为null,item也为null, - LinkedList集合使用双向链表
- 链表反转
- 快慢指针——快指针的速度一般设置为慢指针的两倍
1. 中间值问题
2. 单向链表有环问题
3. 有环链表入口问题
在单向链表确定有环时,加上一个temp指针从first结点开始,同样每次移动一个节点,最终与慢指针重合于入口处 - 循环链表
约瑟夫问题