码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构绪论(头大版)

时间:2018-06-01 23:16:43      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:两种   item   lan   包括   解析   alt   结构   重复   aaa   

∞本章是通过资源的导入解析了
1.1数据结构的基本概念
1.2算法和算法分析
1.3算法描述与C语言数据类型
================================We will Start==========================================
1.1数据结构的基本概念
  定义:数据结构是一门研究非数值计算的程序设计问题中计算机粗啊哦做对象及他们之间的关系和操作的学科
1.1.2 :数词概念
  1.数据(data):数据是指能够输入到计算机中,并被计算机识别和处理的符号的集合
  2.数据元素(data element):
数据元素时数据的基本单位.在计算机中,数据元素通常作为一个整体来处理.一个数据
元素可以由若干个数据项组成.数据项是具有独立意义的最小数据单位,是对数据元素属性的描述
  3.数据对象(data object):数据对象是具有相同性质的数据元素的集合,是数据的一个子集.
eg:整数集合:N={0,±1,±2,...}无限集
     字符集合:c={‘A‘,‘B‘,....,‘Z‘}有限集
  4.逻辑结构(logic structure):描述的是数据元素之间的
    (1)线性结构:数据元素之间存在一对一的关系
    (2)树型结构:数据元素之间存在一对多的关系
    (3)图结构或网结构:结构中的数据元素之间存在多对多的关系

3中数据结构分为两大类:线性结构和非线性结构 如图所示

  技术分享图片
注:数学的方法给出数据的逻辑结构的定义,数据结构可由一个二元组(D,S)定义,
    其中D是数据元素的有限集,S是D中元素的关系的有限集。
    技术分享图片
5.存储结构(storage structure):存储数据又叫物理结构,是数据结构在计算机中的表示
顺序存储结构技术分享图片
链式存储结构
 总结:
数据结构的内容
可归纳为三个部分逻辑结构、存储结构和运算集合
==========================================================================
1.2算法和算法分析
1.2.1算法(Algorithm)
    (1):有穷性:一个算法包括的指令数必须有限,每一条指令的执行次数也必须有限
    (2):确定性:算法的每一条指令必须有确切的定义,无二性
    (3):可行性:算法中的每一条指令都可以通过有限次、可实现的基本运算且在有限的时间内实现
    (4):输入:一个算法具有零个或多个输入
    (5):输出:一个算法具有一个或多个输出
设计好的算法应考虑:1.正确性2.可读性3.健壮性4.高效性和低存储量
1.2.2算法分析
  有两种衡量算法效率的方法
    (1)事后统计法
    (2)事前分析估算法
1.算法的时间复杂度
  :算法中的基本操作执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:

T(n)=O(f(n))
 :随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,成为算法的
渐近时间复杂度(简称时间复杂度)
1.1.语句频度
  语句频度是指该语句在一个算法中重复执行的次数给出X=X+1,语句频度分别为1,n,n2
    (1)x=x+1;时间复杂度为O(1),成为常量阶
    (2) for(i=1;i<=n;i++)x=x+1;时间复杂度为O(n),称为线性阶
    (3)for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)x=x+1;时间复杂度为O(n2),称为平方阶
2.算法的空间复杂度
  存储空间的固定部分
    程序指令代码的空间,常数、简单变量、定长成分(如数组元素、结构成分、对象的数据成员等)变量所占的空间
  可变部分
    对数据进行操作时所需的辅助空间
  空间复杂度:算法所需存储空间的度量.
                    S(n)=O(f(n))
                  其中,f(n)是算法的额外存储空间随问题规模n增长的函数.如果S(n)=O(1),表示算法为本地工作,即:随问题
                  规模n的增长,额外存储空间不变.
例1:交换A和B的内容
  (1)temp=A; (2)A=B; (3)B=temp;
    答:这3条语句的频度都是1,f(n)=3.所以,该程序的执行时间与问题规模无关,f(n)=3.算法的时间复杂度为常数阶,记为
    T(n)=O(1);
例2:累加
(1)x=0;       /执行1次/    
(2)y=0;       /执行1次/        
(3)x++;        /执行n次/
(4)y++;        /执行n2/
for(i=1;i<=n;i++)
for(j=1;j<n;j++)
        答:所有语句的频度之和f(n)为n2+n+2.当n---->∞时,显然有limf(n)/n2=lim(n2+n+2)/n2=1所以,T(n)=O(n2).
        注:lim是微积分中的基础概念,它指的是变量在一定的变化过程中,从总的来说逐渐稳定的这样一种变化趋势以及所趋向的值(极限值)。
例3:代码段如下,计算算法时间复杂度
    for(i=1;i<=n;i*=2)    x++;
      答:  该算法时间复杂度是T(n)= O(log2n).
https://baike.baidu.com/item/%E5%AF%B9%E6%95%B0/91326?fromtitle=log&fromid=39110(对数阶的定义)
https://baike.baidu.com/item/%E6%8C%87%E6%95%B0/3519666(指数阶的定义)
        注:程序每执行一次 i就乘以2,并且i<=n,所以2的a次方小于等于n,所以时间的复杂度为a=log2n.
例4:代码段如下,计算该算法的时间复杂度
     for(i=0;i<n;i++)
     for(j=0;j<n;j++)
             x++;
答:x++重复执行次数随着问题规模n增长的函数是n2,该算法时间复杂度是O(n2).
例5:代码段如下,计算时间复杂度
     for(i=1;i<=n;i++)
     {
        for(j=1;j<=n;j++){
        x=0;
            for(k=1;k<=n;k++)
                 x+=a[i][k]*b[k][j];
                c[i][j]=x;}
}
答:该算法的时间复杂度是n*n*n也就是T(n)=O(n3).

总结:常用的算法时间复杂度
1.O(1)常数阶 2.O(n)线性阶
3.O(n2)平方阶4.O(n3)立方阶
5.O(2?)指数阶6.O(log?n)对数阶
7.O(nlog?n)二维阶
所以时间复杂度的大小就是O(log?n)<O(n)<O(nlog?n)<O(n2)<O(n3)<...<O(2?)
时间的复杂度也徘徊在对数阶和指数阶之间
技术分享图片
==========================================================================
1.3.1:算法描述语言
(1)数据类型
整型、实型、字符型、数组、指针、结构、共用体等...
(2)变量和符号常量
变量定义:数据类型  变量名序列
符号常量定义:     #define  符号常量名  常量值;
例如:
            #define TRUE 1
            #define FALSE 0
            #define OK 1
            #define ERROR 0
            #define OVERFLOW -2
(3)数据运算
算术运算符
    +、-、*、/、%、++、--等
关系运算符
    >、<、==、>=、<=、!=;
逻辑运算符: !、&&、||;
还有: *、.、->、[]
(4)赋值语句
变量名=表达式;
(5)控制语句
①选择语句
    if(条件表达式)
        语句块;
    if(条件表达式)
        语句块1;
    else
        语句块2

    switch(表达式){
    case常量表达式1:语句块1;break;
    case常量表达式2:语句块2;break;
        ......
    default:语句块n;
}
②循环语句
    for(初始表达式;终止条件表达式;修改表达式)
         语句块;
    while(条件表达式)
         语句块;
    do{
        语句块;
}whilie(条件表达式);

1.3.2 C语言的数据类型
技术分享图片
1、基本数据类型
√整数类型
    ①基本整型,以int表示.
    ②短整型,以short int表示.
    ③长整型,以long int表示
        
√实型数据
    float、double和long double.

√字符数据
    Char

2、构造类型
√数组类型
        数组类型 数组名[常量表达式]
    技术分享图片

√结构体类型
    struct 结构名称
{
    成员定义列表
};

√共用体类型
    union value
{
    int i;
    char c;
    float f;
    double d;
}value1;

√枚举
    enum weekday
{
    Sunday,Monday,Tuesday,Wednesday,
    Thursday,Friday,Saturday
};
     枚举类型weekday,其中包含Sunday、Monday等7个枚举常量

3、指针类型
    数据类型*指针变量名;
例如:
    1 int a,b;
    2 int *p;
    3 p&a;
    4 a=10;
    5 b=*p;      答:技术分享图片
    1 int s[5]={1,2,3,4,5};
    2 int*p,a;
    3 p=&s[2];
    4 *p=-9;
    5 p++;       答:   技术分享图片

    技术分享图片
=============================GameOver=================================

数据结构绪论(头大版)

标签:两种   item   lan   包括   解析   alt   结构   重复   aaa   

原文地址:https://www.cnblogs.com/fangshiyuanzhucheng/p/9123713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!