一篇文章讲清楚常见的数据结构
数据结构全景图 —— 从线性到非线性
数据结构是程序的“骨架”,它决定了我们如何组织、存储和操作数据。理解数据结构,就像掌握了编程世界的“乐高积木”。
一、线性结构(Linear Structures)
1. 数组(Array)
定义:一块连续的内存,存储相同类型的数据。
特点:随机访问快(O(1)),插入删除慢(O(n))。
索引: 0 1 2 3 4
值: 10 20 30 40 50
2. 链表(Linked List)
定义:每个元素(节点)存储数据和下一个节点的指针。
特点:插入删除快(O(1)),随机访问慢(O(n))。
[10 | next] -> [20 | next] -> [30 | next] -> NULL
3. 栈(Stack)
定义:后进先出(LIFO)。
应用:函数调用栈、表达式求值。
↑ Top[30][20][10]
4. 队列(Queue)
定义:先进先出(FIFO)。
应用:任务调度、消息队列。
Front → [10][20][30] ← Rear
二、树(Tree Structures)
1. 二叉树(Binary Tree)
10/ \5 20/ \ / \3 7 15 30
2. 堆(Heap,最大堆示例)
50/ \30 40/ \ / 10 20 35
3. 平衡树(AVL/红黑树)
保持高度平衡,查找/插入/删除稳定 O(log n)。
常用于 数据库索引、语言库容器。
三、图(Graph Structures)
1. 无向图
A —— B| / || / |C —— D
2. 有向图
A → B → C↘ ↗D
3. 加权图(带权重)
A ——(2)—— B\ /(5) (3)\ /C
四、哈希表(Hash Table)
定义:通过哈希函数将键映射到数组下标。
特点:查找接近 O(1)。
key → hash(key) → index"Tom" → 2 → [2]:Tom
"Ana" → 5 → [5]:Ana
总结
线性结构:数组、链表、栈、队列
树结构:二叉树、堆、平衡树
图结构:有向、无向、加权图
哈希结构:哈希表
可以这么理解:
数组/链表 → 存放数据
栈/队列 → 控制流程
树/图 → 表达关系
哈希表 → 快速索引