数据结构和算法开篇

如果说,熟练掌握编程语言是外功,那么数据结构可谓是内功心法了

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

数据结构(Data Structure)

  • 抽象数据类型(ADT)的物理实现
  • “数据结构”是计算机中存储,组织数据的方式。
  • “数据结构是数据对象”以及存在于该对象的实例和组成实例的数据元素之间的各种联系
  • 解决问题方法的效率跟数据的组织方式空间的利用效率算法的巧妙程度有关

例子1:

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

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

数据结构和算法开篇_第1张图片
内存图

例子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. 物理存储结构
  • 数据对象必定与一系列加在其上的操作相关联

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

抽象数据类型(Abstract Data Type)

  • 数据类型
    1. 数据对象集
    2. 数据集合相关联的操作集
  • 抽象:描述数据类型的方法不依赖于具体实现
    1. 与存放的机器无关
    2. 与数据存储的物理结构无关
    3. 与实现操作的算法和编程语言无关

算法

什么是算法?

  • 一个有限指令集
  • 接受一些输入(有些时候不需要输入)
  • 产生输出
  • 一定在有限步骤之后终止
  • 每一条指令必须

时间复杂度Tn

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

空间复杂度Sn

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

牛刀小试

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

数据结构和算法开篇_第2张图片
题目一

给出下列四个算法:

//第一种算法:时间复杂度为 T(n^3)
int MaxSubseqSum1(int a[] , int N)
{
    int thisSum=0 , MaxSum=0;
        int i,j,k;
    for( i=0 ; iMaxSum) MaxSum = thisSum;
        }
    return MaxSum;
} 
数据结构和算法开篇_第3张图片
image.png
数据结构和算法开篇_第4张图片
image.png
//最快的算法,时间复杂度为T(n)
int MaxSubseqSum1(int a[] , int N)
{
    int thisSum=0 , MaxSum = 0;
        int i;
    for( i=0 ; iMaxSum)MaxSum = thisSum;
       /* 如果当前子列和为负数,则不可能是后面的部分和增大,故舍弃 */
        else if(thisSum<0)thisSum=0;
    }
    return MaxSum;
}

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

你可能感兴趣的:(数据结构和算法开篇)