数据结构与算法
数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。
数据结构和算法是相辅相成的。数据结构是为算法服务的,算法作用在特定的数据结构之上。 因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。
数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没用的。
为什么要学数据结构与算法
程序=数据结构+算法。数据结构和算法是程序的基础,没有系统地学习过数据结构和算法的程序员只能称作是coder,知道我们写的代码使用了什么数据结构,它的特征是什么。知道解决某些问题是用的何种算法才会从coder晋升为工程师。
编程者如果没有掌握数据结构与算法,就说明没有真正掌握程序设计的能力,也就是没有真正的学会编程。 从编程的角度来看,数据结构与算法几乎是最朴素的基础知识了,这一关,是每一个立志当好程序员的必经之路。
另外,大厂面试数据结构和算法也是我们绕不过去的一个门槛。这部分恰好又不是突击能够解决的知识储备,所以很有必要系统地学习一下数据结构和算法了。
数据结构与算法的重要性不言而喻,下面就一起来探索下其中的奥秘吧!
目录
内容概述
笔记是有关计算机编程中所应用的数据结构和算法。数据结构是指数据在计算机存储空间中(或磁盘中)的安排方式。算法是指软件程序用来操作这些结构中的数据的过程。
几乎所有的计算机程序都使用数据结构和算法,即使最简单的程序也不例外。比如设想一个打印地址标签的程序,这个程序使用一个数组来存储地址,并且使用一个简单的 for循环来遍历数组,打印每一个地址。
在上面例子中的数组就是一个数据结构,用for 循环来顺序访问该数组,这就构造了一个简单的算法。对于一个仅有少量数据的简单程序来说,上述的这种方法已经足够了。但是如果用程序来处理中等规模以上的数据或解决那些不太平常的问题时,就需要用一些更加复杂的技术来应付它们。仅仅知道诸如Java或C++等计算机语言的语法是远远不够的。
笔记提供了学完一门编程语言后进一步需要知道的知识。所涵盖的内容通常作为大学或学院中计算机系二年级的课程,掌握了编程的基础后才开始学习。
综述
数据结构和算法能起到什么作用?
数据结构的概述
算法的概述
一些定义面向对象
编程软件工程
对于C++程序员的Java
Java数据结构的类库
数组
Java中数组的基础知识
将程序划分成类
类接口
有序数组的Java代码
对数
存储对象
大О表示法
为什么不用数组表示一切?
简单排序
如何排序?
冒泡排序
选择排序
插入排序
对象排序
简单排序的比较
栈和队列
不同的结构类型栈
队列
优先级队列
解析算术表达式
链表
链结点
单链表
查找和删除指定链结点
双端链结点
链表的效率
抽象数据类型
有序链表
双向链表
迭代器
递归
三角数字
阶乘
变位字
递归的二分查找
汉诺塔
归并排序
消除递归
一些有趣的递归应用
高级排序
希尔排序
划分
快速排序
基数排序
二叉树
为什么使用二叉树?
树的术语
类比
二叉搜索树如何工作?
查找节点
插入节点
遍历树
查找最大值和最小值
删除节点
二叉树的效率
用数组表示树
重复关键字
完整的tree.java程序
哈夫曼编码
红—黑树
本章讨论的方法
平衡树和非平衡树
用专题applet试验
旋转
插入一个新节点
删除
红-黑树的效率
红-黑树的实现
其他平衡树
2-3-4树和外部存储
2-3-4树的介绍
2-3-4树的Java
代码2-3-4树和红-黑树
2-3-4树的敕率
2-3树
外部存储
哈希表
哈希化简介
开放地址法
链地址法
哈希函数
哈希化的效率
哈希化和外部存储
堆
堆的介绍
堆的Java 代码
基于树的堆
堆排序
图
图简介
搜索
最小生成树
有向图的拓扑排序
有向图的连通性
带权图
带权图的最小生成树
最短路径问题
每一对顶点之间的最短路径问题
效率
难题
应用场合
通用数据结构
专用数据结构
排序
图
外部存储