列表
-
从向量到列表,是从静态到动态。
-
列表的基本组成单位叫做节点node。各节点通过指针或引用彼此联接,在逻辑上构成一个线性序列。前驱、后继。首节点、末节点。
-
列表改用循位置访问的方式。利用节点的相互引用,找到特定的节点。
实现: -
列表节点是独立地“封装”起来的。ListNode
-
列表的ADT接口
-
列表的C++实现 List
头尾哨兵不可见
头、首、末、尾的秩分别理解为:-1、0、n-1、n。
排序算法
- 选择排序:依次在剩余数据中获得最大的那个。然后把最大的那个放到后缀有序子序列的最前端。(原理与起泡排序类似,每次都是选择最大的,但时间复杂度比起泡排序低,因为这是小步慢跑和一步到位的区别)总是将序列分为前缀无序子序列和后缀有序子序列。总体复杂度依然是O(n2)。但元素移动操作远远少于起泡排序。时间复杂度主要来自于元素比较操作。
- 插入排序:分为前缀有序子序列和后缀无序子序列。从后缀的首元素开始,查找前缀子序列中不大于当前元素的后面一个位置。最好的总体复杂度为O(n),最坏的总体复杂度为O(n2)