数据结构宽泛理解

0 阅读2分钟

用一句话理解数据结构: 数据结构 = 数据 + 结构 = 数据怎么存 + 怎么取、怎么用。

数组/链表:基础骨架
栈/队列:控制顺序
树:用来快速查找、排序
哈希表:用来极速查找
图:描述复杂关系

主要用来解决 3 个核心问题:

1. 数据怎么放最省空间
2. 数据怎么找最快
3. 数据怎么增删改最方便

最核心的 4 类数据结构

一. 线性结构:像排队一样

1.数组(Array)

一段连续内存

优点:随机访问快,下标直接找

缺点:插入、删除慢,大小固定

2.链表(LinkedList)

数据分散,靠指针连在一起

优点:插入、删除快

缺点:不能随机访问,要从头找

3.栈(Stack)

先进后出(LIFO)

典型场景:函数调用、括号匹配、递归

4.队列(Queue)

先进先出(FIFO)

典型场景:排队、消息队列、任务调度



二. 树形结构:像家族树

1.二叉树

每个节点最多两个孩子

2.二叉搜索树 BST

左小右大,用来快速查找

3.平衡二叉树(AVL、红黑树)

防止树歪掉,保证查找稳定

C++ STL map、set 底层就是红黑树

4.堆(Heap)

完全二叉树

最大堆 / 最小堆

用途:优先队列、堆排序、TOP-K



三. 哈希结构:查得最快的神器

1.哈希表(Hash Table)

key → 哈希函数 → 下标

平均:O(1) 增删改查

缺点:会冲突,要处理(链地址、开放地址)



四. 图结构:最复杂、最真实

节点 + 边

有向图、无向图、有权图

核心算法:BFS 广度优先、DFS 深度优先、最短路径(Dijkstra、Floyd)、最小生成树

数据结构的灵魂:时间复杂度

最常用的几个

O(1):常数级,最快

O(log n):对数级,非常快(二分、树)

O(n):线性,还行(遍历)

O(n²):平方,很慢(暴力)