起初人们解决的主要是数值计算的问题,把现实中的问题抽象出来,得到数学模型,设计算法编写程序来解决。
但是,除了数值计算的问题,还有诸如对于图,表,树等数据结构的处理。
数据结构:研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作的学科。
程序设计 = 数据结构 + 算法
1.1 数据
数据:包含整型,实型等数值类型,字符,声音,图像,视频等非数值类型
1.2 数据元素
组成数据的一组有意义的基本单位,在计算机中通常作为整体处理,也被称为记录。
1.3 数据项
数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位。
1.4 数据对象
数据元素具有相同的数量和类型的数据项
1.5 数据结构
是相互存在的一种或多种特定关系的数据元素的集合
1.6 逻辑结构与物理结构
逻辑结构面向问题,物理结构面向计算机的存储。
逻辑结构: 是指数据的对象中元素之间的相互关系。

  • 集合结构
  • 线性结构
  • 树形结构
  • 图形结构

逻辑结构:是数据的逻辑结构在计算机中的存储形式

  • 顺序存储结构:放在地址连续的存储单元里
  • 链式存储结构:加上额外的指针来进行寻址

在C语言中,按照取值的不同,数据类型可以分两类:原子类型,结构类型

算法评估

事后分析,事前分析
这里主要讨论事前分析法:

  • 算法所采取的策略,方法
  • 编译产生的代码质量(软件)
  • 问题的输入规模
  • 机器执行指令的速度(硬件)

    算法的时间复杂度

    O(1):常数阶 O(n):线性阶 O(n^2):平方阶 O(logn):对数阶

    最坏时间复杂度与算法空间复杂度

    最坏时间复杂度就是从最坏的角度和概率的视角评估时间复杂度的
    原地工作算法:指辅助空间对于与输入的数据量是一个常数,譬如数组反转算法:
    数据结构起源 - 图1
    1. //中间变量法
    2. #include <iostream>
    3. #include<array>
    4. using namespace std;
    5. int main()
    6. {
    7. int i,t;
    8. array <int,7> a={1,2,3,4,5,6,7};
    9. for(i=0;i<a.size()/2;i++)
    10. {t=a[i];
    11. a[i]=a[a.size()-1-i];
    12. a[a.size()-1-i]=t;
    13. }
    14. for(i=0;i<a.size();i++)
    15. cout << a[i]<<",";
    16. }
    借助一个变量t,无论输入规模有多大,t相对于输入来讲在空间的利用上是常数级别的。