概念:什么是数据结构,什么是算法
数据结构:数据元素之间的关系
算法:算法就是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列列,并且每个指令表示⼀一个或多个操作
数据结构是为算法服务的,算法要作用在特定的数据结构之上。因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。
有了大致的定义后,我们再来细说数据结构和算法
数据结构
<table border="1" >
<tr>
<td colspan="8" align="center">数据结构</td>
</tr>
<tr>
<td colspan="6" align="center">逻辑结构</td>
<td colspan="2" align="center">存储结构</td>
</tr>
<tr>
<td colspan="3" align="center">线性结构</td>
<td colspan="3" align="center">非线性结构</td>
<td rowspan="2" align="center" valign="middle">顺序存储结构</td>
<td rowspan="2" align="center" valign="middle">链式存储结构</td>
</tr>
<tr>
<td>线性表</td>
<td>栈和队列</td>
<td>字符串</td>
<td>集合结构</td>
<td>树结构</td>
<td>图结构</td>
</tr>
</table>
几种常见的逻辑结构
对于⾮空的线性表和线性结构,其特点如下:
- 存在唯一的⼀个被称作”最后一个"的数据元素
- 除了了第一个之外,结构中的每个数据元素均有一个前驱
- 除了了最后⼀个之外,结构中的每个数据元素都有一个后继
算法
特性:
- 输入输出 (有0个或者一个输入 至少有一个输出)
- 有穷性 (算法需要在有限的 执行次数 和执行时间下获得结果)
- 确定性 (算法中每一条指令必须有确切的含义,不会产生二义性。即对于相同的输入只能得出相同的输出)
- 可行性 (一个算法是可行的,即算法中描述的操作都是吋以逋过已经实现的基本运算执行有限次来实现的。)
设计要求:
- 正确性 (算法应当能够正确地解决求解问题)
- 可读性 (算法应当具有良好的可读性,以助于人们理解)
- 健壮性 (当输入非法数据时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果)
- 时间效率高、储存量低 (效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关)
执行效率:
时间复杂度 用大O表示法O(n)
-
空间复杂度 记做: S(n) = n(f(n)),其中,n为问题的规模,f(n)为语句句关于n所占存储空间的函数
时间复杂度和空间复杂度不涉及到具体的时间和空间执行效率,O(n)表示的是一种随着数据的增长,复杂度的增长趋势
几种常见的复杂度 排序从低到高
术语 | 表示 |
---|---|
常数阶 | O(1) |
对数阶 | O(log n) |
线性阶 | O(n) |
线性对树阶 | O(nlogn) |
平方阶 | O(n²) |
立方阶 | O(n³) |
指数阶 | O(2ⁿ) |
阶乘阶 | O(n!) |
n次方阶 | O(nⁿ) |
画个图感受下: