数据结构
定义:数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它主要研究数据的逻辑结构、存储结构以及操作(算法)。
一、逻辑结构
数据元素之间的逻辑关系,与存储无关,是面向问题的抽象描述。
- 集合结构:数据元素同属一个集合,无其他特殊关系。
- 线性结构:元素之间存在一对一关系,如链表、数组、栈、队列。
- 树形结构:元素之间存在一对多关系,如二叉树、堆。
- 图状结构:元素之间存在多对多关系,如社交网络模型。
二、存储结构(物理结构)
数据元素在计算机中的存储方式,决定了数据的访问和操作效率。
- 顺序存储:用连续的内存空间存储元素,通过下标访问(如数组)。
优点:访问速度快;缺点:插入/删除需移动大量元素。 - 链式存储:用节点(包含数据和指针)存储元素,节点可分散存储(如链表)。
优点:插入/删除灵活;缺点:访问需遍历指针,速度较慢。 - 索引存储:额外建立索引表,通过索引快速定位元素(如数据库索引)。
- 散列存储(哈希存储):通过哈希函数将元素映射到特定位置(如哈希表)。
三、常见数据结构
数据结构 | 特点 | 典型应用场景 |
---|---|---|
数组 | 顺序存储,随机访问快 | 缓存、矩阵运算 |
链表 | 链式存储,动态灵活 | 动态数据缓冲 |
栈 | 后进先出(LIFO) | 函数调用、表达式求值 |
队列 | 先进先出(FIFO) | 任务调度、消息队列 |
树(二叉树) | 层次化结构,递归性强 | 文件系统、搜索算法 |
图 | 多对多关系 | 路径规划、社交网络 |
哈希表 | 快速查找和插入 | 缓存、数据库键值对 |
算法
定义:算法是为解决特定问题而设计的有限步骤的操作序列,具有有穷性、确定性、可行性、输入、输出五大特性。
一、算法的衡量标准
- 时间复杂度:算法运行所需时间的度量,用大O符号表示(如O(1)、O(n)、O(n²))。
- 常见时间复杂度从低到高:
O(1)(常数阶)< O(logn)(对数阶)< O(n)(线性阶)< O(n logn) < O(n²)(平方阶)< O(2ⁿ)(指数阶)。
- 常见时间复杂度从低到高:
- 空间复杂度:算法运行所需额外内存空间的度量,同样用大O符号表示(如O(1)、O(n))。
二、常见算法类型
-
查找算法
- 顺序查找:逐个遍历元素,时间复杂度O(n)。
- 二分查找:仅适用于有序数组,每次排除一半元素,时间复杂度O(logn)。
- 哈希查找:通过哈希表直接定位,平均时间复杂度O(1)。
-
排序算法
算法 时间复杂度 空间复杂度 稳定性 特点 冒泡排序 O(n²) O(1) 稳定 相邻元素交换,简单但效率低 插入排序 O(n²) O(1) 稳定 类似打牌时整理手牌 选择排序 O(n²) O(1) 不稳定 每次选最小元素交换 快速排序 O(n logn) O(logn)~O(n) 不稳定 分治思想,平均效率高 归并排序 O(n logn) O(n) 稳定 分治+合并,占用额外空间 堆排序 O(n logn) O(1) 不稳定 基于堆结构实现 -
图算法
- 深度优先搜索(DFS):递归遍历图,用于寻找连通分量、拓扑排序。
- 广度优先搜索(BFS):层序遍历图,用于最短路径、最小生成树(如Prim算法、Kruskal算法)。
-
递归与分治算法
- 递归:函数自身调用,需注意终止条件(如计算阶乘)。
- 分治:将问题分解为子问题,合并结果(如归并排序、快速排序)。
-
动态规划
- 存储子问题结果避免重复计算,适用于优化问题(如斐波那契数列优化、背包问题)。
数据结构与算法的关系
- 相辅相成:数据结构是算法处理的对象,算法依赖数据结构实现;
- 优化目标:合理选择数据结构可降低算法复杂度(如用哈希表优化查找效率);
- 应用场景:例如,操作系统用队列管理进程调度,编译器用栈处理函数调用,搜索引擎用图算法分析网页链接。
学习建议:从基础数据结构(数组、链表)入手,理解算法思想(如贪心、动态规划),通过刷题(如LeetCode)强化应用能力。
数据结构
定义:数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它主要研究数据的逻辑结构、存储结构以及操作(算法)。
一、逻辑结构
数据元素之间的逻辑关系,与存储无关,是面向问题的抽象描述。
- 集合结构:数据元素同属一个集合,无其他特殊关系。
- 线性结构:元素之间存在一对一关系,如链表、数组、栈、队列。
- 树形结构:元素之间存在一对多关系,如二叉树、堆。
- 图状结构:元素之间存在多对多关系,如社交网络模型。
二、存储结构(物理结构)
数据元素在计算机中的存储方式,决定了数据的访问和操作效率。
- 顺序存储:用连续的内存空间存储元素,通过下标访问(如数组)。
优点:访问速度快;缺点:插入/删除需移动大量元素。 - 链式存储:用节点(包含数据和指针)存储元素,节点可分散存储(如链表)。
优点:插入/删除灵活;缺点:访问需遍历指针,速度较慢。 - 索引存储:额外建立索引表,通过索引快速定位元素(如数据库索引)。
- 散列存储(哈希存储):通过哈希函数将元素映射到特定位置(如哈希表)。
三、常见数据结构
数据结构 | 特点 | 典型应用场景 |
---|---|---|
数组 | 顺序存储,随机访问快 | 缓存、矩阵运算 |
链表 | 链式存储,动态灵活 | 动态数据缓冲 |
栈 | 后进先出(LIFO) | 函数调用、表达式求值 |
队列 | 先进先出(FIFO) | 任务调度、消息队列 |
树(二叉树) | 层次化结构,递归性强 | 文件系统、搜索算法 |
图 | 多对多关系 | 路径规划、社交网络 |
哈希表 | 快速查找和插入 | 缓存、数据库键值对 |
算法
定义:算法是为解决特定问题而设计的有限步骤的操作序列,具有有穷性、确定性、可行性、输入、输出五大特性。
一、算法的衡量标准
- 时间复杂度:算法运行所需时间的度量,用大O符号表示(如O(1)、O(n)、O(n²))。
- 常见时间复杂度从低到高:
O(1)(常数阶)< O(logn)(对数阶)< O(n)(线性阶)< O(n logn) < O(n²)(平方阶)< O(2ⁿ)(指数阶)。
- 常见时间复杂度从低到高:
- 空间复杂度:算法运行所需额外内存空间的度量,同样用大O符号表示(如O(1)、O(n))。
二、常见算法类型
-
查找算法
- 顺序查找:逐个遍历元素,时间复杂度O(n)。
- 二分查找:仅适用于有序数组,每次排除一半元素,时间复杂度O(logn)。
- 哈希查找:通过哈希表直接定位,平均时间复杂度O(1)。
-
排序算法
算法 时间复杂度 空间复杂度 稳定性 特点 冒泡排序 O(n²) O(1) 稳定 相邻元素交换,简单但效率低 插入排序 O(n²) O(1) 稳定 类似打牌时整理手牌 选择排序 O(n²) O(1) 不稳定 每次选最小元素交换 快速排序 O(n logn) O(logn)~O(n) 不稳定 分治思想,平均效率高 归并排序 O(n logn) O(n) 稳定 分治+合并,占用额外空间 堆排序 O(n logn) O(1) 不稳定 基于堆结构实现 -
图算法
- 深度优先搜索(DFS):递归遍历图,用于寻找连通分量、拓扑排序。
- 广度优先搜索(BFS):层序遍历图,用于最短路径、最小生成树(如Prim算法、Kruskal算法)。
-
递归与分治算法
- 递归:函数自身调用,需注意终止条件(如计算阶乘)。
- 分治:将问题分解为子问题,合并结果(如归并排序、快速排序)。
-
动态规划
- 存储子问题结果避免重复计算,适用于优化问题(如斐波那契数列优化、背包问题)。
数据结构与算法的关系
- 相辅相成:数据结构是算法处理的对象,算法依赖数据结构实现;
- 优化目标:合理选择数据结构可降低算法复杂度(如用哈希表优化查找效率);
- 应用场景:例如,操作系统用队列管理进程调度,编译器用栈处理函数调用,搜索引擎用图算法分析网页链接。
学习建议:从基础数据结构(数组、链表)入手,理解算法思想(如贪心、动态规划),通过刷题(如LeetCode)强化应用能力。