新書推薦:

《
哈布斯堡女皇:玛丽亚?特蕾莎和18世纪欧洲的权力博弈(王权与革命交织的时代,哈布斯堡家族四位权势女性的治国、磨难与沉浮)
》
售價:HK$
140.8

《
首发经济:重塑商业生态与消费未来
》
售價:HK$
64.9

《
中国国家地理 美丽的地球·生命交响(全6册)
》
售價:HK$
624.8

《
前世今生:穿越时空的灵魂伴侣
》
售價:HK$
64.9

《
出瀛海:晚清诗人的海外观察与体验(九州之外,更有瀛海,全球视野下的中外交流史力作! )
》
售價:HK$
63.8

《
制造规则 : 国际标准建立背后的历史与博弈
》
售價:HK$
96.8

《
货币与政府
》
售價:HK$
129.8

《
昨日今朝(网络原名:今朝欢愉)
》
售價:HK$
54.8
|
編輯推薦: |
本书按照循序渐进的顺序讲解了多种常见数据结构的相关定义、实现方式及应用场景,并通过提供配套代码、研读Java源码的方式,让读者能够通过体会代码实现细节的方式加深对各种常见数据结构从理论定义到实践落地过程的理解。本书除了阐述各种常见数据结构的基本定义外,还引申的讲解了常见数据结构内部隐含的特点,使读者能够更加全面地了解各种常见数据结构的特征和优缺点。
|
內容簡介: |
本书按照循序渐进的顺序讲解了多种常见数据结构的相关定义、实现方式及应用场景,并通过提供配套代码、研读Java源码的方式,让读者能够通过体会代码实现细节的方式加深对各种常见数据结构从理论定义到实践落地过程的理解。本书除了阐述各种常见数据结构的基本定义外,还引申的讲解了常见数据结构内部隐含的特点,使读者能够更加全面地了解各种常见数据结构的特征和优缺点。
來源:香港大書城megBookStore,http://www.megbook.com.hk 本书共9章。第1章对数据结构时间、空间效能的评判标准进行讲解。第2章对数组和链表及其引申结构进行讲解。第3章对栈和队列两种基于数组和链表的逻辑结构讲解。第4章对常见的搜索、排序算法进行讲解。第5章对字符串结构及字符串匹配算法进行讲解。第6章对多种常见树形结构及相关算法进行讲解。第7章对堆结构进行讲解。第8章对散列表结构进行讲解。第9章对图结构及其常见算法进行讲解。
本书既适合具有一定Java语言基础的高校学生作为学习数据结构、研究其实现原理的参考书籍,也对具有一定工作经验、需要对不同数据结构之间差异性、内在特征进行研究的人群均有一定参考价值。
|
關於作者: |
塔拉,国家认证的软件开发工程师、Oracle认证的Java开发工程师。毕业于黑龙江大学计算机科学技术专业,毕业后从事软件研发工作,并于2016年正式进入IT教育行业。从业期间曾在多家IT教育机构及高校从事讲师、课程研发工作,至今已授业数百名学员,积累了丰富的教育教学经验,对IT行业教学内容及教育体系有深入了解。从事IT教育行业过程中,作者坚持研究各种应用底层原理与编程思想,在数据结构、通用型算法及设计模式等方面有所心得。
|
目錄:
|
第1章绪论1
1.1时间复杂度1
1.2空间复杂度2
第2章数组与链表3
2.1数组结构4
2.1.1数组的创建与基本操作4
2.1.2数组内存特性分析7
2.1.3内存中的多维数组13
2.2链表结构17
2.2.1基本概念普及17
2.2.2链表内存特性分析19
2.2.3链表衍生结构27
第3章栈和队列54
3.1栈结构55
3.1.1栈结构概述55
3.1.2栈结构的实现55
3.1.3栈结构的应用场景56
3.2队列结构63
3.2.1队列结构概述63
3.2.2队列结构的实现64
3.2.3队列结构的应用场景65
3.2.4队列结构的衍生68
第4章递归、查找与排序73
4.1递归73
4.1.1简单的递归案例74
4.1.2递归结构基础75
4.1.3递归结构进阶78
4.2查找79
4.2.1二分查找79
4.2.2插值查找84
4.2.3斐波那契查找89
4.3排序96
4.3.1排序算法的稳定性96
4.3.2冒泡排序97
4.3.3选择排序101
4.3.4插入排序105
4.3.5希尔排序110
4.3.6归并排序115
4.3.7快速排序123
4.3.8堆排序131
4.3.9计数排序141
4.3.10桶排序147
第5章字符串152
5.1基本概念与实现152
5.1.1字符串的基本概念152
5.1.2Java中的String类153
5.2字符串匹配算法156
5.2.1通用定义156
5.2.2BF算法156
5.2.3RK算法161
5.2.4KMP算法168
5.2.5BM算法183
5.2.6Sunday算法196
第6章树结构203
6.1树结构基础204
6.1.1树的基础概念204
6.1.2树的遍历操作206
6.2二叉树216
6.2.1二叉树的定义216
6.2.2二叉树的基本性质217
6.2.3满二叉树和完全二叉树217
6.2.4二叉树的遍历操作219
6.2.5通过深度优先遍历序列构建二叉树230
6.2.6树、森林与二叉树的转换238
6.3哈夫曼树与哈夫曼编码译码器248
6.3.1哈夫曼树的构建248
6.3.2获取明文字符的哈夫曼编码249
6.3.3文本编码与译码250
6.4线索二叉树与Morris遍历250
6.4.1线索二叉树的节点定义方式251
6.4.2二叉树的线索化251
6.4.3线索二叉树的遍历261
6.4.4二叉树的Morris遍历274
6.5二叉排序树286
6.5.1二叉排序树的结构特点286
6.5.2二叉排序树的增删查找287
6.5.3二叉排序树退化为单链表的情况295
6.6平衡二叉树(AVL树)296
6.6.1AVL树节点的旋转方式296
6.6.2节点增删导致不平衡的情况304
6.6.3AVL树与平衡二叉树的对比307
6.7234树308
6.7.1234树的结构特点308
6.7.2234树的增删查找310
6.8红黑树318
6.8.1红黑树的平衡策略与染色规则318
6.8.2234树向红黑树的转换319
6.8.3红黑树的节点增删与结构调整323
6.9B树与B 树338
6.9.1B树结构338
6.9.2B 树结构339
6.9.3B树与B 树在实际应用方面的区别341
6.10字典树(Trie树)344
6.10.1字典树的结构特点344
6.10.2字典树的基本功能与实现方式346
6.10.3字典树的时间复杂度与空间复杂度357
6.11树状数组358
6.11.1前置知识: 非负整数的lowBit操作358
6.11.2树状数组的构建方式359
6.11.3树状数组的基本操作364
6.11.4差分数组与基本操作367
第7章堆结构378
7.1堆结构基础379
7.2二叉堆380
7.2.1二叉堆的存储方式与特性380
7.2.2二叉堆的元素添加操作381
7.2.3二叉堆的堆顶元素删除操作383
7.2.4二叉堆与TopK问题386
7.3左式堆与斜堆387
7.3.1左式堆388
7.3.2斜堆395
7.4二项堆401
7.4.1二项树结构401
7.4.2二项堆的结构特点404
7.4.3二项堆的合并操作405
7.4.4二项堆的元素添加操作409
7.4.5二项堆的堆顶元素删除操作412
第8章散列表416
8.1散列表的基本概念417
8.2散列函数的常见实现方式420
8.2.1前置知识: 整数的模运算421
8.2.2直接定址法425
8.2.3除留余数法425
8.2.4数字分析法426
8.2.5平方取中法427
8.2.6折叠法427
8.2.7随机数法428
8.2.8全域散列法428
8.3散列表常见实现方式429
8.3.1开放地址法实现散列表430
8.3.2链地址法实现散列表434
8.3.3完全散列的实现434
8.4散列表的平均查找长度437
8.5Java中的散列表440
8.5.1Java中的hashCode()与equals()方法440
8.5.2HashMap类与HashSet类443
第9章图结构448
9.1图结构基础449
9.1.1图的基础概念449
9.1.2图的表示方式453
9.1.3图的遍历操作456
9.2无向带权图的最小生成树问题461
9.2.1普里姆算法462
9.2.2克鲁斯卡尔算法465
9.2.3普里姆算法与克鲁斯卡尔算法的比较468
9.3有向带权图的最短路径问题469
9.3.1迪杰斯特拉算法求解有向带权图的单源最短路径469
9.3.2弗洛伊德算法求解有向带权图的多源最短路径473
9.4AOV网和拓扑排序问题479
9.5AOE网和关键路径问题484
参考文献489
|
內容試閱:
|
当今的世界上有数十亿甚至上百亿的电子设备正在运行,这其中包括了手机、计算机、平板电脑、游戏设备、智能家居、智能穿戴设备及自动驾驶汽车等电子产品。可以毫不夸张地说,有电子产品的地方就一定有编程语言;有编程语言的地方就一定有数据结构。因此,数据结构的相关知识已经成为IT行业从业者或者准从业者必不可少的专业技能之一。
数据结构是一门用来研究如何在计算机内存中高效组织、存储和管理数据的学科,数据结构提供了一种抽象的方式来描述数据的逻辑关系和操作方式。数据结构涉及各种不同的结构类型,例如数组、链表、栈、队列、树、图等。每种数据结构都有其独特的特点和适用场景。通过选择合适的数据结构可以有效地组织和操作数据,提高程序的效率和性能。
同时数据结构还是算法分析与设计的前置知识。例如在对一组数据执行排序、查找等算法之前,首先需要通过数据结构的相关知识,实现对这些数据进行规律性存储等,而类似的案例在算法的实际开发场景中比比皆是。由此可见,数据结构和算法关联密切,一个高效的算法往往需要建立在合适的数据结构基础之上。了解数据结构的特点和性能能够帮助算法工程师设计出更加高效和可扩展的算法。
学习数据结构的重要性
学习数据结构的重要性体现在许多方面。
第一,在国内高等教育的计算机相关专业课程体系当中,数据结构及其课程设计通常被设置为专业必修课程。这其中,课程理论部分会为学生讲解常见数据结构的基本原理、使用场景及操作方式等内容,而课程设计部分则要求学生根据已经学习的数据结构理论知识,结合一门编程语言进行具体实现,通过实践的方式加强学生对数据结构相关知识的理解与掌握。以此而言,在国内的计算机高等教育阶段,对数据结构这一学科的重视程度是非常高的。
第二,在国内计算机方向研究生考试的多数初试命题体系中,数据结构占据了较高的分值。此外,一些高校的计算机研究生在复试过程中,还会要求考生对一些数据结构和相关基础算法进行上机实现,以此判断考生是否已经达到进一步研究计算机高级知识的学术水平。由此可见,数据结构在国内计算机方向的研究生考试中同样占据着重要地位。
第三,对于IT行业的从业者或者准从业者来讲,经常会在笔试、面试的环节当中遇到数据结构及相关算法的内容。面试官不仅能通过面试者对于数据结构及相关算法的掌握程度,判断出面试者对计算机相关理论知识的掌握是否充足,而且还能够以此对面试者的逻辑思维能力做出相应的评价,并且在进入开发岗位后,在对一些底层核心业务的实现过程中,同样需要数据结构的相关知识,对代码的运行时间、运行空间进行优化,因此,数据结构在从业就业和实际开发领域同样具有举足轻重的地位。
综合上述诸多方面的因素,不论是计算机相关专业的在校学生,还是已经进入行业的IT从业者都应该重视对数据结构相关知识的掌握,并具备对相关理论知识进行动手实践的能力。
如何学习数据结构
从传统的学术角度来讲,数据结构这一学科对于理论知识的学习要求尤为突出,但是就计算机科学领域整体而言,任何一门理论知识存在的目的及最终价值都能够通过编程语言进行落地实现,并以此解决一些在实际开发过程中遇到的问题。因此,如果想要全面、扎实地掌握数据结构这一学科的相关内容,则至少应该做到如下两点。
第一,有顺序、成体系地学习数据结构的理论知识。在数据结构的知识体系中,很多知识点之间存在逻辑上的先后学习顺序。例如在学习常见的查找算法和排序算法之前,应该首先掌握数据批量存储结构的相关知识;在对树结构的相关知识进行研究之前,则至少应该了解链式存储结构的相关内容等。除此之外,数据结构本身又是一门体系性极强的学科,其中一些理论知识是对其他理论知识的优化与补充,因此在对数据结构的学习过程中决不能断章取义、以点带面,必须在对一个问题所涉及的相关知识进行全面理解与掌握后才能对其进行整体层面上的审视与分析。因此,本书对知识点的讲解顺序进行了一定的编排,力求能使读者循序渐进地对本书的理论内容全面地进行了解。
第二,通过理论与实践相结合的方式对数据结构的相关知识进行学习。前面提到在计算机领域当中,任何一门理论知识存在的最终价值都需要通过代码落地、解决实际问题的方式进行体现,数据结构也不例外。通过程序语言对具体的数据结构及相关算法进行实现不仅对理论知识的理解与掌握大有裨益,而且这一过程还能有效地提升实现者的逻辑思维能力。为了方便广大读者进行讨论与研究,本书以目前主流编程语言中的Java语言为基础对本书所讨论的绝大部分数据结构及相关算法进行了实现。需要注意的是,虽然本书提供了相关的配套代码,但是因为笔者水平的局限,配套代码仅用于简单的效果展示与流程说明。如果需要将示例代码的内容用于实际生产场景,则需读者根据具体的业务逻辑要求自行更改。
资源下载提示
源码等资源: 扫描目录上方的二维码下载。
致谢
值此本书出版之际,请允许我谨以本书作者的身份对所有帮助我、支持我的团体及个人致以诚挚的谢意。
首先我要向刘学愚老师表达谢意。如果没有刘老师的深刻启发与谆谆教诲,我也不会想到要将这些知识总结整理成文字,也就更不会有本书的问世。
其次还要感谢我所在工作单位的各位领导与同事。本书编写时间较长,是你们在此期间不断支持我、鼓励我,并在我写书期间始终不离不弃,解决了我所有的后顾之忧。
第三还要向我的三位学生邓云飞、李光敏、杨杰(排名不分先后)致以谢意。感谢三位同学在本书校对期间做出的卓越贡献。祝愿你们在未来的IT从业之路上不断精进、大展宏图。
最后还要向本书的所有读者致以谢意,感谢各位读者对本书的鼓励与支持。
因本人水平有限,书中难免存在不妥之处,还请各位读者见谅并提出宝贵意见。
塔拉2024年11月于哈尔滨
|
|