数据结构第一章绪论
🤖 Assistant
1 | # 📚 数据结构 | 第1章 绪论精讲 |
📦 1.1 初识数据结构
数据结构是研究非数值的计算机程序设计操作对象(研究逻辑机构,存储结构,算法)
🧩 生活中的数据结构(先理解再记忆)
- 图书馆管理:书籍按照索引号(逻辑结构)存储在不同书架(存储结构)
- 快递分拣:包裹按地区(分类)、货架类型(存储方式)、扫码查询(操作算法)
- 手机通讯录:姓名排序(线性结构) vs 微信好友分组(树形结构)
💡 专业术语解读
1 | | 术语 | 相当于现实中的... | 示例说明 | |
A.数据(data):
数据是客观事物符号的表示,(能输入计算机,计算机可处理的符号总称)
B.数据元素(data element):
数据的基本单位,也成为结点或记录或顶点
数据元素(一个)可以有多个或者若干个数据项(data item)组成
C.数据项(data item):
数据项是数据处理的最小单位
数据项(data item)是数据不可再分的最小单位,如学生信息记录中的学号、姓名等。
D.数据对象(data object):
数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集。
(数据对象是讨论数据集合的抽象,是数据的一个子集。数据对象中的数据元素必须具有相同的特性,即属于同一个数据类型。)
e.数据结构(data structure):
数据结构(data structure)是相互之间存在一种或多种特定关系的数据元素的集合,它指的是数据元素之间的相互关系,即数据的组织形式。
🧠 1.2 数据结构三要素
a.数据的逻辑结构
b.数据的物理结构
c.数据的运算及实现
🌳 逻辑结构(用户视角)
1 | graph LR |
🧱 存储结构(计算机视角)
1 | 1. **顺序存储**:数组式排列 ✨ |
存储方式 | 典型应用 | 访问速度 | 空间成本 | 适用场景 |
---|---|---|---|---|
顺序存储 | 数组/矩阵 | ★★★★☆ | 低 | 频繁随机访问 |
链式存储 | 链表/树结构 | ★★☆☆☆ | 中 | 动态数据增减 |
索引存储 | 数据库索引 | ★★★☆☆ | 高 | 快速检索+范围查询 |
散列存储 | 哈希表/缓存系统 | ★★★★★ | 可变 | 快速精确查找 |
注:★★★★★表示最优,★数量减少表示性能递减
⚙️ 1.3 算法分析核心
🎯 算法五大要素(BAT面试易考点)
- 确定性 → 同输入必然同输出
- 可行性 → 能通过计算机实现
- 有穷性 → 不能死循环(注意与程序的区别)
- 输入输出 → 至少一个输出
📈 复杂度分析诀窍
时间增长模型(关键口诀)
1 | O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(2ⁿ) |
常见复杂度场景
1 | # 🧠 复杂度等级实战案例 |
✨ 复杂度计算技巧表
代码模式 | 时间复杂度 | 示例 |
---|---|---|
简单语句 | O(1) | a = b + c |
单层循环 | O(n) | for(i=0;i<n;i++) |
嵌套循环 (两重) | O(n²) | 冒泡排序核心代码 |
递归调用(二分) | O(logn) | 二叉树查找 |
递归调用(非平衡) | O(n) | 链表遍历 |
🔑 1.4 学习方法建议
💡 三点学习哲学
- 多画图解 → 绘制数据结构形态演变图
- 手写代码 → 关键操作在纸上模拟执行
- 对比记忆 → 对比不同结构的CRUD复杂度
🛠️ 动手实验建议
1 | - 实验1:用扑克牌模拟栈的入栈/出栈 |
📌 本章小结
✅ 数据结构 = 逻辑结构 + 存储结构 + 运算
✅ 算法优劣关键看时间/空间复杂度
✅ 分析复杂度要抓主要矛盾
```
注:以上内容完整支持Markdown语法,可直接导入Obsidian/Notion等笔记软件,思维导图需支持Mermaid的编辑器查看。练习题目配套代码已整合核心知识要点。
评论