《图解Java数据结构与算法:微课视频版》简介

本书系统、全面地介绍数据结构的基础理论与算法设计,精选数据结构考研习题和各类典型例题进行讲解,案例和课后习题丰富,突出对数据结构算法实践能力的培养。本书算法均采用Java语言实现,示例代码可直接上机运行。

本书配套资源丰富,包括示例源码、PPT课件、教学视频、教学大纲、习题与答案等。

本书共分11章,内容包括数据结构与算法概述,线性表,栈和队列,串、数组和广义表,树,图,查找算法,排序算法,分治算法,贪心算法,回溯算法。

本书适合Java数据结构初学者,可作为高等院校计算机、软件工程等相关专业数据结构课程的教材,也可作为计算机软件开发、准备计算机专业研究生考试、参加各类算法竞赛、准备计算机软件资格考试的人员的参考用书。

本书目录

第1章  数据结构与算法概述 1

1.1  为什么要学习数据结构 1

1.2  基本概念和术语 2

1.3  数据的逻辑结构与存储结构 4

1.3.1  逻辑结构 4

1.3.2  存储结构 5

1.4  抽象数据类型及其描述 6

1.4.1  什么是抽象数据类型 6

1.4.2  抽象数据类型的描述 6

1.5  算法 8

1.5.1  数据结构与算法的关系 9

1.5.2  什么是算法 9

1.5.3  算法的5个特性 9

1.5.4  算法的描述 10

1.6  算法分析 11

1.6.1  算法设计的4个目标 11

1.6.2  算法效率评价 12

1.6.3  算法的时间复杂度 13

1.6.4  算法的空间复杂度 16

1.7  学好数据结构的秘诀 17

1.8  小结 19

第2章  线性表 20

2.1  线性表的定义及抽象数据类型 20

2.1.1  线性表的定义 20

2.1.2  线性表的抽象数据类型 21

2.2  线性表的顺序表示与实现 22

2.2.1  线性表的顺序存储 22

2.2.2  顺序表的基本运算 23

2.2.3  基本操作性能分析 26

2.2.4  顺序表应用举例 27

2.3  线性表的链式表示与实现 30

2.3.1  单链表的存储结构 30

2.3.2  单链表上的基本运算 32

2.3.3  单链表应用举例 36

2.3.4  循环单链表 38

2.3.5  双向链表 41

2.4  一元多项式的表示与相乘 44

2.4.1  一元多项式的表示 44

2.4.2  一元多项式相乘 45

2.5  小结 49

第3章  栈与队列 50

3.1  栈的表示与实现 50

3.1.1  栈的定义 50

3.1.2  栈的抽象数据类型 51

3.1.3  顺序栈 52

3.1.4  链栈 56

3.2  栈的应用 59

3.2.1  数制转换 59

3.2.2  行编辑程序 60

3.2.3  算术表达式求值 61

3.3  栈与递归 67

3.3.1  递归 68

3.3.2  消除递归 71

3.4  队列的表示与实现 73

3.4.1  队列的定义 73

3.4.2  队列的抽象数据类型 73

3.4.3  顺序队列 74

3.4.4  顺序循环队列 76

3.4.5  双端队列 79

3.4.6  链式队列 79

3.4.7  链式队列的实现 81

3.5  队列在杨辉三角中的应用 82

3.5.1 什么是杨辉三角 82

3.5.2  构造队列 83

3.5.3  杨辉三角队列的实现 83

3.6  小结 85

第4章  串、数组与广义表 86

4.1  串的定义及抽象数据类型 86

4.1.1  什么是串 86

4.1.2  串的抽象数据类型 87

4.2  串的存储表示 88

4.2.1  串的顺序存储结构 88

4.2.2  串的链式存储结构 89

4.3  串的模式匹配 90

4.3.1  朴素模式匹配算法——Brute-Force 90

4.3.2  改进算法—KMP算法 92

4.3.3  模式匹配应用举例 98

4.4  数组的定义及抽象数据类型 99

4.4.1  数组的基本概念 99

4.4.2  数组的抽象数据类型 100

4.4.3  数组的顺序存储结构 100

4.4.4  特殊矩阵的压缩存储 101

4.4.5  稀疏矩阵的压缩存储及典型应用 104

4.5  广义表 111

4.5.1  什么是广义表 111

4.5.2  广义表的抽象数据类型 112

4.5.3  广义表的头尾链表表示 113

4.5.4  广义表的扩展线性链表表示 113

4.6  小结 115

第5章  树和二叉树 116

5.1  树的定义和抽象数据类型 116

5.1.1  树的定义 116

5.1.2  树的逻辑表示 118

5.2  二叉树的定义、性质和抽象数据类型 118

5.2.1  二叉树的定义 119

5.2.2  二叉树的性质 120

5.2.3  二叉树的抽象数据类型 122

5.2.4  二叉树的存储表示 123

5.3  二叉树的遍历 125

5.3.1  二叉树遍历的定义 126

5.3.2  二叉树的先序遍历 126

5.3.3  二叉树的中序遍历 128

5.3.4  二叉树的后序遍历 130

5.4  二叉树的线索化 132

5.4.1  二叉树的线索化定义 132

5.4.2  二叉树的线索化算法实现 133

5.4.3  线索二叉树的遍历 135

5.4.4  线索二叉树的应用举例 137

5.5  树、森林与二叉树 139

5.5.1  树的存储结构 139

5.5.2  树转换为二叉树 142

5.5.3  森林转换为二叉树 143

5.5.4  二叉树转换为树和森林 143

5.5.5  树和森林的遍历 144

5.6  并查集 145

5.6.1  并查集的定义 145

5.6.2  并查集的实现 146

5.6.3  并查集的应用 149

5.7  哈夫曼树 151

5.7.1  哈夫曼树的定义 151

5.7.2  哈夫曼编码 152

5.7.3  哈夫曼编码算法的实现 153

5.8  小结 158

第6章  图 159

6.1  图的定义与相关概念 159

6.1.1  图的定义 159

6.1.2  图的相关概念 160

6.1.3  图的抽象数据类型 162

6.2  图的存储结构 163

6.2.1  邻接矩阵表示法 163

6.2.2  邻接表表示法 168

6.2.3  十字链表 172

6.2.4  邻接多重表 173

6.3  图的遍历 174

6.3.1  图的深度优先遍历 174

6.3.2  图的广度优先遍历 178

6.4  图的连通性问题 179

6.4.1  无向图的连通分量与生成树 180

6.4.2  最小生成树 181

6.5  有向无环图 187

6.5.1  AOV网与拓扑排序 187

6.5.2  AOE网与关键路径 190

6.6  最短路径 196

6.6.1  从某个顶点到其他顶点的最短路径 196

6.6.2  每一对顶点之间的最短路径 202

6.7  小结 206

第7章  查找 208

7.1  查找的基本概念 208

7.2  静态查找 209

7.2.1  顺序表的查找 209

7.2.2  有序顺序表的查找 211

7.2.3  索引顺序表的查找 213

7.3  动态查找 215

7.3.1  二叉排序树 215

7.3.2  平衡二叉树 221

7.4  B-树与B+树 227

7.4.1  B-树 227

7.4.2  B+树 233

7.5  哈希表 233

7.5.1  哈希表的定义 234

7.5.2  哈希函数的构造方法 234

7.5.3  处理冲突的方法 235

7.5.4  哈希表的查找与分析 237

7.5.5  哈希表应用举例 238

7.6  小结 242

第8章  排序 243

8.1  排序的基本概念 243

8.2  插入排序 244

8.2.1  直接插入排序 244

8.2.2  折半插入排序 246

8.2.3  希尔排序 246

8.2.4  插入排序应用举例 247

8.3  选择排序 248

8.3.1  简单选择排序 248

8.3.2  堆排序 249

8.4  交换排序 254

8.4.1  冒泡排序 254

8.4.2  快速排序 256

8.4.3  交换排序应用举例 258

8.5  归并排序 261

8.6  基数排序 263

8.6.1  基数排序算法 263

8.6.2  基数排序应用举例 266

8.7  小结 269

第9章  分治算法 271

9.1  分治算法的基本思想 271

9.2  求最大子序列的和 274

9.3  求x的n次幂 277

9.4  众数问题 278

9.5  求n个数中的最大者和最小者 280

9.6  整数划分问题 283

9.7  大整数乘法 285

9.8  小结 290

第10章  贪心算法 291

10.1  贪心算法的思想 291

10.2  找零钱问题 293

10.3  背包问题 295

10.4  删数问题 299

10.5  加油站问题 301

10.6  小结 302

第11章  回溯算法 303

11.1  回溯算法的基本思想 303

11.1.1  问题的解空间 304

11.1.2  回溯算法的基本思想 305

11.2  装载问题 307

11.3  旅行商问题 310

11.4  和式分解问题 314

11.5  小结 317

参考文献 318

课后习题(电子版见下载) 319

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/181636.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自由飞翔之小鸟

一、创建文件、包、类、插入图片文件 二、app包 1、Gameapp类(运行游戏) package app;import main.GameFrame;public class Gameapp {public static void main(String[] args) {//游戏的入口new GameFrame();} } 三、main包 1、Barrier(障…

Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式

目录 IDEA第一课(熟悉里面内容) 建立连接 -RequestMapping 路由映射 请求 1.传递单个参数​编辑 2.多个参数​编辑 3.传递数组 4.传递一个集合,但是这里我们传递的时候发生了500的错误 简单介绍JSON 回顾Cookie和S…

Docker 中OpenResty下载与使用

1Panel安装OpenResty 查看到就说明安装成功 部署项目 在http中添加: server { listen 8001; //端口号 server_name localhost; location / { root /admin; //项目路径 index index.html index.htm; …

python appiumn 自动化测试 入门

资源下载 链接:https://pan.baidu.com/s/1zl1yXYna73RAL-V0PQ9xHA 提取码:syjg 安装JDK 不详细说了 配置Android SDK 新建 ANDROID_HOME配置对应的SDK路径 新增PATH 安装python库 pip install Appium-Python-Client报如图错误的话可以使用 pytho…

【SpringCloud】为什么选择微服务?

一般的平台会遇到的问题: 服务配置复杂。基础服务多,服务的资源配置复杂,传统方式管理服务复杂 服务之间调用复杂。检索服务、用户中心服务等,服务之间的调用复杂,依赖多 服务监控难度大。服务比较多,…

前端实现菜单快速检索的功能

前端CSS <style type"text/css">.btn-box {color: #fff;width: auto;border-radius: 25px;min-width: 40px;height: 40px;margin: 9px;line-height: 40px;display: inline-block;position: relative;overflow: hidden;background-image: linear-gradient(315de…

Spark-06:共享变量

目录 1.广播变量&#xff08;broadcast variables&#xff09; 2.累加器&#xff08;accumulators&#xff09; 在分布式计算中&#xff0c;当在集群的多个节点上并行运行函数时&#xff0c;默认情况下&#xff0c;每个任务都会获得函数中使用到的变量的一个副本。如果变量很…

为何越来越多的程序员纷纷转行网络安全?

目前&#xff0c;我国IT行业的人才结构不断升级&#xff0c;公司对程序员的要求越来越高&#xff0c;出现了大量的裁员现象&#xff0c;导致很多的程序员纷纷想转行的想法。 可能对于早期的程序员而言&#xff0c;学好编程语言就能找到比较好的工作。而现在伴随着互联网的不断发…

vue - - - - - vue-qr插件生成二维码

vue-qr插件生成二维码 1. 安装插件2. 组件使用示例图&#xff1a;扫码结果 1. 安装插件 【vue-qr 官网地址】 npm install vue-qr --save // or yarn add vue-qr --save2. 组件使用 <template><vue-qr :logo-src"logoSrc":size"237":margin&qu…

03-详细介绍Stream及其常用API

Stream API Stream API(java.util.stream)把真正的函数式编程风格引入到Java中,可以极大地提高程序员生产力&#xff0c;让程序员写出高效、简洁的代码 实际开发中项目中多数数据源都是来自MySQL、Oracle等关系型数据库,还有部分来自MongDB、Redis等非关系型数据库 从关系型…

Exception in thread “消费者“ java.lang.IllegalMonitorStateException

这两天学习生产者消费者模型的时候&#xff0c;使用Java线程来实现&#xff0c;出现了一个问题“Exception in thread "消费者" java.lang.IllegalMonitorStateException”&#xff0c;并且&#xff0c;线程不结束。报错图片如下&#xff1a; 那我们怎么解决呢&…

Selenium(12):层级定位_通过父元素找到子元素

层级定位 在实际的项目测试中&#xff0c;经常会遇到无法直接定位到需要选取的元素&#xff0c;但是其父元素比较容易定位&#xff0c;通过定位父元素再遍历其子元素选择需要的目标元素&#xff0c;或者需要定位某个元素下所有的子元素。 层级定位的思想是先定位父对象&#xf…

二叉树题目:具有所有最深结点的最小子树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;具有所有最深结点的最小子树 出处&#xff1a;865. 具有所有最深结点的最小子树 难度 5 级 题目描述 要求 给定…

【史上最细教程】一台服务器上搭建2个MySQL实例

史上最细教程-一台服务器上搭建2个MySQL实例 文章目录 史上最细教程-一台服务器上搭建2个MySQL实例环境准备&#xff1a;操作步骤&#xff1a;1.安装MySQL2.配置搭建3306、3307实例3.初始化3306、3307实例、远程连接访问支持 推荐文章&#xff1a; 环境准备&#xff1a; 服务器…

考过了PMP,面试的时候应该怎么办?

近期喜番在后台收到了很多同学们的私信&#xff0c;表示自己已经过了8月份的PMP考试&#xff0c;开始着手往项目管理岗位转型&#xff0c;但是对于项目管理岗位的面试却一筹莫展。放轻松&#xff0c;大家的需求喜番都了解了&#xff0c;喜番给大家总结了一些项目经理在面试的时…

护法革命:CIMIVO+SOTUY洗前发膜让发丝重获“芯”生

爱美之心人皆有之,经常烫染或者是在太阳下暴晒,都会对发丝造成一定的伤害,一旦发丝受损,就会导致发芯内部角蛋白流失、化学键连接断裂,进而出现各种发质问题。为此,日本知名化妆品集团NABOCUL旗下发芯修护引领品牌ENNEO创新研发两大核心成分:CIMIVO、SOTUY,能够从根源修护发芯内…

CLion安装与配置教程

目录 一、下载并安装CLion1、下载1、官网&#xff1a;2、注意&#xff1a; 2、安装1、下载完成后&#xff0c;直接点击安装包安装&#xff0c;即可。2、开始安装&#xff0c;然后下一步3、可以在此处自定义地址&#xff0c;然后下一步4、根据系统版本选择&#xff0c;然后下一步…

C#开发的OpenRA游戏之属性Selectable(9)

C#开发的OpenRA游戏之属性Selectable(9) 在游戏里,一个物品是否具有选中的能力,是通过添加属性Selectable来实现的。当一个物品不能被用户选取,那么就不要添加这个属性。 这个属性定义在下面这段描述里: ^Selectable: Selectable: SelectionDecorations: WithSpriteCon…

网络安全入门教程(非常详细)从零基础入门到精通

网络安全是一个庞大而不断发展的领域&#xff0c;它包含多个专业领域&#xff0c;如网络防御、网络攻击、数据加密等。介绍网络安全的基本概念、技术和工具&#xff0c;逐步深入&#xff0c;帮助您成为一名合格的网络安全从业人员。 一、网络安全基础知识 1.计算机基础知识 了解…

[点云分割] Clustering of Pointclouds into Supervoxels

介绍 “Clustering of Pointclouds into Supervoxels” 是一种点云数据聚类的方法&#xff0c;用于将点云数据分割成具有相似特征的超体素&#xff08;supervoxel&#xff09;。 超体素是一种在点云数据中表示连续区域的方法&#xff0c;类似于像素在图像中表示连续区域。超体…