1. 数据结构基本概念及简单的算法分析
数据结构的基本概念
- 数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
- 数据元素:数据元素是数据的基本单位,通常作为一个整体进行思考和处理。一个数据元素可由若干 数据项 组成,数据项是构成数据元素的不可分割的最小单位。
- 数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
- 数据类型:数据类型是一个值的集合和定义在此集合上的一组操作的总称。
- 原子类型。其值不可再分的数据类型。
- 结构类型:其值可以再分解为若干成分(分量)的数据类型
- 抽象数据类型:抽象数据组织及与之相关的操作。
- 抽象数据类型:抽象数据类型( ADT )是指一个数学模型及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。通常用 (数据对象,数据关系,基本操作集) 这样的三元组来表示抽象数据类型。
- 数据结构:在任何问题中,数据元素都不是孤立存在的,它们之间存在某种关系,这种数据元素相互之间的关系称为
结构 。数据结构
是相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括以下三方面的内容:
- 逻辑结构
- 是指数据元素之间的逻辑关系,即从逻辑关系描述数据。
- 与数据的存储无关,是独立于计算机的。
- 分为线性结构和非线性结构
- 4 种基本结构
- 集合
- 线性结构
- 树形结构
- 图状结构或网状结构
- 存储结构
- 是指数据结构在计算机中的表示(又称映像),也称物理结构。
- 包括数据的表示和关系的表示。
- 依赖于计算机语言
- 4 种存储结构
- 顺序存储
- 链式存储
- 索引存储
- 散列存储
- 数据运算
- 包括定义和实现
- 定义:针对逻辑结构,指出运算的功能
- 实现:针对存储结构,指出运算的具体操作步骤。
- 逻辑结构
算法的定义、特性
- 算法的定义
- 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作。
- 算法的特性
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
简单的算法分析:时间复杂度、空间复杂度
- 时间复杂度分析技巧
- 非递归:分析循环次数和问题规模 n 的关系,根据循环条件列出两者的不等式,取解中增长最快的一项作为时间复杂度。
- 递归:根据代码中的递推公式,求出通项公式,取增长最快的一项作为时间复杂度。
- 空间复杂度
- 算法原地工作是指所需的辅助空间为常量(而非不需要),即 O(1) 。
2. 线性表
1 | // 算法 2.1 |
1 | // 算法 2.2 |
顺序表和链表的存储与基本操作;
顺序表
1 | // 线性表的 动态分配 存储结构定义 |
1 | // 算法 2.3 |
1 | // 算法 2.4 |
1 | // 算法 2.5 |
1 | // 算法 2.6 |
1 | // 算法 2.7 |
链表
1 | // 线性表的单链表存储结构 |
1 | // 算法 2.8 |
1 | // 算法 2.9 |
1 | // 算法 2.10 |
1 | // 算法 2.11 |
1 | // 算法 2.12 |
1 | // 线性表的静态单链表存储结构 |
1 | // 算法 2.13 |
1 | // 算法 2.14 |
1 | // 算法 2.15 |
1 | // 算法 2.16 |
1 | // 算法 2.17 |
顺序表和链表的应用;
一元多项式的表示及相加
1 | // 项的结构 |
1 | // 算法 2.22 |
1 | // 算法 2.23 |
循环链表;双向链表;
循环链表
- 最后一个结点的指针域指向头节点。
- 遍历循环结束条件是p == 头指针或者p->next == 头指针
- 基本操作与线性链表类似
双向链表
1 | // 线性表的双向链表存储结构 |
1 | // 算法 2.18 |
1 | // 算法 2.19 |
参考资料
- 数据结构(C语言版).严蔚敏
- 2020年数据结构考研复习指导.王道论坛