# 第一章 数据结构与算法认识与理解
## 1、数据结构
**程序=数据结构+算法;** 数据结构通过算法实现操作,算法根据数据结构设计程序
程序是语言,而数据结构与算法相当于语法。
**1、什么是数据结构**:数据的逻辑结构,存储结构,运算
逻辑结构包括线性结构和非线性结构
存储结构包括链式存储结构和顺序存储结构
运算包括插入、删除、排序、修改、检索等
## 2、算法分析
### 1、必须具备的五个特性
确定性、有穷性、可行性、输入、输出
### 2、算法设计的要求
正确性、可读性、健壮性、高效性
| **正确性** | **程序对于精心选择的、典型、苛刻且带有刁难性的几组输入数据能够得出满足要求的结果。** |
| :--------- | ------------------------------------------------------------ |
| **可读性** | **算法应该让人容易理解** |
| **健壮性** | **考虑错误的存在,如果出错,算法能第一时间作出反应并进行处理** |
| **高效性** | **花费尽量少的时间和尽量低的存储空间** |
### 3、算法效率
1、时间效率:**算法运行时间=一个简单操作所需的时间✖简单操作次数**
**=∑每条语句的执行次数✖该语句执行一次所需的时间**
算法的时间复杂度:是由嵌套最深层语句的频度决定的。语句频度=每条语句的执行次数。
其中T(n)=O(1)为常量阶;T(n)=O(n)为线性阶;T(n)=O(n²)为平方阶;T(n)=O(log2n)为对数阶;T(n)=O(log2n)为线性对数阶。
$$
T(n)=O(f(n))
$$
最好时间复杂度:最好情况下算法的时间复杂度。
最坏时间复杂度:最坏情况下算法的时间复杂度。
平均时间复杂度:在所有可能情况下按照输入实例以等概率出现时,算法的期望运行时间。
2、空间效率:算法的空间复杂度:算法所需存储空间的度量,由算法在实现时所需的辅助空间决定。
$$
S(n)=O(f(n))
$$