新書推薦:
《
数据有道:数据分析+图论与网络+微课+Python编程(鸢尾花数学大系:从加减乘除到机器学习)
》
售價:HK$
266.6
《
500万次倾听:陪伤心的人聊聊
》
售價:HK$
53.8
《
英国商业500年(见证大国崛起与企业兴衰,启迪未来商业智慧。)
》
售價:HK$
80.6
《
万千心理·儿童心理治疗中的心智化:临床实践指导
》
售價:HK$
87.4
《
自我囚禁的人:完美主义的心理成因与自我松绑(破除你对完美主义的迷思,尝试打破自我评价过低与焦虑的恶性循环)
》
售價:HK$
66.1
《
周易
》
售價:HK$
44.6
《
东南亚的传统与发展
》
售價:HK$
67.2
《
乾隆制造
》
售價:HK$
87.4
|
編輯推薦: |
本书配套资源丰富,包括教学大纲、教学课件、电子教案、程序源码、在线题库,作者还为本书精心录制了45小时的微课视频。
|
內容簡介: |
本书系统地介绍了常用的数据结构以及查找和排序的算法,阐述了数据结构的逻辑结构、存储表示及基本运算,并采用C 语言描述数据组织和基本运算算法的实现,所有算法程序均在Dev C 5.1中调试通过。 全书既注重原理又注重实践,配有大量图表和示例,内容丰富,概念讲解清楚,表达严谨,逻辑性强,语言精练,可读性好。书中提供了丰富的练习题、上机实验题和在线编程题,配套的《数据结构教程(C 语言描述)(第2版)学习与上机实验指导》辅助教材中详细给出了本书所有练习题和实验题的解题思路和参考答案,《数据结构在线编程实训(C 语言)(全程视频讲解版)》辅助教材中详细给出了所有实战题和在线编程题的解题思路和参考答案(含全部题目的视频讲解)。 本书内容涉及的广度和深度符合普通高等学校计算机及相关专业培养目标的要求,配套教学资源丰富,可作为“数据结构”课程的教材,也可作为从事计算机软件开发和工程应用人员的参考书。
|
關於作者: |
李春葆,计算机学院教授,计算机科学系副主任。主要研究方向:数据库系统、数据挖掘、人工智能和软件工程。发表论文20篇,主持和参加8项科研课题。著作教材11部。从事近30年C/C 语言、数据结构和算法设计等课程的线本科教学工作,具备丰富的教学经验,曾参与深圳名企的笔试和面试题库建设。
|
目錄:
|
第1章绪论
1.1什么是数据结构
1.1.1数据结构的定义
1.1.2数据的逻辑结构
1.1.3数据的存储结构
1.1.4数据的运算
1.1.5数据结构和数据类型
1.2算法及其描述
1.2.1什么是算法
1.2.2算法描述
1.2.3C 语言描述算法的要点
1.3算法分析
1.3.1算法的设计目标
1.3.2算法的时间性能分析
1.3.3算法的存储空间分析
1.4数据结构的目标
1.5练习题
1.5.1问答题
1.5.2算法设计题
1.6上机实验题
1.6.1基础实验题
1.6.2应用实验题
1.7在线编程题
第2章线性表
2.1线性表的定义
2.1.1什么是线性表
2.1.2线性表的抽象数据类型描述
2.2线性表的顺序存储结构
2.2.1线性表的顺序存储结构——顺序表
2.2.2线性表基本运算算法在顺序表中的实现
2.2.3顺序表的应用算法设计示例
2.3线性表的链式存储结构
2.3.1链表
2.3.2单链表
2.3.3单链表的应用算法设计示例
2.3.4双链表
2.3.5双链表的应用算法设计示例
2.3.6循环链表
2.4顺序表和链表的比较
2.5线性表的应用——两个多项式相加
2.5.1问题描述
2.5.2问题求解
2.6STL中的线性表
2.6.1vector向量容器
2.6.2list链表容器
2.7练习题
2.7.1问答题
2.7.2算法设计题
2.8上机实验题
2.8.1基础实验题
2.8.2应用实验题
2.9在线编程题
第3章栈和队列
3.1栈
3.1.1栈的定义
3.1.2栈的顺序存储结构及其基本运算算法的实现
3.1.3顺序栈的应用算法设计示例
3.1.4栈的链式存储结构及其基本运算算法的实现
3.1.5链栈的应用算法设计示例
3.1.6STL中的stack栈容器
3.1.7栈的综合应用
3.2队列
3.2.1队列的定义
3.2.2队列的顺序存储结构及其基本运算算法的实现
3.2.3循环队列的应用算法设计示例
3.2.4队列的链式存储结构及其基本运算算法的实现
3.2.5链队的应用算法设计示例
3.2.6STL中的queue队列容器
3.2.7队列的综合应用
3.2.8STL中的双端队列和优先队列
3.3*栈和队列的扩展——单调栈和单调队列
3.3.1单调栈
3.3.2单调队列
3.4练习题
3.4.1问答题
3.4.2算法设计题
3.5上机实验题
3.5.1基础实验题
3.5.2应用实验题
3.6在线编程题
第4章串
4.1串的定义
4.2串的存储结构
4.2.1串的顺序存储结构——顺序串
4.2.2串的链式存储结构——链串
4.3STL中的string
4.4串的模式匹配
4.4.1BF算法
4.4.2KMP算法
4.5练习题
4.5.1问答题
4.5.2算法设计题
4.6上机实验题
4.6.1基础实验题
4.6.2应用实验题
4.7在线编程题
第5章数组和稀疏矩阵
5.1数组
5.1.1数组的基本概念
5.1.2数组的存储结构
5.1.3数组的应用
5.2特殊矩阵的压缩存储
5.2.1对称矩阵的压缩存储
5.2.2三角矩阵的压缩存储
5.2.3对角矩阵的压缩存储
5.3稀疏矩阵
5.3.1稀疏矩阵的三元组表示
5.3.2稀疏矩阵的十字链表表示
5.4练习题
5.4.1问答题
5.4.2算法设计题
5.5上机实验题
5.5.1基础实验题
5.5.2应用实验题
5.6在线编程题
第6章递归
6.1什么是递归
6.1.1递归的定义
6.1.2何时使用递归
6.1.3递归模型
6.1.4递归与数学归纳法
6.1.5递归的执行过程
6.1.6递归算法的时空分析
6.2递归算法设计
6.2.1递归算法设计的步骤
6.2.2基于递归数据结构的递归算法设计
6.2.3基于归纳方法的递归算法设计
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在线编程题
第7章树和二叉树
7.1树
7.1.1树的定义
7.1.2树的逻辑结构表示方法
7.1.3树的基本术语
7.1.4树的性质
7.1.5树的基本运算
7.1.6树的存储结构
7.2二叉树
7.2.1二叉树的概念
7.2.2二叉树的性质
7.2.3二叉树的存储结构
7.2.4二叉树的递归算法设计
7.2.5二叉树的基本运算算法及其实现
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.5二叉树的构造
7.5.1由先序/中序序列或后序/中序序列构造二叉树
7.5.2*序列化和反序列化
7.6线索二叉树
7.6.1线索二叉树的定义
7.6.2线索化二叉树
7.6.3遍历线索化二叉树
7.7哈夫曼树
7.7.1哈夫曼树的定义
7.7.2哈夫曼树的构造算法
7.7.3哈夫曼编码
7.8树/森林与二叉树之间的转换及还原
7.8.1一棵树与二叉树的转换及还原
7.8.2森林与二叉树的转换及还原
7.9*并查集
7.9.1并查集的定义
7.9.2并查集的实现
7.10练习题
7.10.1问答题
7.10.2算法设计题
7.11上机实验题
7.11.1基础实验题
7.11.2应用实验题
7.12在线编程题
第8章图
8.1图的基本概念
8.1.1图的定义
8.1.2图的基本术语
8.2图的存储结构
8.2.1邻接矩阵
8.2.2邻接表
8.3图的遍历
8.3.1图遍历的概念
8.3.2深度优先遍历
8.3.3广度优先遍历
8.3.4非连通图的遍历
8.4图遍历算法的应用
8.4.1深度优先遍历算法的应用
8.4.2*回溯法及其应用
8.4.3广度优先遍历算法的应用
8.5生成树和小生成树
8.5.1生成树和小生成树的概念
8.5.2普里姆算法
8.5.3克鲁斯卡尔算法
8.6短路径
8.6.1短路径的概念
8.6.2狄克斯特拉算法
8.6.3弗洛伊德算法
8.7拓扑排序
8.7.1什么是拓扑排序
8.7.2拓扑排序算法的设计
8.8AOE网和关键路径
8.8.1什么是AOE网
8.8.2求AOE网的关键路径
8.9练习题
8.9.1问答题
8.9.2算法设计题
8.10上机实验题
8.10.1基础实验题
8.10.2应用实验题
8.11在线编程题
第9章查找
9.1查找的基本概念
9.2线性表的查找
9.2.1顺序查找
9.2.2折半查找
9.2.3索引存储结构和分块查找
9.3树表的查找
9.3.1二叉排序树
9.3.2平衡二叉树
9.3.3*STL中的关联容器
9.3.4B树
9.3.5B 树
9.4哈希表的查找
9.4.1哈希表的基本概念
9.4.2哈希函数的构造方法
9.4.3哈希冲突的解决方法
9.4.4哈希表查找及性能分析
9.4.5*STL中的哈希表
9.5练习题
9.5.1问答题
9.5.2算法设计题
9.6上机实验题
9.6.1基础实验题
9.6.2应用实验题
9.7在线编程题
第10章排序
10.1排序的基本概念
10.2插入排序
10.2.1直接插入排序
10.2.2折半插入排序
10.2.3希尔排序
10.3交换排序
10.3.1冒泡排序
10.3.2快速排序
10.4选择排序
10.4.1简单选择排序
10.4.2堆排序
10.4.3堆数据结构
10.5归并排序
10.5.1自底向上的二路归并排序
10.5.2自顶向下的二路归并排序
10.6基数排序
10.7各种内排序方法的比较和选择
10.8外排序
10.8.1生成初始归并段的方法
10.8.2多路归并方法
10.9练习题
10.9.1问答题
10.9.2算法设计题
10.10上机实验题
10.10.1基础实验题
10.10.2应用实验题
10.11在线编程题
参考文献
|
內容試閱:
|
“数据结构”课程是计算机及相关专业的核心专业基础课,那么什么是数据结构呢?科学百科是这样定义的: “数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往与高效的检索算法和索引技术有关。”
该定义包含两重含义,即数据结构实现和数据结构应用。从数据结构的实现角度看,数据结构是指存在相互关系的数据元素集合,并包含相应的数据运算,在实现时就需要考虑数据的逻辑类型,将这些数据以某种合理方式存储在计算机中,继而高效地实现对应运算的算法。像计算机语言中的数据类型都是已经实现的数据结构。从数据结构的应用角度看,人们不必关心数据的存储和运算的具体实现细节,只需要将其作为一个功能包用于求解更复杂的问题,在适当的抽象层次上考虑程序的结构和算法。理解和掌握数据结构的实现有助于应用数据结构,提高计算机求解问题的能力。
教学内容设计
“数据结构”课程主要以数据的逻辑结构为主线,介绍线性表、栈和队列、树和二叉树、图等数据结构的实现和应用。该课程一方面培养学生基本的数据结构观,即从逻辑层面理解数据结构的逻辑结构特性以及基本运算,继而合理地实现数据结构,使之成为像程序设计语言中那样可以直接使用的数据类型; 另一方面培养学生运用各种数据结构的能力,即针对一个较复杂的数据处理问题,选择合适的数据结构设计出好的求解算法。
本书围绕这两个目标设计教学内容,总结编者长期在教学线的教学研究和教学经验,同时参考近年来国内外出版的多种数据结构教材,考虑教与学的特点,合理地进行知识点取舍和延伸,精心组织编写而成。本书采用C 语言描述数据结构和算法。全书由10章构成,各章内容如下:
第1章绪论。本章介绍数据结构的基本概念、采用C 语言描述算法的方法和特点、算法分析方法和如何设计好算法等。
第2章线性表。本章介绍线性表的定义、线性表的两类主要存储结构和各种基本运算算法设计; 通过多项式相加的示例讨论线性表的应用; 介绍STL中的vector和list容器及其使用方法。
第3章栈和队列。本章介绍栈的定义、栈的存储结构、栈的各种基本运算算法设计和栈的应用,队列的定义、队列的存储结构、队列的各种基本运算算法设计和队列的应用,STL中的stack(栈)、queue(队列)、deque(双端队列)和priority_queue(优先队列)容器及其使用方法。
第4章串。本章介绍串的定义、串的存储结构和串的各种基本运算算法设计,STL中的string容器的使用方法,串的模式匹配算法BF和KMP及其应用。
第5章数组和稀疏矩阵。本章介绍数组的定义、数组的存储结构、几种特殊矩阵的压缩存储和稀疏矩阵的压缩存储。
第6章递归。本章介绍递归的定义、递归模型、递归算法设计和分析方法,以及递归算法转换为非递归算法的一般过程。
第7章树和二叉树。本章介绍树的定义、树的逻辑结构表示方法、树的性质、树的遍历和树的存储结构,二叉树的定义、二叉树的性质、二叉树的存储结构、二叉树的基本运算算法设计、二叉树的递归和非递归遍历算法、二叉树的构造、线索二叉树和哈夫曼树,树/森林和二叉树的转换与还原过程,并查集的定义与实现。
第8章图。本章介绍图的定义、图的存储结构、图的基本运算算法设计、图的两种遍历算法以及图的应用,图的应用包括求小生成树、短路径、拓扑排序和关键路径。
第9章查找。本章介绍查找的定义、线性表上的各种查找算法、各种树表的查找算法,以及哈希表查找算法及其应用、STL中的哈希表容器(如unordered_map和unordered_set)的使用方法。
第10章排序。本章介绍排序的定义、插入排序方法、交换排序方法、选择排序方法、归并排序方法和基数排序方法,以及各种内排序方法比较、外排序的基本过程和相关算法。
教学内容紧扣《高等学校计算机专业核心课程教学实施方案》和《计算机学科硕士研究生入学考试大纲》,涵盖教学方案及考研大纲要求的全部知识点。书中带“*”的章节或示例为选讲或选学内容,难度相对较高,供提高者研习。本书的主要特点如下:
① 结构清晰,内容丰富,文字叙述简洁明了,可读性强。
② 图文并茂,全书用了300多幅图表述和讲解数据的组织结构和算法设计思想。
③ 力求归纳各类算法设计的规律,如单链表算法中很多是基于建表算法,二叉树算法中很多是基于4种遍历算法,图算法中很多是基于两种遍历算法,如果读者掌握了相关的基础算法,那么对于较复杂的算法设计就会驾轻就熟。
④ 深入讨论递归算法设计方法。递归算法设计是数据结构课程中的难点之一,编者从递归模型入手,介绍了从求解问题中提取递归模型的通用方法,讲解了从递归模型到递归算法设计的基本规律。
⑤ 书中提供了大量的教学示例并详细解析,将抽象概念和抽象的算法过程具体化。
⑥ 结合知识点提供了若干相关的实战题,实战题来源于力扣(https://leetcodecn.com/)、POJ(http://poj.org/)和HDU(http://acm.hdu.edu.cn/)网站。
⑦ 与C 语言深度结合,充分利用C 语言的特点实现书中的所有算法,全部算法及其示例均在Dev C 5.1中调试通过。
⑧ 提供了大量的练习题、上机实验题和在线编程题,供教学中选用。
教学实验设计
教学实验是提高利用数据结构原理解决实际问题必不可少的环节,本书将实验教学和理论教学有机结合,构成完整的体系。
① 每章包含基础实验和应用实验。基础实验属于验证性实验,是上机实现相关数据结构或者算法,用于强化对基本数据结构观的认知; 应用实验属于设计或者综合性实验,是利用相关数据结构完成较复杂的算法实现,用于提高运用各种数据结构解决复杂问题的能力。
② 每章包含若干与教学内容紧密结合的、难度适中的在线编程题,所有题目都经过精心挑选,均来自力扣、POJ和HDU网站。力扣(中国)是一个极好的学习和实验在线编程平台,POJ和HDU是目前国内秀的ACM训练网站。每道在线编程题都提供了多个测试用例,可以对实验算法进行时间和空间的全方位测试。
配套教学资源
本书配套的辅助教材为《数据结构教程(C 语言描述)(第2版)学习与上机实验指导》和《数据结构在线编程实训(C 语言)(全程视频讲解版)》,前者提供了所有练习题和上机实验题的解题思路和参考答案,后者提供了所有实战题和在线编程题的解题思路和参考答案(含全部题目的视频讲解),所有程序均在相关平台中验证通过并给出了时间和空间数据。
为了方便教师教学和学生学习,本书提供了全面、丰富的教学资源。配套教学资源包中的内容如下:
① 教学PPT。提供全部教学内容的精美PPT课件,仅供任课教师在教学中使用。
② 源程序代码。所有源代码按章组织,例如ch2文件夹中存放第2章的源代码,其中,ch2\\\\Exam23.cpp为例2.3的源代码。
③ 数据结构课程教学大纲和电子教案。包含54学时课堂讲授的教学内容安排和18学时实验的实验教学内容安排,供教师参考。
④ 在线作业。包括选择题、判断题、填空题、简答题和编程题。
⑤ 书中配套绝大部分知识点的教学视频,视频采用微课碎片化形式组织(含266个小视频,累计超过45小时)。
资源下载提示
课件等资源: 扫描封底的“课件下载”二维码,在公众号“书圈”下载。
素材(源码)等资源: 扫描目录上方的二维码下载。
在线作业: 扫描封底作业系统二维码,登录网站在线做题及查看答案。
视频等资源: 扫描封底刮刮卡中的二维码,再扫描书中相应章节中的二维码,可以在线学习。
本书第2、3、6、7和10章由李春葆编写,第1、4和5章由匡志强编写,第8和9章由蒋林编写,李春葆完成全书的规划和统稿工作。本书的出版得到清华大学出版社魏江江分社长的全力支持,王冰飞老师给予精心编辑,力扣(中国)网站提供了无私的帮助,编者在此一并表示衷心的感谢。尽管编者不遗余力,但由于水平所限,本书难免存在不足之处,敬请教师和同学们批评指正,在此表示衷心的感谢。
编者2021年5月
|
|