1、程序的本质
程序是为了实际的问题而存在从本质上而言,程序是解决问题的步骤描述。
数据结构起源
计算机从解决数值计算问题到解决生活中的问题
现实生活中的问题涉及不一样个体间的复杂联系
须要在计算机程序中描述生活中个体间的联系
数据结构主要研究非数值计算程序问题中的操做对象以及它们之间的关系
数据结构中的概念:
数据 – 程序的操做对象,用于描述客观事物
数据的特色:能够输入到计算机;能够被计算机程序处理
数据元素 – 组成数据的基本单位
数据项:一个数据元素由若干数据项组成
数据对象 – 性质相同的数据元素的集合
数据的逻辑结构
集合结构:数据元素之间没有特别的关系,仅同属相同集合
线性结构:数据元素之间是一对一的关系
树形结构:数据元素之间存在一对多的层次关系
图形结构:数据元素之间是多对多的关系
数据存储的物理结构
物理结构:逻辑结构在计算机中的存储形式
顺序存储结构:将数据存储在地址连续的存储单元里
链式存储结构:将数据存储在任意的存储单元里,经过保存地址的方式找到相关联的数据元素
2、程序的灵魂-算法
数据结构只是静态的描述了数据元素之间的关系
高效的程序须要在数据结构的基础上设计和选择算法
算法的定义:
算法是特定问题求解步骤的描述
在计算机中表现为指令的有限序列
算法是独立存在的一种解决问题的方法和思想。
算法的特性:
输入:算法具备0个或多个输入
输出:算法至少有1个或多个输出
有穷性:算法在有限的步骤以后会自动结束而不会无限循环
肯定性:算法中的每一步都有肯定的含义,不会出现二义性
可行性:算法的每一步都是可行的
算法设计的准则:
正确性
算法对于合法数据可以获得知足要求的结果
算法可以处理非法输入,并获得合理的结果
算法对于边界数据和压力数据都能获得知足要求的结果
正确性是算法最须要知足的基本的准则,可是做为计算机程序,不可能无限制的知足这条准则。
可读性
算法要方便阅读,理解和交流
健壮性
算法不该该产生莫名其妙的结果
高性价比
利用最少的时间和资源获得知足要求的结果
算法效率的度量
大O表示法
算法效率严重依赖于操做(Operation)数量
在判断时首先关注操做数量的最高次项
操做数量的估算能够做为时间复杂度的估算
算法的空间复杂度:
算法的空间复杂度经过计算算法的存储空间实现
S(n) = O(f(n))
其中,n为问题规模,f(n)为在问题规模为n时所占用存储空间的函数
大O表示法一样适用于算法的空间复杂度
当算法执行时所须要的空间是常数时,空间复杂度为O(1)
空间与时间的策略
多数状况下,算法执行时所用的时间更使人关注
若是有必要,能够经过增长空间复杂度来下降时间复杂度
同理,也能够经过增长时间复杂度来下降空间复杂度算法