算法和数据结构
数据结构这门课程是大小计算机系的必修课,很多人第一次接触这门课时,都会觉的数据结构和算法很抽象,晦涩难懂,宛如天书。虽然在大学的时候老师讲的都听明白了,但是毕业后不是专门从事算法相关的工作。所以到现在已经忘记很多了。如果你想让自己的编程能力有质的飞跃,不再停留于调用现成的东西而是追求更完美的实现, 对编程还有追求?不想被行业淘汰?那就不要只会写凑合能用的代码!那么数据结构和算法是你的必修课!
一、什么是数据结构
官方定义:
数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
大部分数据结构和算法的教材,都会给这两个概念明确一下定义, 但是这些定义都很抽象,对理解这两个概念并没有实质性的帮助,反倒会让你陷入死抠定义的误区。
虽然我们说没必要深挖严格的定义,但是这并不等于不需要理解概念。
广义上讲
数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。
狭义上讲
是指某些著名的数据结构和算法,比如队列、栈、二分查找、动态规划等。
二、数据结构和算法的关系
大部分的书和教程都会把数据结构和算法这两个东西放到一起讲,这是因为数据结构和算法是相辅相成的。
数据机构是为算法服务的,算法要作用在特定的数据结构之上。
比如,常用的二分查找算法需要用数组来存储数据,因为数组具有随机访问的特点。但是如果选用链表这种数据结构,二分查找算法就无法工作了,因为链表并不支持随机访问。
数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立的数据结构就是没有用的。
数据结构和算法涵盖的内容
20个最常用的、最基础的数据结构和算法:
10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;
10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
不管是应付面试还是工作需要,只要集中精力逐一攻克这 20 个知识点就足够了。而且掌握了这些基础的数据结构和算法,再去学更加复杂的数据结构和算法,就会非常容易、非常快。
学习数据结构和算法的过程,是非常好的思维训练的过程,所以,千万不要被动的记忆,要多辩证地思考,多问为什么。如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。你的汇编内功就真正得到了修炼。