数据结构读书笔记(一) 线性表、静态链表、栈

基本概念

  1. 数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称。

  2. 数据元素:数据(集合)中的一个“个体”,数据及结构中讨论的基本单位。

  3. 数据项:数据的不可分割的最小单位。一个数据元素可由若干个数据项组成。

  4. 数据类型:在一种程序设计语言中,变量所具有的数据类型。整型、浮点型、字符型等。

  5. 数据结构:一个有穷的结点集合D,以及该集合中各结点之间的关系R,组成一个数据结构,表示成B=(D,R)。D和R是对客观事物的抽象描述,R表示结点之间的逻辑关系,(D,R)指的是数据的逻辑结构

  6. 逻辑结构:数据之间的相互关系。

    1. 集合 结构中的数据元素除了同属于一种类型外,别无其他关系。
    2. 线性结构 用来表示结点之间某种先后次序关系,一个结点只有一个前驱和一个后继,但首结点没有前驱,尾结点没有后继。数据元素之间一对一关系。
    3. 树形结构 表示结点之间的层次关系、分支关系和嵌套关系,一个结点只有一个前驱(根结点没有前驱),但可以有多个后继。数据元素之间一对多关系
    4. 图状结构或网状结构 任何两个结点之间都可能有(或没有)关系,结构中的数据元素之间存在多对多的关系
  7. 物理结构/存储结构:数据结构在计算机内的存储形式(如:顺序结构、链式结构、索引结构、哈希结构)等。

  8. 抽象数据类型ADT:将“数据”连同对其的“处理操作”(即运算)封装在一起而形成的复合体。

  9. 算法的五个特性:有穷性、确定性、可行性、输入、输出

  10. 算法的表现形式:描述形式、程序形式。

  11. 算法设计要求:正确性、可读性、健壮性、高效率与低存储量需求。

  12. 算法的描述有伪程序、流程图、N-S结构图等。E-R图是实体联系模型,不是程序的描述方式。

  13. 算法分析:对算法的评价,也称为评估或评测。最重要的两点:算法的正确性、算法的有效性

  14. 时间复杂性:算法对时间的需求称为算法的时间复杂性,或时间复杂度。时间复杂度由小到大:O(1)、O(logn)、O(n)、O(nlogn)、O(n2)、O(n3)。幂次时间复杂度有小到大O(2n)、O(n!)、O(nn)

  15. 空间复杂性:算法对空间的需求称为算法的空间复杂性,或空间复杂度。

  16. 最坏情况:对于具有相同输入数据量的不同输入数据,算法时间用量最大值。

  17. 平均情况:对于所有相同输入数据量的各种不同输入数据,算法耗用时间的平均值。

  18. 计算时间复杂性的方法:

    1. 支配性语句度量法 往往有一条语句的执行次数超过其他语句执行次数的总和,即这条语句在花费时间上起“支配性作用”,于是可选这条语句的执行次数作为度量这段程序花费时间的阶。

    2. 分段计算法 一个复杂的程序,往往可按结构(或功能)划分成相对独立的若干段,可以分别计算各段时间耗费,然后相加,作为整个算法的时间复杂性。

      例:若其中一段时间耗费为O(f(n)),另一段时间耗费为O(g(m)),那么两端共耗费:
      O ( f ( n 2 ) ) + O ( g ( m ) ) = O ( f ( n ) + g ( m ) ) O(f(n^2))+O(g(m))=O(f(n)+g(m)) O(f(n2))+O(g(m))=O(f(n)+g(m))

    3. 分层计算法 一段程序中出现多重循环,可以分别计算各层的时间耗费,然后相乘,其乘积作为该程序的时间复杂性。
      例1:

      for(i=0;i<n;i++){
             
        x=y=0;
        for(j=0;j<n/2;j++){
             
            if(a[j]>a[i]) x+=1;
            if(a[j]<a[i]) y+=1;
            printf("%d,%d\n",x,y);
        }
      }
      

      其外循环共执行n次,外循环每执行一次,内循环都执行n/2次,O(n/2)=O(n),即
      O ( n ) ∗ O ( n ) = O ( n 2 ) O(n) * O(n) = O(n^2) O(n)O(n)=O(n2)
      例2:

      for(i=1;i<=n;i++){
             
        for(j=1;j<=i;j++){
             
            printf("%d",i*j);
        }
      }
      

      外循环第i次执行时,内循环执行i次,所以内循环总的执行次数为:
      1 + 2 + … + n = ∑ i = 1 n i = n ( n + 1 ) 2 = n 2 2 + n 2 1+2+…+n=\sum_{i=1}^ni=\frac{n(n+1)}{2}=\frac{n^2}{2}+\frac{n}{2} 1+2++n=i=1ni=2n(n+1)=2n2+2

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值