很久没有更新文章了,后面准备连载一个关于《数据结构与算法》的系列教程,喜欢的同学记得分享转发。

1、第一印象

(1)复杂、深奥、难学?

一提到数据结构与算法,大家对它的第一印象就是:复杂、深奥、难学。其实,大家之所以这么认为的原因主要是没有找到正确的学习资料和学习方法。

(2)不常用?

还有一些同学认为,数据结构和算法在平时的项目开发中不常用,不懂数据结构和算法同样可以应对相应的工作。这是因为很多人“面向接口编程”、“面向百度编程”。其实,并不是工作中用不到,而是还没有达到那个层次。

我们在项目开发中很多东西都是使用第三方框架来完成的。其实,在很多第三方框架底层都大量使用了数据结构与算法。如果你能灵活掌握数据结构和算法的话,你便可以更好地去阅读这些框架的源码,也能更好地体会框架的设计思想,进而更好地去使用这些框架。

当你的用户达到一定程度(如上百万、上千万、上亿)的时候,你必然会用到数据结构与算法。

2、Why数据结构与算法?

  • 名企面试必考,它考验的是一个人的技术功底和长期积累
  • 有利于写出性能更高的程序
  • 有助于快速学习新技术
  • 一次掌握,终生受益
  • 数据结构与算法功底扎实的程序员,技术实力、业务能力和自学能力一般都不会差。

Pascal之父Nicklaus Wirth凭借 “算法 + 数据结构 = 程序” 这一公式获得图灵奖(计算机领域的诺贝尔奖)。

3、应用场景

(1)数据库

database

无论你目前使用的是什么数据库,其底层一定用到了B树、哈希表等数据结构。

(2)游戏开发

game

像英雄联盟这样的游戏,其开发过程中肯定会用到图和最短路径算法等数据结构与算法。

(3)区块链和比特币

qkl bitb

区块链和比特币的底层也大量使用了链表、二叉树、哈希函数等数据结构与算法。

(4)AI、VR和自动驾驶

ai vr autoDriver

人工智能、虚拟现实和自动驾驶等技术在实现过程中也大量使用了数据结构与算法。

4、Why Java?

学好数据结构与算法,与编程语言无关,最重要的是学思想、学思路。 我们既可以使用C语言,也可以使用C++、Java等编程语言具体实现。本教程使用Java进行讲解,建议使用Java8JDK1.8)及以上版本。

为什么我们选择Java而不选择其他编程语言呢?

  • C:面向过程,非面向对象,写法复杂,大量内存管理代码。
  • C++:写法复杂,大量内存管理代码。
  • Objective-C、Swift:需要Mac系统。
  • JavaScript、Python:依赖脚本解析器,同一逻辑使用不同写法会影响代码性能,影响算法性能测评。
  • Java:
    (1)面向对象,语法丰富严谨,我们可以将更多的精力放在业务逻辑上。
    (2)Windows和Mac系统均可轻松搭建Java开发环境。

5、课程大纲

  • **第一阶段:**侧重于常用的经典数据结构(如:二叉树、哈希表、Trie等)。
first
  • **第二阶段:**侧重于更高级的数据结构(如:图、并查集、跳表、布隆过滤器等)与各种算法(如:排序、KMP、贪心、分治、动态规划等)。
second
  • **第三阶段:**侧重于LeetCode和算法真题(如:海量数据处理、字符串处理等)。

    **注:**对于所有的数据结构,我们都将从零开始一步一步地去实现。这样才有利于大家真正地掌握数据结构,才有利于大家理解数据结构底层的原理和逻辑。

附:数据结构和算法可视化网站

6、开发环境

6.1 选择开发工具

(1)Eclipse(或IntelliJ IDEA)

两者均支持Windows和Mac系统。目前,Java企业级开发中用的比较多的是IDEA,因为它的集成环境非常强大。 **本教程采用的是Eclipse,**主要是因为它:

  • 简洁、明了。
  • 多个项目可以在同一窗口展示。
  • 本教程中不会使用到后台开发的框架。

Eclipse的下载地址为:https://www.eclipse.org/downloads/

(2)JDK

  • 版本不低于1.8。

JDK的下载地址为:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html

6.2 搭建步骤

(1)安装JDK

a. 双击java安装包,根据提示点击下一步:

b. 设置JDK的安装路径。

c. 处理告警信息。

由于最近JDK大版本更新比较快,2019年1月起官方停止维护1.8版本(不用担心,仍可放心使用),此时会出现如下图所示告警信息。

d. 点击“确定”按钮后,设置JRE的安装路径。

注:之前文章里也说过,JRE是用于运行时的包,它是JDK的一部分。

e. 安装完成,关闭窗口。

f. 验证是否安装成功。

输入命令行java -version,若可以看到JDK的版本信息(1.8.0_181),则说明安装成功。

注:JDK 1.8及以后的版本在安装完成后会自动添加环境变量。 所以网上那些还要强调配置的文章,要么是老的JKD版本,已经过时了;要么是想当然,没有实际的安装。

(2)安装Eclipse

a. 双击Eclipse安装包,在弹出界面上选择安装包。

我们这里选择第一个Eclipse IDE for Java Developers。

b. 选择安装目录。

c. 接受用户协议。

d. 接受许可证。

e. 接受证书。

f. 安装完成后,点击“启动”按钮。

g. 设置工作目录。

完成以上步骤,我们便可进入eclipse的开发界面了。

6.3 初识开发环境(大神请跳过)

(1)打开安装好的Eclipse,点击欢迎界面右上角的“Workbench”按钮进入工作台。

(2)为了方便写代码,我们打开Eclipse代码助手的自动提示功能,并将工作空间的编码方式改为“UTF-8”。具体操作步骤如下:

a. 打开 Eclipse → Window → Perferences窗口,设置Java → Editor → Content Assist属性。

Auto activation trigger for Java的默认值是一个“.”,即:只有输入“.”之后才会有代码提示,我们要修改的地方就是这里。我们只需将字符串“abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.”复制并覆盖粘贴到“.”上(不要用键盘输入)即可。

b. 为了方便代码移植,我们将工作空间的编码方式改为“UTF-8”。

(3)新建一个名称为test的“Java Project”项目。

(4)再新建一个名称为Main的类。

注:为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。 **包可以理解为文件夹,包名即文件夹名。**我们一般将域名反过来写作为包名。

(5)在Main类中写一个程序的入口函数:main方法。

main.java

1
2
3
4
//Java中的方法是依赖于类的,必须先有类,才能有方法
public static void main(String[] args) {
System.out.println("Hello Java!");
}

(6)运行该程序,结果如下图所示。

(本讲完,系列博文持续更新中…… )

阿汤笔迹微信公众平台

关注 “阿汤笔迹” 微信公众号,获取更多学习笔记。
原文地址:http://www.atangbiji.com/2020/05/04/beforeLearningDataStructure/
博主最新文章在个人博客 http://www.atangbiji.com/ 发布。