1.数组
- 描述: 数组是一种基本的数据结构,用于存储元素的有序集合。它在内存中分配一段连续的空间来存储元素。
- 特点:
- 固定大小:一旦创建,大小通常不变。
- 索引访问:可以通过索引直接访问任何位置的元素,提供 O(1) 时间复杂度的访问。
- 内存效率:由于连续的内存空间,数组在空间上很高效。
2.链表
单链表(Singly LinkedList)
- 描述: 每个元素(节点)包含数据和指向下一个节点的指针。
- 特点:
- 动态大小:可以根据需要增长或缩小。
- 顺序访问:必须从头节点开始逐个访问元素,访问时间为 O(n)。
- 插入和删除效率高,不需要移动其他元素。
双链表(Doubly LinkedList)
- 描述: 类似于单链表,但每个节点有两个指针,分别指向前一个和后一个节点。
- 特点:
- 可以向前或向后遍历。
- 删除和插入(尤其是在列表中间)更高效,因为不需要从头遍历。
循环链表(Circular LinkedList)
- 描述: 链表的一种变体,其中最后一个节点指向头节点,形成一个圈。
- 特点:
- 从任何节点开始都可以遍历整个列表。
- 适用于需要循环访问元素的场景。
3.栈
- 描述: 栈是一种遵循后进先出(LIFO)原则的集合。只能在栈顶添加或移除元素。
- 操作:
push
:在栈顶添加元素。pop
:移除栈顶元素。peek
或top
:查看栈顶元素但不移除。- 用途: 在函数调用、表达式求值、回溯算法中广泛使用。
4.队列
普通队列(Regular Queue)
- 描述: 队列是一种遵循先进先出(FIFO)原则的集合。元素从后端(rear)添加,从前端(front)移除。
- 用途: 适用于需要按顺序处理元素的场景,如打印任务、操作系统的任务调度。
循环队列(Circular Queue)
- 描述: 队列的一种实现,其中数组的末尾“连接”到开头,形成一个圆环。
- 特点: 有效解决普通队列中空间利用不均的问题。
优先队列(Priority Queue)
- 描述: 类似于普通队列,但每个元素都有一个优先级。元素按优先级顺序移除。
- 实现: 通常用堆(特别是二叉堆)实现。
- 用途: 在需要处理具有优先级的数据(如任务调度、Dijkstra的最短路径算法)时非常有用。