一, 先啰嗦几句
码农之路已经过去大半年了. 在此期间, 对于基本的工作已经游刃有余了, 但是经常会油然而生一种搬砖的感觉, 真是 "搬砖", 因为基本上都是把别人 "封装" 好的砖, 按照自己的需求 (砌墙的规则) 组合到一起, 达成某种功能. 一开始把程序写完, 会小有一些成就感, 但是写多了以后心里感觉越来越虚, 因为都是 "拿" 别人的. 都说是不要重复造轮子, 这句话没错, 但你总得知道怎么造吧? 只有这样, 才能不受制于人, 才能站在巨人的肩膀进行创新. 那么就先从最基本的开始, 程序 = 数据结构 + 算法. 数据结构是算法的基础, 那么就先讲数据结构吧.
二, 数据结构的定义
顾名思义, 就是数据的结构, 换句话说也就是数据的组织方式, 不管是哪种组织方式, 最后都是为了用, 也就是相应的数据处理方式. 所以数据结构就是数据的组织方式与其相应的处理.
其中, 数据的组织方式包括线性组织方式, 树型组织方式, 图形组织方式, 还有哈希组织方式. 处理方式包括在当前组织方式上增加, 修改, 删除, 查询数据. 处理方式的性能因组织方式而异.
三, 数据结构的大体分类
1, 线性结构
0 或 1 个直接继或后继. 这就像排队中的人群一样, 前后一个挨着一个. 最常见的就是线性表, 在此基础上做一些限制, 就衍生出了栈和队列, 其是操作受限的线性表
2, 树形结构(非线性结构)
0 到 1 个直接前继和 0 到 n 个直接后继(n 大于等于 2). 最常见的就是二叉树, 当然还有三叉树..n 叉树.
3, 图形结构(非线性结构)
0 到 n 个直接前继和直接后继(n 大于等于 2). 图包括简单图, 有向图, 多重图等
4, 哈希结构(非线性结构)
没有直接前驱和后继. 此结构通过特定的哈希函数将索引和存储的值关联起来, 所以其查找效率特别高
四, 性能问题
当用某种数据结构时, 其性能必须考虑在内. 关于时间的性能叫时间复杂度, 关于此数据结构运行所需要的空间叫空间复杂度. 当数据量比较小的时候可能看不出哪种数据结构的优劣, 可能运行时间和所占空间都差不多, 但是当数据量增长时候, 时间和空间的花费大部分是以非线性方式增长的. 从最好到最坏的复杂度排序如下: 常数级 O(1), 对数级 O(logN), 线性级 O(n), 线性对数级 O(nlogN), 平方级 O(n^2), 立方级 O(n^3), 指数级 O(2^n). 通过图像就可以看出这些量级随着数据规模的增大带来的时间增加情况.
五, 总结
上述所说的数据结构都是纯粹的数据组织方式, 不涉及存储. 这未免有些抽象, 学了就要用. 所以此后我就用 java 源码来阐述从理论到实践的过程.
来源: http://www.bubuko.com/infodetail-2965530.html