-
内容大纲
本书是《数据结构教程(第6版·微课视频·题库版)》(李春葆主编,清华大学出版社出版,简称《教程》)的配套在线编程实训指导书,详细给出了《教程》中所有在线编程题(共143道在线编程题,均来自LeetCode网站)的解题思路和参考源代码,提供了全部题目的讲解视频。书中在线编程题不仅涵盖数据结构课程的基本知识点,还融合了各个知识点的运用和扩展,学习、理解和借鉴这些参考答案是掌握和提高数据结构知识的最佳途径。本书自成一体,可以脱离《教程》单独使用。
本书适合高等院校计算机及相关专业学生使用,也适合IT企业面试者和编程爱好者研习。 -
作者介绍
李春葆,武汉大学计算机学院教授。主要研究方向为数据挖掘和算法设计,先后主持和参加多个大型研究项目。主要为本科生讲授数据结构(15年以上)和软件工程等课程,为研究生讲授软件开发新技术、数据仓库与数据挖掘等课程,并出版十多部精品著作。 -
目录
配套资源
第1章 绪论
1.1 LeetCode网站在线编程说明
1.2 基础算法设计
1.2.1 LeetCode7——整数反转★
1.2.2 LeetCode66——加一★
1.2.3 LeetCode1——两数之和★
1.2.4 LeetCode1588——所有奇数长度子数组的和★
第2章 线性表
2.1 顺序表及其应用
2.1.1 顺序表的实现
2.1.2 LeetCode67——二进制求和★
2.1.3 LeetCode27——移除元素★
2.2 有序顺序表及其应用
2.2.1 LeetCode26——删除有序数组中的重复项★
2.2.2 LeetCode80——删除有序数组中的重复项Ⅱ★★
2.2.3 LeetCode88——合并两个有序数组★
2.2.4 LeetCode4——寻找两个正序数组的中位数★★★
2.3 链表的实现
2.3.1 LeetCode707——设计链表★★
2.3.2 LeetCode382——链表随机结点★★
2.4 单链表及其应用
2.4.1 LeetCode203——移除链表元素★
2.4.2 LeetCode237——删除链表中的结点★
2.4.3 LeetCode206——翻转链表★
2.4.4 LeetCode92——翻转链表Ⅱ★★
2.4.5 LeetCode328——奇偶链表★★
2.4.6 LeetCode86——分隔链表★★
2.4.7 LeetCode24——两两交换链表中的结点★★
2.4.8 LeetCode876——链表的中间结点★
2.4.9 LeetCode234——回文链表★
2.4.10 LeetCode143——重排链表★★
2.4.11 LeetCode147——对链表进行插入排序★★
2.4.12 LeetCode25——k个一组翻转链表★★★
2.4.13 LeetCode725——分隔链表★★
2.5 有序单链表及其应用
2.5.1 LeetCode83——删除有序链表中的重复元素★
2.5.2 LeetCode82——删除有序链表中的重复元素Ⅱ★★
2.5.3 LeetCode21——合并两个有序链表★
2.5.4 LeetCode23——合并k个升序链表★★★
第3章 栈和队列
3.1 栈的实现
3.1.1 LeetCode1381——设计一个支持增量操作的栈★★
3.1.2 LeetCode155——最小栈★
3.2 栈的应用
3.2.1 STL中的stack栈容器
3.2.2 LeetCode20——有效的括号★
3.2.3 LeetCode1249——移除无效的括号★★
3.2.4 LeetCode946——验证栈序列★★
3.2.5 LeetCode1441——用栈操作构建数组★
3.3 表达式求值
3.3.1 LeetCode150——逆波兰表达式求值★★
3.3.2 LeetCode227——基本计算器Ⅱ★★
3.3.3 LeetCode224——基本计算器★★★
3.4 队列的实现
3.4.1 LeetCode622——设计循环队列★★
3.4.2 LeetCode641——设计循环双端队列★★
3.5 栈和队列相互实现
3.5.1 STL中的queue队列容器
3.5.2 LeetCode225——用队列实现栈★
3.5.3 LeetCode232——用栈实现队列★
第4章 串
4.1 基本串操作
4.1.1 LeetCode125——验证回文串★
4.1.2 LeetCode14——最长公共前缀★
4.1.3 LeetCode443——压缩字符串★★
4.2 串模式匹配
4.2.1 LeetCode28——实现strStr()★
4.2.2 LeetCode459——重复的子字符串★
4.2.3 LeetCode1408——数组中的字符串匹配★
第5章 递归
5.1 简单递归算法设计
5.1.1 LeetCode509——斐波那契数★
5.1.2 LeetCode50——Pow(x,n)★★
5.1.3 LeetCode206——翻转链表★
5.1.4 LeetCode234——回文链表★
5.1.5 LeetCode24——两两交换链表中的结点★★
5.2 复杂递归算法设计
5.2.1 LeetCode59——螺旋矩阵Ⅱ★★
5.2.2 LeetCode51——n皇后
第6章 数组和矩阵
6.1 数组
6.1.1 LeetCode485——最大连续1的个数★
6.1.2 LeetCode169——多数元素★
6.1.3 LeetCode283——移动零★
6.2 矩阵
6.2.1 LeetCode867——转置矩阵★
6.2.2 LeetCode1572——矩阵对角线元素的和★
6.2.3 LeetCode566——重塑矩阵★
6.2.4 LeetCode766——托普利茨矩阵★
第7章 树和二叉树
7.1 二叉树的先序、中序和后序遍历
7.1.1 二叉树的存储结构及其创建
7.1.2 LeetCode144——二叉树的先序遍历★★
7.1.3 LeetCode94——二叉树的中序遍历★★
7.1.4 LeetCode145——二叉树的后序遍历★★
7.2 二叉树的层次遍历
7.2.1 LeetCode102——二叉树的层次遍历★★
7.2.2 LeetCode107——二叉树的层次遍历Ⅱ★★
7.3 二叉树遍历算法的应用
7.3.1 LeetCode872——叶子相似的树★
7.3.2 LeetCode617——合并二叉树★
7.3.3 LeetCode236——二叉树的最近公共祖先★★
7.3.4 LeetCode226——翻转二叉树★
7.3.5 LeetCode114——二叉树展开为链表★★
7.3.6 LeetCode104——二叉树的最大深度★
7.3.7 LeetCode111——二叉树的最小深度★
7.3.8 LeetCode993——二叉树的堂兄弟结点★
7.3.9 LeetCode515——在每个树行中找最大值★
7.3.10 LeetCode513——找树左下角的值★
7.3.11 LeetCode101——对称二叉树★
7.3.12 LeetCode662——二叉树最大宽度★★
7.3.13 LeetCode112——路径总和★
7.3.14 LeetCode257——二叉树的所有路径★
7.3.15 LeetCode113——路径总和Ⅱ★★
7.4 二叉树的构造
7.4.1 LeetCode105——从先序与中序遍历序列构造二叉树★★
7.4.2 LeetCode106——从中序与后序遍历序列构造二叉树★★
7.4.3 LeetCode889——根据先序和后序遍历序列构造二叉树★★
7.4.4 LeetCode654——最大二叉树★★
7.4.5 LeetCode100——相同的树★
7.4.6 LeetCode572——另一棵树的子树★
7.5 树
7.5.1 树的存储结构
7.5.2 LeetCode589——N叉树的先根遍历★
7.5.3 LeetCode429——N叉树的层序遍历★★
第8章 图
8.1 图的基本应用
8.1.1 图的存储结构
8.1.2 LeetCode997——找到小镇的法官★
8.1.3 LeetCode1615——最大网络秩★★
8.2 图遍历及其应用
8.2.1 LeetCode200——岛屿数量★★
8.2.2 LeetCode547——省份数量★★
8.2.3 LeetCode785——判断二分图★★
8.2.4 LeetCode130——被围绕的区域★★
8.2.5 LeetCode1091——二进制矩阵中的最短路径★★
8.2.6 LeetCode994——腐烂的橘子★★
8.2.7 LeetCode542——01矩阵★★
8.2.8 LeetCode934——最短的桥★★
8.2.9 LeetCode797——所有可能的路径★★
8.3 最小生成树
8.3.1 LeetCode1584——连接所有点的最小费用★★
8.3.2 LeetCode684——冗余连接★★
8.3.3 LeetCode1631——最小体力消耗路径★★
8.4 最短路径
8.4.1 LeetCode743——网络延迟时间★★
8.4.2 LeetCode1334——阈值距离内邻居最少的城市★★
8.5 拓扑排序
8.5.1 LeetCode207——课程表★★
8.5.2 LeetCode210——课程表Ⅱ★★
8.5.3 LeetCode1462——课程表Ⅳ★★
第9章 查找
9.1 二分查找及其应用
9.1.1 LeetCode240——搜索二维矩阵Ⅱ★★
9.1.2 LeetCode704——二分查找★
9.1.3 LeetCode35——搜索插入位置★
9.1.4 LeetCode34——在有序数组中查找元素的第一个和最后一个
位置★★
9.1.5 LeetCode33——搜索旋转有序数组★★
9.1.6 LeetCode81——搜索旋转有序数组Ⅱ★★
9.1.7 LeetCode162——寻找峰值★★
9.1.8 LeetCode4——寻找两个正序数组的中位数★★★
9.2 二叉排序树及其应用
9.2.1 LeetCode96——不同的二叉排序树★★
9.2.2 LeetCode95——不同的二叉排序树Ⅱ★★
9.2.3 LeetCode700——二叉排序树中的搜索★
9.2.4 LeetCode450——删除二叉排序树中的结点★
9.2.5 LeetCode235——二叉排序树的最近公共祖先★
9.2.6 LeetCode98——验证二叉排序树★★
9.2.7 LeetCode938——二叉排序树的范围和★
9.3 平衡二叉树及其应用
9.3.1 STL中的map和set容器
9.3.2 LeetCode110——平衡二叉树★
9.3.3 LeetCode1382——将二叉排序树变平衡★★
9.3.4 LeetCode826——安排工作以达到最大收益★★
9.3.5 LeetCode414——第三大的数★
9.4 哈希表及其应用
9.4.1 STL中的unordered_map容器
9.4.2 LeetCode705——设计哈希集合★
9.4.3 LeetCode146——LRU缓存机制★★
9.4.4 LeetCode215——数组中的第k个最大元素★★
9.4.5 LeetCode380——以常数时间插入、删除和获取随机元素★★
第10章 内排序
10.1 基本排序方法
10.1.1 LeetCode1528——重新排列字符串★
10.1.2 LeetCode912——排序数组★★
10.2 快速排序的应用
10.2.1 STL中的sort()排序算法
10.2.2 LeetCode148——排序链表★★
10.2.3 LeetCode922——按奇偶排序数组Ⅱ★
10.3 二路归并排序的应用
10.3.1 LeetCode148——排序链表★★
10.3.2 剑指Offer51——数组中的逆序对★★★
10.3.3 LeetCode315——计算右侧小于当前元素的个数★★★
10.3.4 LeetCode493——翻转对★★★
10.4 堆(优先队列)的应用
10.4.1 STL中的priority_queue容器
10.4.2 LeetCode973——最接近原点的k个点★★
10.4.3 LeetCode295——数据流的中位数★★★
10.4.4 LeetCode239——滑动窗口中的最大值★★★
10.5 topk问题
10.5.1 剑指Offer40——最小的k个数★
10.5.2 LeetCode215——数组中的第k个最大元素★★
10.5.3 LeetCode703——数据流中的第k大元素★
10.5.4 LeetCode347——前k个高频元素★★
10.6 基数排序及其应用
10.6.1 LeetCode75——颜色分类★★
10.6.2 LeetCode164——最大间距★★★
附录A 所有在线编程题目列表
附录B 在线编程实验报告示例
同类热销排行榜
- C语言与程序设计教程(高等学校计算机类十二五规划教材)16
- 电机与拖动基础(教育部高等学校自动化专业教学指导分委员会规划工程应用型自动化专业系列教材)13.48
- 传感器与检测技术(第2版高职高专电子信息类系列教材)13.6
- ASP.NET项目开发实战(高职高专计算机项目任务驱动模式教材)15.2
- Access数据库实用教程(第2版十二五职业教育国家规划教材)14.72
- 信号与系统(第3版下普通高等教育九五国家级重点教材)15.08
- 电气控制与PLC(普通高等教育十二五电气信息类规划教材)17.2
- 数字电子技术基础(第2版)17.36
- VB程序设计及应用(第3版十二五职业教育国家规划教材)14.32
- Java Web从入门到精通(附光盘)/软件开发视频大讲堂27.92
推荐书目
-
孩子你慢慢来/人生三书 华人世界率性犀利的一枝笔,龙应台独家授权《孩子你慢慢来》20周年经典新版。她的《...
-
时间简史(插图版) 相对论、黑洞、弯曲空间……这些词给我们的感觉是艰深、晦涩、难以理解而且与我们的...
-
本质(精) 改革开放40年,恰如一部四部曲的年代大戏。技术突变、产品迭代、产业升级、资本对接...