数据结构是计算机专业的同学必学的课程
数据结构研究的是数据如何在计算机进行组织和存储,使得我们可以高效的获取数据或者修改数据。
数据结构可以分为三种结构:
线性结构:
数组;栈;队列;链表;哈希表
树结构:
二叉树,二分搜索树,AVL,红黑树,Treap,Splay,堆,Trie,线段树,K-D树,并查集,哈夫曼树
图结构
邻接矩阵,邻接表
例子:
1,数据库,
它已经封装好了,使用SQL语言就可以使用数据库,
SELECT * FROM 慕课网
WHERE interest = "数据结构"
里面最重要的是使用树结构:AVL,红黑树,Treap,伸展树,B树,
还有很重要的哈希表
2,操作系统
涉及非常多的数据结构,1个例子,多任务切换,涉及:
系统栈,递归调用就需要系统栈
优先队列:堆。 有了优先队列,操作系统才可以快速在多个任务之间比较他们的优先级,实现任务的切换
3,文件压缩
不只是RAR,计算机中的PNG,MP3,PDF都是对不同的文件进行了一定的压缩处理,
最基础的压缩算法使用的是哈夫曼树,
哈夫曼树很简单,现在软件已经不用了
4,通讯录,
当时使用的链表,但是联系人非常多时,查找特别慢,
最后这个问题被实习生解决,方法很简单,
Trie,前缀树。
这样,在通讯录查找任何人都是ms级别,不管你有多少联系人
大量的算法,以数据结构为基石
如,游戏中的寻路算法,是图论算法,
DFS深度优先遍历:使用栈,
BFS广度优先遍历:使用队列
数据结构+算法 = 程序
1,面向面试:
数组,栈,队列,链表,二分搜索树,堆,
最简单,是面试笔试的常客,要达到手写代码的程序,
最后,AVL,红黑树,哈希表,
AVL和红黑树本身都是平衡二叉树的实现,
哈希表是非常常用的数据存储结构
放在最后是因为他们比较复杂,代码量大一些
面试时不要求实现他们,都是概念和性能分析上的问题,
如红黑树书平衡的但是不是完全平衡的,所以有很多和性能分析相关的问题,
哈希表和冲突检测相关就有很多性能分析问题
java 8,是最稳定版本
现在已经退出了java 10,由于java 8是普遍使用的,所以建议用它,
课程代码本身对java语言版本没有太多要求,用不上太多java的新特性,java 6以后都没问题,
JDK用java 8
IDE用IJ,非常好用,在jetbrains, tools->IDES->IntelliJ IDEA
在慕课网有课程:IntelliJ IDEA神器使用技巧