前言
作为计算机专业四大基础之一(算法与数据结构、操作系统、计算机网络、计算机组成原理),数据结构和算法的学习一直都是很多大学生的痛点之一,但是只需要掌握了基本的学习路线,整个数据结构的系统就很明确了
这里给大家分享一张自己整理的图,以便于大家理解:
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。在图中我们可以看到,数据结构分为以下几个分类:
1、数组
2、栈
3、队列
4、链表
5、树
6、散列表
7、堆
8、图
算法又分为:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划和字符串匹配算法。
只要掌握了这些基础的数据结构和算法,再学更加复杂的数据结构和算法,就会非常容易、非常快。
而学习数据结构和算法的过程,也是非常好的思维训练的过程,千万不要被动地记忆,要多辩证地思考,多问为什么。
如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。
二
接下来要做的,就是去LeetCode或者一些题本上刷题了,听到这儿,可能有人要问了,学习数据结构和刷题有什么关系呢?
因为我见过太多的小伙伴只是记住了各种树、图的各种概念,而完全不会运用,但在大厂技术面试中,算法是其中必要的一个环节,业务问题可以好好总结总结,但算法就必须依靠牢固的基础和刷题量。
如果算法根基不扎实,不仅难过面试,对于代码性能的提升、编程语言的驾驭也会比别人弱很多。因此,现在算法基础不牢固的同学,都很难通过大厂的面试。但是只靠刷题去提升算法能力,进度太慢,而且还容易抓不住重点。
所以即便是刷题也要刷经典题,举一反三,从一类题抽象出共通的解法,才能以不变应万变,这才是刷题的本质,而不单单是为了刷题而刷题。
除了LeetCode之外,小编这里推荐一本好评如潮的编程题书:《剑指Offer:名企面试官精讲典型编程题(第2版)》
《剑指Offer:名企面试官精讲典型编程题(第2版)》剖析了80个典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这5个面试要点。
以及一份大厂的Java算法面试题:(简单展示)
1、几种常见的排序算法和分别的复杂度
2、用Java写一个冒泡排序算法
3、描述一下链式存储结构
4、如何遍历一颗二叉树
5、倒排一个linkedlist
6、用Java写一个递归遍历目录下面的所有文件
7、二叉树与红黑树
推荐几部算法书籍
本文我们先讲算法,如果你有一定的计算机基础,那么《算法导论》和《算法第四版》都是非常好的书籍。
《算法导论》
《算法导论》(英语:IntroductiontoAlgorithms)是基础算法方面最权威、最详细的著作之一,在很多国际著名大学被用于算法课的教材。诸多算法方面的论文将其列入参考文献当中。
《算法第四版》
本书作为算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述。
几部入门书籍
但是如果是刚进入学校的新生或是对计算机感兴趣的小白,那么这两部就有些晦涩了,建议从入门的书籍开始看起,他们分别是:
《我的第一本算法书》
这是一本算法入门的书,特别适合非专业人士。浅显易懂,图片多,几乎每一步都有图解,直观,易于理解。
《啊哈算法》
本书中涉及栈,队列、树、并查集、堆和图等;算法有各种排序、枚举、深度和广度优先搜索、图的遍历,还有图论中不可以缺少的四种最短路径算法、两种最小生成树算法、制点与割边算法,二分图的最大匹配算法等。
总结
在软件开发行业,从来都是算法先行,次基础,技术为末。这也是程序员从业者金字塔的层级关系,分布数据结构与算法即是互联网大厂的敲门砖,也是开发者精益求精、持续提升的内功基础。
越往上走,你会发现需要了解和掌握的是越接近底层的知识,而这些往往都离不开基础的算法与数据结构。
以上文档领取方式如下:
1、