白话数据结构系列文章目录
基本概念篇
1. 入门概述
2. 复杂度
3. 数组&链表
4. 栈&堆
5. 排序算法
6. 查找算法
编程思想篇
实际问题篇
1. 约瑟夫环
一、前言
数据结构这门课也算是命途多舛,从最早的大学上课完全不听,到找工作时突击准备了下排序和数组链表,到去年十一月花钱买了个课,最后到现在看完了整本的大话数据结构。可算是暂告一段落了,说不上完完全全学会,但也算是勉强入门了吧。
再加上工作两年来收集或总结的一些编程思想,搞个博客写写就当对着整段时间的一个总结和提炼吧。
二、前置条件
C语言基础
三、本文参考资料
大话数据结构
数据结构与算法之美
百度
四、正文部分
4.1 数据结构与算法概念
数据结构是指一组数据的存储结构
算法就是操作数据的方法
数据结构和算法是相辅相成的,数据结构是为算法服务的,而算法要作用在特定的数据结构之上
数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没用的。
4.2 学习目的
不扯那些用于应试或者高大上的说法,收集了一些比较落地的观点
- 直接好处是能够有写出性能更优的代码
- 基础知识就像是一座大楼的地基,它决定了我们的技术高度。而要想快速做出点事情,前提条件一定是基础能力过硬,“内功”要到位。
- 掌握数据结构和算法,不管对于阅读框架源码,还是理解其背后的设计思想,都是非常有用的。
- 算法,是一种解决问题的思路和方法,有机会应用到生活和事业的其他方面。
- 长期来看,大脑思考能力是个人最重要的核心竞争力,而算法是为数不多的能够有效训练大脑思考能力的途径之一
- 学习数据结构和算法的过程,是非常好的思维训练的过程,所以,千万不要被动地记忆,要多辩证地思考,多问为什么。如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。你的编程内功就真正得到了修炼。
4.3 学习重点
数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们就需要一个考量效率和资源消耗的方法,这就是复杂度分析方法。
在学习数据结构和算法的过程中,要学习它的「来历」、「自身的特点」、「适合解决的问题」以及「实际的应用场景」。
- 数据结构和算法学习的精髓-复杂度分析
- 最常用的、最基础的数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树
- 最常用的算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法
4.4 学习方法
- “边学边练”这一招非常有用。每周花 1~2 个小时的时间,集中把这周的三节内容涉及的数据结构和算法,全都自己写出来,用代码实现一遍。
- 可以“适度”刷题,但一定不要浪费太多时间在刷题上。学习的目的还是掌握,然后应用。
- 我们在枯燥的学习过程中,也可以给自己设立一个切实可行的目标
- 学习知识的过程是反复迭代、不断沉淀的过程。
4.5 总知识点
五、总结
数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们就需要一个考量效率和资源消耗的方法,这就是复杂度分析方法。
在学习数据结构和算法的过程中,要学习它的「来历」、「自身的特点」、「适合解决的问题」以及「实际的应用场景」。
学习知识的过程是反复迭代、不断沉淀的过程。
写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。你的编程内功就真正得到了修炼。