以下是我学习数据结构的总结和一些笔记

  • 抽象数据类型(ADT)的物理实现

  • “数据结构”是计算机中存储,组织数据的方式。

  • “数据结构是数据对象”以及存在于该对象的实例和组成实例的数据元素之间的各种联系

  • 解决问题方法的效率跟数据的组织方式空间的利用效率算法的巧妙程度有关

例子1:

void PrintN( int N )
{
    int i;
    for( i=1 ; i<N ; i++)
    printf("%d\n",i);
    return;
}
void PrintN( int N )
{
    if( N )
    {
        PrintN(N-1);
        printf("%d\n",N);
    }
    return;
}

这个程序前一个用了循环实现打印1-N,后面一个采用递归的方法实现的,很明显递归的效率很低,是因为,递归实现原理是以堆栈的方式,也就是说函数把 PrintN(N) 到PrintN(1)这N个函数压入栈中,在依次打印出来,内存消耗巨大。
图示:

例子2:

计算

double f(int n , double a[], double x)
{
    int i;
    double p = a[0];
    for( i=1 ; i<=n ; i++)
        p+= ( a[i] * pow( x , i ));
    return p;
}
double f(int n , double a[], double x)
{
    int i;
    double p = a[0];
    for( i=n ; i>0 ; i--)
        p= a[i-1] +x*p;
    return p;
}

在计算机中,有多次乘法与加法的运算时,一般按照权重,只需比较乘法次数就可以了,第一个算法每一次循环执行了i+1次乘法,一共执行了(N^2+3*N)/2次,第二种算法执行了N次乘法,显然第二种效率高,这就是算法的妙用

其实数据结构是由一些基本数据类型组合成了一个复杂的数据类型,用于解决某一类问题(基本问题有数据的增加,删除,条件查询,遍历等)

  • 数据对象在计算机中的组织方式

    1. 逻辑结构

    2. 物理存储结构

  • 数据对象必定与一系列加在其上的操作相关联

  • 完成这些操作所用的方法就是算法

  • 数据类型

    1. 数据对象集

    2. 数据集合相关联的操作集

  • 抽象:描述数据类型的方法不依赖于具体实现

    1. 与存放的机器无关

    2. 与数据存储的物理结构无关

    3. 与实现操作的算法和编程语言无关

什么是算法?

  • 一个有限指令集

  • 接受一些输入(有些时候不需要输入)

  • 产生输出

  • 一定在有限步骤之后终止

  • 每一条指令必须

时间复杂度Tn

根据算法写成的程序在执行时占用存储单源的长度

空间复杂度Sn

根据算法写成的程序在执行时好费时间的长度

用算法实现 求一个数列的最大子列和

给出下列四个算法:

算法三可以尝试写一下。
以上资料来源于 MOOC 《数据结构》

03-05 18:24