- 数组 array 特点如下:
- 固定大小,一旦声明,大小不能改变。
- 直接访问元素,时间复杂度为 O(1)。
- 适合处理大小已知、元素类型相同的集合。
优缺点如下:
- 优点:访问速度快,内存紧凑。
- 缺点:大小固定,无法动态扩展,不适合处理大小不确定的数据集。
- 结构体 struct
特点如下:
- 可以包含不同类型的成员变量。
- 提供了对数据的基本封装,但功能有限。
- 类 class
特点如下:
- 可以包含成员变量、成员函数、构造函数、析构函数。
- 支持面向对象特性,如封装、继承、多态。
- 链表 linked list
特点如下:
- 动态调整大小,不需要提前定义容量。
- 插入和删除操作效率高,时间复杂度为 O(1)(在链表头部或尾部操作)。
- 线性查找,时间复杂度为 O(n)。
优缺点如下:
- 优点:动态大小,适合频繁插入和删除的场景。
- 缺点:随机访问效率低,不如数组直接访问快。
- 栈 stack
特点
- 只允许在栈顶进行插入和删除操作。
- 时间复杂度为 O(1)。 后进先出
优缺点:
- 优点:操作简单,效率高。
- 缺点:只能在栈顶操作,访问其他元素需要弹出栈顶元素。
- 队列 queue 队列是一种先进先出(FIFO, First In First Out)的数据结构,常用于广度优先搜索、任务调度等场景
- 插入操作在队尾进行,删除操作在队头进行。
- 时间复杂度为 O(1)。
优缺点
- 优点:适合按顺序处理数据的场景,如任务调度。
- 缺点:无法随机访问元素。
- 双端队列(deque) 双端队列允许在两端进行插入和删除操作,是栈和队列的结合体。
- 允许在两端进行插入和删除。
- 时间复杂度为 O(1)。
优缺点:
- 优点:灵活的双向操作。
- 缺点:空间占用较大,适合需要在两端频繁操作的场景。
- 哈希列表 has table 特点
哈希表是一种通过键值对存储数据的数据结构,支持快速查找、插入和删除操作。C++ 中的 unordered_map 是哈希表的实现。
- 使用哈希函数快速定位元素,时间复杂度为 O(1)。
- 不保证元素的顺序。
优缺点:
- 优点:查找、插入、删除操作效率高。
- 缺点:无法保证元素顺序,哈希冲突时性能会下降。
- 映射 map
map 是一种有序的键值对容器,底层实现是红黑树。与 unordered_map 不同,它保证键的顺序,查找、插入和删除的时间复杂度为 O(log n)。
- 保证元素按键的顺序排列。
- 使用二叉搜索树实现。
优缺点:
- 优点:元素有序,适合需要按顺序处理数据的场景。
- 缺点:操作效率比
unordered_map略低。