C++数据结构

3 阅读3分钟
  1. 数组 array 特点如下:
  • 固定大小,一旦声明,大小不能改变。
  • 直接访问元素,时间复杂度为 O(1)。
  • 适合处理大小已知、元素类型相同的集合。

优缺点如下:

  • 优点:访问速度快,内存紧凑。
  • 缺点:大小固定,无法动态扩展,不适合处理大小不确定的数据集。
  1. 结构体 struct

特点如下:

  • 可以包含不同类型的成员变量。
  • 提供了对数据的基本封装,但功能有限。
  1. 类 class

特点如下:

  • 可以包含成员变量、成员函数、构造函数、析构函数。
  • 支持面向对象特性,如封装、继承、多态。
  1. 链表 linked list

特点如下:

  • 动态调整大小,不需要提前定义容量。
  • 插入和删除操作效率高,时间复杂度为 O(1)(在链表头部或尾部操作)。
  • 线性查找,时间复杂度为 O(n)。

优缺点如下:

  • 优点:动态大小,适合频繁插入和删除的场景。
  • 缺点:随机访问效率低,不如数组直接访问快。
  1. 栈 stack

特点

  • 只允许在栈顶进行插入和删除操作。
  • 时间复杂度为 O(1)。 后进先出

优缺点:

  • 优点:操作简单,效率高。
  • 缺点:只能在栈顶操作,访问其他元素需要弹出栈顶元素。
  1. 队列 queue 队列是一种先进先出(FIFO, First In First Out)的数据结构,常用于广度优先搜索、任务调度等场景
  • 插入操作在队尾进行,删除操作在队头进行。
  • 时间复杂度为 O(1)。

优缺点

  • 优点:适合按顺序处理数据的场景,如任务调度。
  • 缺点:无法随机访问元素。
  1. 双端队列(deque) 双端队列允许在两端进行插入和删除操作,是栈和队列的结合体。
  • 允许在两端进行插入和删除。
  • 时间复杂度为 O(1)。

优缺点:

  • 优点:灵活的双向操作。
  • 缺点:空间占用较大,适合需要在两端频繁操作的场景。
  1. 哈希列表 has table 特点

哈希表是一种通过键值对存储数据的数据结构,支持快速查找、插入和删除操作。C++ 中的 unordered_map 是哈希表的实现。

  • 使用哈希函数快速定位元素,时间复杂度为 O(1)。
  • 不保证元素的顺序。

优缺点:

  • 优点:查找、插入、删除操作效率高。
  • 缺点:无法保证元素顺序,哈希冲突时性能会下降。
  1. 映射 map

map 是一种有序的键值对容器,底层实现是红黑树。与 unordered_map 不同,它保证键的顺序,查找、插入和删除的时间复杂度为 O(log n)。

  • 保证元素按键的顺序排列。
  • 使用二叉搜索树实现。

优缺点

  • 优点:元素有序,适合需要按顺序处理数据的场景。
  • 缺点:操作效率比 unordered_map 略低。