大话数据结构
Executive Summary
核心观点(金字塔原理)
结论先行: 数据结构是程序设计的基础,理解各种数据结构的特性和适用场景是写出高效程序的前提。
支撑论点:
- 线性结构(数组、链表、栈、队列)是最基础的数据组织形式,各有优缺点
- 算法必须满足五大特性:输入、输出、有穷性、确定性、可行性
- 字符串匹配等经典问题有KMP等高效算法解决方案
SWOT 分析
| 维度 | 分析 |
|---|---|
| S 优势 | 语言通俗易懂,适合初学者入门,用生活案例解释抽象概念 |
| W 劣势 | 内容相对基础,对有经验的开发者深度不足 |
| O 机会 | 数据结构是所有编程语言和框架的基础,永不过时 |
| T 威胁 | 高级语言封装了底层实现,易让开发者忽视基础原理 |
适用场景
- 编程初学者系统学习数据结构
- 准备技术面试复习基础知识
- 非科班出身补充计算机基础
数据结构是一种或多种特定关系的数据元素的集合
算法的特性,1 输入 2 输出 3 有穷性 4 确定性 5 可行性
0个或多个数据元素的有限序列:线性表
- 线性表的顺序存储结构,指的是用一段连续的存储单元依次存储线性表的数据元素
- 线性表的顺序存储结构的优缺点
| 优点 | 缺点 |
|---|---|
| 无须为表示表中元素之间的逻辑关系而增加额外的存储空间 | 插入和删除操作需要移动大量元素 |
| 可以快速地存取表中任一位置的元素 | 当线性表长度变化较大时,难以确定存储空间的容量;造成存储空间的”碎片” |
- 栈是限定仅在表尾进行插入和删除操作的线性表
- 队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表
- 串是由零个或多个字符组成的有限序列,又名叫字符串
- 循环队列判断条件: front队首,rear队尾,m队最大容量; 队空判断:
front=rear, 队满判断:front=(rear+1)%m当前队列中元素数目: n=(rear-front+m)%m KMP算法