第一章 数据结构绪论
    程序设计=数据结构+算法
    数据-数据对象-数据元素-数据项(最小结构)
    数据结构:是相互之间存在一种或多种特定关系的数据元素的集合
    逻辑结构
    存储结构(物理结构):指数据的逻辑结构在计算机中的存储形式。
    顺序存储结构
    链式存储结构
    逻辑结构是面向问题的,而物理结构就是面向计算机的,其基本的目标就是将数据及其逻辑关系存储到计算机的内存中。
    抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。
    抽象数据类型把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来。
    第二章 算法
    算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
    算法具有五个基本特性:输入、输出、有穷性、确定性和可行性。
    算法有零个或者是多个输入
    算法有一个或者多个输出
    有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。现实中经常会写出死循环的代码,这就是不满足有穷性
    确定性
    可行性
    一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:
    1.算法采用的策略、方法。
    2.编译产生的代码质量。
    3.问题的输入规模。
    4.机器执行指令的速度。
    测定运行时间最可靠的方法:计算对运行时间有消耗的基本操作的次数
    函数的渐进增长
    判断一个算法的效率时,主项(最高次项)的阶数是最重要的
    2.9 算法的时间复杂度
    T(n) = O(f(n))
    T(n)总的执行次数
    n问题规模
    f(n)问题规模n的某个函数
    它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度
    这样用大写O( )来体现算法时间复杂度的记法,我们称之为大O记法
    推导大O阶
    常用的时间复杂度所耗费的时间从小到大依次是:
    O(1)最差情况和平均情况
    运行时间,一般指最坏情况的运行时间
    时间复杂度,一般都指最坏时间复杂度
    算法空间复杂度 S(n) = O(f(n))
    若算法执行所需要的辅助空间相对于输入数据量而言是一个常数,则称该算法为原地工作