数据结构第一章:绪论

一、数据结构的三要素:逻辑、存储与运算

在数据结构中,任何一种结构都可以从三个维度来理解:它"看起来是什么关系"(逻辑结构)、"在内存里怎么存"(存储结构)以及"能做什么操作"(数据运算)。这三者共同构成了完整的数据结构。

1. 逻辑结构:数据之间的抽象关系

逻辑结构关注的是数据元素之间的相互关系,与计算机无关,属于数学层面的描述。

  • 线性结构 :元素之间存在一对一 的关系。
    • 典型代表:线性表、栈、队列
    • 特点:有且仅有一个开始元素和一个结束元素,其余元素都有唯一前驱和后继。
  • 非线性结构 :元素之间存在一对多或多对多 的关系。
    • 典型代表:
      • 树(一对多)
      • 图/网(多对多)
      • 集合(无特定关系)

考研高频考点

"以下哪种结构属于线性结构?"

正确答案通常是栈、队列、数组、链表 ;而二叉树、图、哈希表属于非线性结构。


2. 存储结构(物理结构):数据在内存中的实现方式

逻辑结构必须通过某种方式在计算机中实现,这就是存储结构。同一逻辑结构可用不同存储方式实现,效率也不同。

存储方式 特点 适用场景
顺序存储 使用连续内存空间(如数组) 随机访问快,插入删除慢
链式存储 通过指针链接节点(如链表) 插入删除快,不支持随机访问
索引存储 建立索引表加速查找 大型数据库常用
散列存储 利用哈希函数映射地址 快速查找(如哈希表)

典型考题

"若频繁进行插入和删除操作,应选择哪种存储结构?"

答案:链式存储(因无需移动大量元素)。
⚠️ 注意:逻辑结构 ≠ 存储结构!例如,栈是一种逻辑结构,既可以用数组(顺序)实现,也可以用链表(链式)实现。


3. 数据的运算:对结构的操作集合

数据运算是指对数据结构进行的各种操作,如:

  • 初始化、销毁
  • 插入、删除
  • 查找、遍历
  • 排序、合并

这些操作的定义依赖于逻辑结构 ,而实现效率依赖于存储结构

例如:

  • 在顺序表中查找第 i 个元素:O(1)
  • 在单链表中查找第 i 个元素:O(n)

考点提醒

考试常结合具体结构考察操作的时间复杂度,务必掌握常见操作的效率差异。


二、算法及其五大特性

数据结构离不开算法。算法是解决问题的步骤描述,而数据结构是算法操作的对象。

算法的五大特性(必背!)

  1. 有穷性:算法必须在有限步内结束(不能无限循环)。
  2. 确定性:每一步都有明确含义,相同输入必得相同输出。
  3. 可行性:每一步都可通过基本操作实现。
  4. 输入:可以有零个或多个输入。
  5. 输出:至少有一个输出(否则算法无意义)。

易错点

  • "有穷性" ≠ "运行时间短",而是指步骤数量有限
  • 操作系统中的"死循环监控程序"不是算法,因为它不满足有穷性。

三、算法效率的度量:时间复杂度 & 空间复杂度

这是第一章的重中之重,也是后续所有算法分析的基础。

1. 时间复杂度(Time Complexity)

衡量算法运行时间随输入规模增长的趋势,用大O记号(Big-O) 表示。

常见时间复杂度排序(从小到大):
复制代码
O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!)
典型例子:
  • a = b + c → O(1)
  • 二分查找 → O(log n)
  • 遍历数组 → O(n)
  • 快速排序 → O(n log n)
  • 冒泡排序 → O(n²)

计算技巧

  • 只看最高阶项,忽略常数和低阶项。
  • 嵌套循环:外层 n 次,内层 m 次 → O(n×m)

例题

复制代码
for (i = 0; i < n; i++) {
    for (j = 0; j < i; j++) {
        sum++;
    }
}

执行次数 ≈ 1+2+...+(n-1) = n(n-1)/2 → 时间复杂度为 O(n²)


2. 空间复杂度(Space Complexity)

衡量算法执行过程中额外占用的存储空间(不包括输入数据本身)。

  • 常数空间:O(1)(如只用几个变量)
  • 递归深度为 n:O(n)(函数调用栈)
  • 动态规划数组大小为 n:O(n)

注意

空间复杂度常被忽视,但近年真题中已有涉及,如问"递归版斐波那契的空间复杂度是多少?" → 答案:O(n)


四、第一章高频考点总结(建议收藏!)

考点 考查形式 备考建议
逻辑结构分类 选择题、判断题 牢记线性 vs 非线性
存储结构特点 选择题、简答题 对比顺序 vs 链式
算法五大特性 选择题 重点区分"有穷性"与"确定性"
时间复杂度计算 计算题、选择题 多练嵌套循环、递归分析
空间复杂度理解 选择题 注意递归和辅助数组
三要素关系 综合题 理解"同一逻辑结构可有多种存储实现"
相关推荐
gihigo19981 天前
MATLAB实现K-SVD算法
数据结构·算法·matlab
SJLoveIT1 天前
架构师视角:深度解构 Redis 底层数据结构的设计哲学
数据结构·数据库·redis
running up that hill1 天前
日常刷题记录
java·数据结构·算法
DLGXY1 天前
数据结构——快慢指针(十五)
数据结构
历程里程碑1 天前
Linux 6 权限管理全解析
linux·运维·服务器·c语言·数据结构·笔记·算法
历程里程碑1 天前
双指针--双数之和
开发语言·数据结构·c++·算法·排序算法·哈希算法·散列表
好学且牛逼的马1 天前
【Hot100|13-LeetCode 56. 合并区间】
数据结构·算法·leetcode
承渊政道1 天前
C++学习之旅【C++Stack和Queue类介绍—入门指南与核心概念解析】
c语言·数据结构·c++·学习·visual studio
皮卡蛋炒饭.1 天前
动态规划-多重背包
数据结构·算法·动态规划
C+++Python1 天前
序列式容器 - list
数据结构·windows·list