JAVA 数据结构 及 基础算法
算法:解决问题的流程/步骤(分支、循环、顺序)
数据结构:将数据按照某种特定的结构来保存
设计良好的数据结构会导致好的算法
凭借一句话获得图灵奖的Pascal之父——Nickcklaus Wirth让他获得图灵奖的这句话就是他提出的著名公式:
“算法+数据结构=程序”。
这个公式对计算机科学的影响程度足以类似物理学中爱因斯坦的“E=M^2”——一个公式展示出了程序的本质。
通俗的说算法相当于相当于逻辑,小部分已为人们发掘出来(这里的小部分指的是书本里讲的各种算法,属于人们对于特定模式抽象出来的核心,比如排序),可以看做一种模式。对应于业务来说,一种逻辑(可能由其他元子逻辑组合而成)一旦确定下来,便可看做常量,固定不变。
数据结构即数据表示,说白了就是数据,比如用户数据,属于互联网玩的主要部分。这里面有一个问题,就是如何合理高效表示数据。为此,人们想出了各种各样的数据结构,比如数组,比如树。还有一点就是代码通用性的考量。对于一个设计良好的数据(结构)来讲,应当可以保证在代码逻辑不变的基础上,功能的增加只需在数据层动点手脚完成:下拉菜单数据中追加一条“详情页”的数据和对应的回调方法,即可完成新菜单项的添加工作。
问题——>数据结构+算法==程序——>解决问题
“算法”->逻辑
“数据结构”->存储
一 、数据结构:逻辑结构、运算结构、存储结构
1 、逻辑结构
分为:线性结构、非线性结构
线性结构 :一维数组、栈、线性表、队列、双队列、串
非线性结构
分为:多维数组、集合、树、图、散列表
2 、运算结构
分为:分支结构、循环结构
分支结构:
if、switch、三目运算符
循环结构:
for、while、do...while、
3 、存储结构
堆栈(先进后出)、队列(先进后出)、数组(随机查询)、链表(增删很简单)
①ArrayList集合
本质是一种可以扩容的数组,增删慢,查询快。数组就是随机存储。
②LinKedList集合
本质是一个链表,增删快,查询慢。
在使用LinKedList集合时,最好使用LinKedList创建对象,不要用多态,因为多态无法使用LinKedLiast的特有功能。
二 、基础算法
八大排序算法:
①直接插入排序
②希尔排序
③堆排序
④冒泡排序
⑤快速排序
⑥归并排序
⑦基数排序
⑧选择排序
及 递归算法