数据结构是计算机存储、组织数据的方式,旨在高效地访问和修改数据。常见的数据结构分为线性结构 和非线结构,具体分类如下:
线性数据结构
- 数组(Array):连续内存存储相同类型元素,支持随机访问,但插入/删除效率低。
- 链表(Linked List):通过指针连接节点,分为单向、双向和循环链表,插入/删除高效,但访问需遍历。
- 栈(Stack):后进先出(LIFO)结构,常用于函数调用、表达式求值。
- 队列(Queue):先进先出(FIFO)结构,包括普通队列、双端队列和优先队列。
非线性数据结构
- 树(Tree):层次结构,常见类型包括二叉树、AVL树、红黑树等,用于搜索和排序。
- 图(Graph):由顶点和边组成,分为有向图和无向图,适用于网络建模。
- 哈希表(Hash Table):通过哈希函数映射键值对,实现快速查找,但需处理冲突。
核心操作复杂度
| 数据结构 | 访问 | 搜索 | 插入 | 删除 |
|---|---|---|---|---|
| 数组 | O(1) | O(n) | O(n) | O(n) |
| 链表 | O(n) | O(n) | O(1) | O(1) |
| 哈希表 | O(1) | O(1) | O(1) | O(1) |
| 二叉搜索树 | O(log n) | O(log n) | O(log n) | O(log n) |
应用场景
- 数组:适合数据量固定且频繁访问的场景(如图像处理)。
- 链表:动态数据管理(如操作系统进程调度)。
- 栈/队列:算法设计(DFS/BFS、缓冲区管理)。
- 树/图:数据库索引、社交网络关系建模。
代码示例(Python)
# 链表节点定义
class Node:
def __init__(self, data):
self.data = data
self.next = None
# 栈实现
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
数据结构的选择需结合具体问题,权衡时间与空间复杂度。