这是本文档旧的修订版!


绪论:数据结构与算法详解 (进阶版)

程序设计的核心公式(N.沃思):

程序 = 数据结构 (骨架) + 算法 (灵魂)
  • 数据结构:是静态的。就像图书馆的书架,决定了书怎么放(是按首字母放,还是按类别放)。
  • 算法:是动态的。就像图书管理员找书的流程(是从左往右一本本找,还是先查索引再找)。

我们通过一个“学生信息管理系统”的例子来理解:

  • 数据 (Data):计算机处理的符号总称。
  • 数据元素 (Data Element):数据的基本单位(例:学生表中的一行记录)。
  • 数据项 (Data Item):构成元素的最小单位(例:记录中的“学号”)。
  • 数据对象 (Data Object):性质相同的数据元素的集合(例:所有学生的集合)。

逻辑结构描述的是数据在思想上的关联。以下是四种基本结构的交互式演示:

集合结构 (Set)

松散关系,仅同属一个集合。
(例:操场上的同学)

线性结构 (Linear)

一对一,首尾相接。
(例:排队)

树状结构 (Tree)

一对多,层次分明。
(例:文件夹)

图形结构 (Graph)

多对多,错综复杂。
(例:交通网)

</html>

这是逻辑结构的物理实现。

3.1 顺序存储 vs 链式存储

特性 顺序存储 (数组) 链式存储 (链表)
物理位置 必须相邻 可以散落在内存各处
优点 查找快 (直接算地址),存储密度大 增删快 (改指针即可),不需预分配
缺点 插入删除需移动元素 查找慢 (必须从头找),指针占空间

3.2 进阶存储方式

  • 索引存储:建立一张“目录表”。先查目录找到地址,再找内容。(类似字典的拼音索引)。
  • 散列存储 (Hash)速度之王
    • 原理:通过公式直接算出地址。
    • 例子:存 `105`,公式 `key % 10`,直接扔进 `5` 号房间。查找时直接去 `5` 号拿。

我们用 大O记号 表示随着数据量 $n$ 增大,耗时增长的趋势。

时间复杂度直观对比 (n 增大时)

O(1)
极快 (索引)
O(log n)
很快 (二分)
O(n)
一般 (遍历)
O(n²)
很慢 (冒泡)
</html>

  • $O(1)$ 常数阶:无论数据多少,耗时不变。
  • $O(n)$ 线性阶:数据翻倍,耗时翻倍。
  • $O(n^2)$ 平方阶:数据翻倍,耗时变 4 倍(双层循环)。
  • $O(\log_2 n)$ 对数阶:非常快(二分查找)。
  • 核心:暴力破解,试遍所有可能。
  • 优化剪枝 (Pruning)。如果在搜索过程中发现当前路径不可能成功,就直接放弃,不再往下试(剪掉树枝)。

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • 数据结构/绪论.1765438670.txt.gz
  • 最后更改: 2025/12/11 15:37
  • 张叶安