数据结构目录

目 录
前 言
第1章 绪论
1.1 为什么要学习数据结构
1.2 如何学好数据结构
1.3 数据结构的概念
1.4 算法和算法分析
1.4.1 算法特性
1.4.2 算法描述
1.4.3 算法性能分析与度量
习题
第2章 线性表
2.1 线性表的逻辑结构
2.1.1 线性表的定义
2.1.2 线性表的基本操作
2.2 线性表的物理结构
2.2.1 顺序存储结构及基本运算的
实现
2.2.2 链式存储结构及基本运算的
实现
2.2.3 循环链表
2.2.4 双向链表
2.3 应用举例
习题
第3章 栈和队列
3.1 栈
3.1.1 栈的定义及基本运算
3.1.2 栈的存储实现和运算实现
3.2 队列
3.2.1 队列的定义及基本运算
3.2.2 队列的存储实现及运算实现
3.3 应用举例
习题
第4章 串和数组
4.1 串的概念及基本运算
4.1.1 串的基本概念
4.1.2 串的基本运算
4.2 串的定长顺序存储及基本运算
4.3 串的链式存储及基本运算
4.4 模式匹配
4.5 数组
4.6 应用举例
习题
第5章 树和二叉树
5.1 树的定义及相关术语
5.1.1 树的定义
5.1.2 基本术语
5.2 二叉树
5.2.1 二叉树的定义和基本操作
5.2.2 二叉树的主要性质
5.2.3 二叉树的存储结构
5.2.4 遍历二叉树
5.2.5 二叉树其他常见操作的相关
算法
5.3 树和森林
5.3.1 树的存储结构
5.3.2 树、森林与二叉树的转换
5.4 哈夫曼树
5.4.1 哈夫曼树的定义
5.4.2 哈夫曼编码
5.5 应用举例
习题
第6章 图
6.1 图的基本概念
6.2 图的存储表示
6.2.1 邻接矩阵
6.2.2 邻接表
6.3 图的遍历
6.3.1 深度优先遍历
6.3.2 广度优先搜索
6.4 最小生成树
6.4.1 最小生成树的基本概念
6.4.2 构造最小生成树的算法
6.5 最短路径
6.5.1 从一个源点到其他各点的最短
路径
6.5.2 每对顶点之间的最短路径
6.6 拓扑排序
6.7 应用举例
习题
第7章 查找
7.1 基本概念与术语
7.2 线性表查找
7.2.1 顺序查找
7.2.2 折半查找
7.2.3 分块查找
7.3 二叉排序树
7.3.1 二叉排序树的定义
7.3.2 二叉排序树的插入和生成
7.3.3 二叉排序树的删除
7.3.4 二叉排序树的查找
7.4 哈希表查找
7.4.1 哈希表与哈希方法
7.4.2 哈希函数的构造方法
7.4.3 处理冲突的方法
7.4.4 哈希表的查找分析
7.5 应用举例
习题
第8章 排序
8.1 概念
8.2 插入排序
8.2.1 直接插入排序
8.2.2 希尔排序
8.3 交换排序
8.3.1 冒泡排序
8.3.2 快速排序
8.4 选择排序
8.4.1 简单选择排序
8.4.2 堆排序
8.5 二路归并排序
8.6 基数排序
8.7 应用举例
习题
第9章 综合实例——旅游景区信息管理系统
9.1 项目需求
9.2 知识目标
9.3 系统功能设计
9.4 数据结构
9.5 程序清单
第10章 实验
实验一 单链表操作
实验二 栈
实验三 队列
实验四 二叉树
实验五 图的遍历操作
实验六 查找
实验七 排序

 

课程内容与要求

本课程坚持立德树人的根本要求,结合学生学习特点,遵循职业教育人才培养规律,落实课程思政要求,有机融入思想政治教育内容,紧密联系工作实际,突出应用性和实践性,注重学生职业能力和可持续发展能力的培养,合理设计学习单元(模块)、能力点、学习内容与要求、学习成果、建议学时(见附表 1)。

附表 1 课程内容与要求

序号学习单元(模块)能力点学习内容与要求学习成果建议学时
1 第 1 章 绪论 1. 理解学习数据结构的必要性与现实意义,明确学习方法;
2. 掌握数据结构核心概念,能区分逻辑结构与存储结构;
3. 具备算法特性判断、规范描述及性能分析的基础能力
1. 为什么要学习数据结构:了解数据结构在程序设计、操作系统、数据库等后续课程及软件开发中的支撑作用,明确其解决 “数据如何组织”“算法如何优化” 的核心价值;
2. 如何学好数据结构:掌握 “理论 + 实践” 结合的学习方法,明确课前预习、课中理解、课后编程实践(如基于 C 语言实现算法)、案例分析的学习路径;
3. 数据结构的概念:掌握数据、数据元素、数据对象、数据结构(逻辑结构、存储结构)的定义,能举例说明线性结构与非线性结构的区别;
4. 算法和算法分析:
- 理解算法的有穷性、确定性、可行性、输入、输出 5 个特性,能判断简单程序片段是否符合算法特性;
- 掌握用自然语言、流程图或 C 语言伪代码描述算法的方法;
- 掌握算法时间复杂度(语句频度计算、大 O 表示法)和空间复杂度的分析方法,能计算简单算法(如遍历数组、单链表查找)的时间复杂度
1. 撰写学习心得,说明数据结构在某一实际软件(如学生管理系统)中的应用场景;
2. 对 “求 1 到 n 的和”“判断素数” 2 个问题,分别用 C 语言伪代码描述算法,并分析其时间复杂度
4
2 第 2 章 线性表 1. 能基于线性表逻辑结构定义,明确其核心操作需求;
2. 熟练掌握顺序表与链表(单链表、循环链表、双向链表)的 C 语言实现,能对比两种存储结构的优劣;
3. 能运用线性表解决简单工程问题(如学生成绩管理)
1. 线性表的逻辑结构:
- 掌握线性表的定义(n 个数据元素的有限序列)及 “元素间一对一” 的逻辑关系;
- 掌握线性表的基本操作(初始化、插入、删除、查找、遍历、销毁),明确各操作的输入输出与功能描述;
2. 线性表的物理结构:
- 顺序存储结构:用 C 语言数组实现顺序表,掌握初始化、插入(判断下标合法性、元素后移)、删除(元素前移)、按值 / 按位查找的代码实现,理解其 “随机访问” 特性及 “插入删除效率低” 的缺点;
- 链式存储结构:用 C 语言结构体(数据域 + 指针域)实现单链表,掌握头插法 / 尾插法创建链表、插入(前驱节点定位)、删除(释放节点内存)、查找的代码实现;
- 循环链表:理解单循环链表 “尾节点指针指向头节点” 的结构特点,掌握循环链表的遍历、判断空表的方法;
- 双向链表:理解 “前驱指针 + 数据域 + 后继指针” 的结构,掌握双向链表插入、删除时指针的修改逻辑,对比其与单链表在操作效率上的差异;
3. 应用举例:基于顺序表或链表实现 “学生成绩管理模块”,完成成绩的录入、查询、修改、删除功能
1. 用 C 语言实现顺序表的插入、删除操作,提交可运行代码及测试用例(如插入越界、删除空表的异常处理);
2. 用 C 语言实现单链表的创建(尾插法)与按值查找,提交代码及运行结果;
3. 对比分析顺序表与链表在 “插入 1000 个元素”“查找第 500 个元素” 场景下的效率差异
8
3 第 3 章 栈和队列 1. 明确栈 “先进后出”、队列 “先进先出” 的特性,能区分两种结构的适用场景;
2. 熟练用 C 语言实现顺序栈、链栈、顺序队列(循环队列)、链队列,解决实际问题;
3. 能运用栈和队列解决表达式求值、括号匹配等典型问题
1. 栈:
- 掌握栈的定义(限定仅在表尾插入删除的线性表)及基本运算(初始化、压栈、弹栈、取栈顶元素、判空);
- 顺序栈:用 C 语言数组 + 栈顶指针实现,掌握压栈(判断栈满)、弹栈(判断栈空)的代码,理解 “栈溢出” 风险;
- 链栈:用 C 语言结构体(数据域 + 指针域)实现,掌握压栈(头插法)、弹栈(头节点删除)的代码,理解其 “动态扩容” 优势;
2. 队列:
- 掌握队列的定义(限定仅在表尾插入、表头删除的线性表)及基本运算(初始化、入队、出队、取队头元素、判空);
- 顺序队列:理解 “假溢出” 问题,掌握循环队列(用 front 和 rear 指针标识队头队尾)的入队、出队逻辑,能通过公式(rear+1)% maxsize == front 判断队满;
- 链队列:用 C 语言结构体(节点 + 队头队尾指针)实现,掌握入队(尾插法)、出队(头节点删除)的代码;
3. 应用举例:
- 用栈实现 “中缀表达式转后缀表达式” 或 “括号匹配检查”(如判断 “{[a+b]*(c-d)}” 是否合法);
- 用队列实现 “银行排队叫号模拟”,统计客户平均等待时间
1. 提交顺序栈实现 “括号匹配” 的 C 语言代码及测试用例(含合法、不合法括号组合);
2. 提交循环队列实现 “排队叫号模拟” 的 C 语言代码,输出 10 个客户的叫号顺序与等待时间
6
4 第 4 章 串和数组 1. 掌握串的基本概念与操作,能实现串的模式匹配(KMP 算法);
2. 熟练掌握数组的存储结构(行优先 / 列优先),能实现特殊矩阵(对称矩阵、稀疏矩阵)的压缩存储;
3. 能运用串和数组解决文本处理、矩阵运算等问题
1. 串的概念及基本运算:
- 掌握串的定义(由字符构成的有限序列),区分串与字符的差异,理解空串、子串、主串、串的长度等概念;
- 掌握串的基本运算(初始化、赋值、拼接、求子串、比较、判空);
2. 串的存储实现:
- 定长顺序存储:用 C 语言字符数组实现,掌握串的赋值、拼接(判断数组长度是否足够)的代码;
- 链式存储:用 C 语言结构体(字符域 + 指针域)实现,理解其 “存储灵活但空间开销大” 的特点;
3. 模式匹配:理解朴素模式匹配(暴力匹配)的原理,掌握 KMP 算法的核心思想(利用部分匹配表 Next 数组减少回溯),能手动计算简单模式串(如 “ababc”)的 Next 数组,并用 C 语言实现 KMP 算法;
4. 数组:
- 掌握一维数组的定义、初始化与元素访问,理解二维数组的行优先(C 语言默认)、列优先存储方式,能计算数组元素的内存地址(如 a [2][3] 在 int a [5][4] 中的地址);
- 掌握对称矩阵(只存储下三角 / 上三角元素)、稀疏矩阵(三元组表 / 十字链表)的压缩存储方法,能实现稀疏矩阵的转置(基于三元组表);
5. 应用举例:用 KMP 算法实现 “文本查找” 功能(如在一篇英文段落中查找 “data” 出现的位置);用三元组表实现稀疏矩阵的加法运算
1. 提交 KMP 算法实现文本查找的 C 语言代码,测试 “主串 = abcabcabx,模式串 = abcabx” 的匹配结果;
2. 提交稀疏矩阵(三元组表)转置的 C 语言代码,给出原始矩阵与转置矩阵的输出结果
6
5 第 5 章 树和二叉树 1. 掌握树的基本概念与术语,能理解树与二叉树的区别与联系;
2. 熟练掌握二叉树的性质、存储结构(顺序 / 链式)及遍历算法(递归 / 非递归);
3. 能实现树与二叉树的转换,掌握哈夫曼树的构造与哈夫曼编码的生成;
4. 能运用二叉树解决数据组织(如目录结构)、数据压缩等问题
1. 树的定义及相关术语:
- 掌握树的定义(n 个节点的有限集,有且仅有一个根节点,其余节点分属若干子树);
- 理解节点的度、树的度、叶子节点、父节点、子节点、层次、树的深度等术语,能标注简单树的各节点属性;
2. 二叉树:
- 掌握二叉树的定义(每个节点最多有 2 个子树,左子树与右子树有顺序)及 5 个基本性质(如 “第 k 层最多有 2^(k-1) 个节点”);
- 存储结构:用顺序存储(数组,适用于完全二叉树)、链式存储(C 语言结构体:数据域 + 左指针 + 右指针)实现,掌握链式存储的节点定义;
- 遍历算法:掌握先序(根 - 左 - 右)、中序(左 - 根 - 右)、后序(左 - 右 - 根)的递归实现,理解非递归实现(用栈辅助)的逻辑,能根据遍历序列还原二叉树(如已知中序和后序序列求先序序列);
- 其他操作:掌握二叉树的节点个数统计、深度计算、叶子节点统计的递归算法;
3. 树和森林:
- 掌握树的双亲表示法、孩子表示法、孩子兄弟表示法的存储逻辑;
- 掌握树转二叉树(左孩子右兄弟)、森林转二叉树、二叉树还原为树 / 森林的方法,能手动绘制转换后的结构;
4. 哈夫曼树:
- 掌握哈夫曼树的定义(带权路径长度最小的二叉树),理解带权路径长度的计算方法;
- 掌握哈夫曼树的构造步骤(选 2 个最小权值节点合并,重复至 1 个节点),能用 C 语言实现哈夫曼树的构建;
- 掌握哈夫曼编码的生成(左 0 右 1),能为给定字符集(如 a:5,b:3,c:2)生成哈夫曼编码;
5. 应用举例:基于二叉树实现 “文件目录结构” 的遍历(如打印所有文件路径);用哈夫曼编码对一段文本(如 “abacabc”)进行编码与解码
1. 提交二叉树先序、中序、后序递归遍历的 C 语言代码,输出给定二叉树(如根为 A,左子树为 B,右子树为 C)的遍历结果;
2. 手动构造权值为 {2,3,5,7} 的哈夫曼树,计算带权路径长度,并生成各节点的哈夫曼编码
8
6 第 6 章 图 1. 掌握图的基本概念与术语,能区分有向图与无向图、连通图与非连通图;
2. 熟练掌握图的存储结构(邻接矩阵、邻接表)的 C 语言实现;
3. 掌握图的遍历(DFS、BFS)、最小生成树(Prim、Kruskal)、最短路径(Dijkstra)、拓扑排序算法,能应用于实际问题
1. 图的基本概念:掌握图的定义(顶点集 + 边集),理解有向边、无向边、顶点度(入度 / 出度)、邻接点、路径、回路、连通分量、强连通图等术语,能标注简单图的属性;
2. 图的存储表示:
- 邻接矩阵:用 C 语言二维数组实现(无向图矩阵对称,有向图不对称),掌握初始化、添加边、删除边的代码,理解其 “空间复杂度 O (n²)” 的特点;
- 邻接表:用 C 语言结构体(顶点表节点:数据 + 边表指针;边表节点:邻接点下标 + 下一条边指针)实现,掌握初始化、添加边的代码,理解其 “空间复杂度 O (n+e)” 的优势;
3. 图的遍历:
- 深度优先遍历(DFS):理解 “递归 / 栈辅助” 的遍历逻辑,能手动模拟 DFS 遍历顺序,用 C 语言实现基于邻接表的 DFS;
- 广度优先遍历(BFS):理解 “队列辅助” 的遍历逻辑(类似树的层次遍历),能手动模拟 BFS 遍历顺序,用 C 语言实现基于邻接表的 BFS;
4. 最小生成树:
- 理解最小生成树的定义(连通图中权值和最小的生成树,n 个顶点有 n-1 条边);
- 掌握 Prim 算法(从顶点出发,逐步添加最小权值边)、Kruskal 算法(按边权排序,逐步添加不构成回路的边)的步骤,能手动计算简单连通图的最小生成树;
5. 最短路径:掌握 Dijkstra 算法(单源最短路径,适用于非负权边)的步骤,能手动计算从源点到其他所有顶点的最短路径;
6. 拓扑排序:理解拓扑排序的定义(对有向无环图 DAG,按顶点前驱关系排序),掌握 “找入度为 0 的顶点→删除→重复” 的算法步骤,能手动对简单 DAG 进行拓扑排序;
7. 应用举例:用 DFS 实现 “迷宫求解”(输出从入口到出口的路径);用 Dijkstra 算法计算 “城市间最短路径”(如从北京到上海的最短交通路线)
1. 提交基于邻接表的图 DFS 和 BFS 遍历 C 语言代码,输出给定图(如顶点 0-1-2-3 构成的无向图)的遍历序列;
2. 手动计算有向图(顶点 0→1 权 2,0→2 权 5,1→2 权 1)的拓扑排序序列,并用 C 语言实现 Dijkstra 算法,输出源点 0 到各顶点的最短路径
8
7 第 7 章 查找 1. 掌握查找的基本概念,能区分静态查找与动态查找;
2. 熟练掌握线性表查找(顺序、折半、分块)、二叉排序树查找、哈希表查找的 C 语言实现;
3. 能对比不同查找算法的效率,根据实际场景选择合适的查找方法
1. 基本概念与术语:掌握查找、查找表、关键字(主关键字、次关键字)、查找成功 / 失败的定义,理解静态查找表(仅查询,不修改)与动态查找表(查询 + 插入 + 删除)的区别;
2. 线性表查找:
- 顺序查找:掌握 “遍历数组 / 链表逐一比较” 的实现逻辑,用 C 语言实现(含哨兵优化),理解其时间复杂度 O (n);
- 折半查找:掌握 “有序表中二分比较” 的实现逻辑(递归 / 非递归),用 C 语言实现,理解其时间复杂度 O (log₂n) 及 “仅适用于有序顺序表” 的限制;
- 分块查找:理解 “分块有序 + 块内无序” 的结构,掌握 “先找块(折半)→再块内查找(顺序)” 的逻辑,能计算其平均查找长度;
3. 二叉排序树:
- 掌握二叉排序树的定义(左子树关键字<根关键字<右子树关键字);
- 掌握二叉排序树的插入(递归判断左右子树)、删除(叶子节点 / 单孩子节点 / 双孩子节点)、查找的 C 语言实现;
- 理解二叉排序树的查找效率(最好 O (log₂n),最坏 O (n));
4. 哈希表查找:
- 掌握哈希表的定义(通过哈希函数将关键字映射到存储地址)及哈希方法的核心思想;
- 掌握常用哈希函数构造方法(直接定
   
 
 
posted @ 2025-09-01 07:52  kkman2000  阅读(12)  评论(0)    收藏  举报