您的位置:新葡亰496net > 奥门新萄京娱乐场 > 数据结构,数据结构和算法开篇

数据结构,数据结构和算法开篇

发布时间:2019-06-21 12:39编辑:奥门新萄京娱乐场浏览(85)

    学习以前(Before Learning)

    数据结构作为CS课程中的重中之重(其实CS的有所科目都很注重),作为开发“数据结构及其操作”的一把钥匙,实在是不敢大体。学习了半个学期,从前因为运动和其它一些小事,一贯未有完整的时日来学习那门学科(相比习于旧贯大段大段的日子来读书,碎片化的光阴会让自己深感比非常大的不舒适)。未来手头上的事情稳步地少了,拖拉了这么久的读书笔记也算是能够一片一片地Pop出来了。总认为温馨的数据结构成了最早Push进去最晚Pop出来的栈帧。

    话相当少说,笔记大约会有12篇左右,首要参照了如下材料:

    1.MOOC-陈越、李海华铭教师主讲《数据结构》;

    2.《Data Structures and Algorithm Analysis in C》-Mark Allen Weiss ;

    3.《C Prime Plus 中文版》- Stephen Prata(云巅专门的学业室 译)

    学习以前(Before Learning)

    数据结构作为CS课程中的重中之重(其实CS的具备课程都很主要),作为开采“数据结构及其操作”的一把钥匙,实在是不敢大体。学习了半个学期,在此之前因为移动和其他部分枝叶,平昔尚未完全的时间来学学那门课程(相比习于旧贯大段大段的时刻来读书,碎片化的时日会让自家备感一点都不小的不直率)。以后手头上的专门的学问逐步地少了,拖拉了这么久的上学笔记也好不轻松得以一片一片地Pop出来了。总认为温馨的数据结构成了最早Push进去最晚Pop出来的栈帧。

    话非常的少说,笔记大致会有12篇左右,主要参照他事他说加以考察了之类材料:

    1.MOOC-陈越、王笑宇铭教师主讲《数据结构》;

    2.《Data Structures and Algorithm Analysis in C》-Mark Allen Weiss ;

    3.《C Prime Plus 汉语版》- Stephen Prata(云巅职业室 译)

    普通话名称:数据结构 C 语言叙述
    英文名称:Data Structures C
    版本:PDF
    简介:
    《数据结构 C 语言叙述》(Data Structures C )PDF
    【作者】 William Ford,William Topp
    【译者】 刘卫东 沉官林
    【丛书名】 世界着名Computer教材选取
    【出版社】 清华东军事和政院学出版社
    【书号】 7-302-03160-6
    【页码】 708
    【出版日期】 一九九七-9-1
    【版次】 1-3

    纵然说,熟悉驾驭编程语言是外功,那么数据结构可谓是内功心法了

         本体系为《数据结构》(严蔚敏48集摄像)学习笔记,温故而知新,IT从业者,抓好基础,书常读常新!

    数据结构基础入门(Base of Data Sructures)

    数据结构基础入门(Base of Data Sructures)

    新葡亰496net 1

    以下是自身上学数据结构的总括和某个笔记

     

    数据结构概念

    • 在《Data Structures and Algorithm Analysis in C》(以下简称DSAAC)一书中未有聊起数据结构的现实性定义。

      与数据结构定义相比周围的自己觉着应当是在第3章:表、栈和队列中聊起的抽象数据类型(Abstract Data Type,ADT),书少校抽象数据类型看作是一对操作的聚众,并感到ADT中无需设计怎么着贯彻操作的成团,其可就是模块化设计的增加补充。

      并例如:表、集结、图和它们的操作一齐能够当做是抽象数据类型

    • 在陈越先生授课的《数据结构》(以下简称《数据结构》)中,陈越先生觉得数据结构并未有统一的合法概念。

      但是陈老师通过相比较各种数据结构相关数据所下定义提取了重大字。
      新葡亰496net 2

    经过图片能够看出关键字为“数据结构”和“算法”,可见数据结构是与算法密不可分的(看到这里的时候本身只是认为数据结构却是和算法结合的很连贯,但并未知道数据机构到底是何许)。

    跟着陈老师通过比方:怎样在书架上摆放图书,引进了

    “消除难题方法的频率跟数据的团体章程有关”这一意见。

    时至明日,我大约精通了陈老师所想表明的观念,即:

    数码经过不一样的算法进行组合成为有结构的数码,再通过分化算法对数据开始展览操作,结构化的数额与对数码的操作集共同产生了数据结构(本人总结的,如有不妥还请提出)

    在陈先生的课中,还比方了统一筹划打字与印刷函数PrintN并对循环及递归算法进行相比
    新葡亰496net 3

    透过比较就可以开采循环和递归算法实现时,数据量对于递归算法的频率影响是十分大的,并且在数据量达到1e7等级时,内部存款和储蓄器随即崩盘。

    尽管对于C语言有自然明白的话,能够知道:编译器是被分配叁个默许大小的商旅空间,一旦仓库超过这么些空间随即就能够崩溃(尽管大家能够透过调治编写翻译器暗中同意空间来消除这一主题材料,但以此相比还体现了使用递归算法时变成的长空复杂度过高的难点)大家在如下代码中可以开掘

    void Print(int N){
    if(N!=0){
    Print(N-1);
    printf("%dn",N);
     }
    }
    

    设若选取此递归算法,意味着无论数据量多大,程序都会联手递归到N=0的动静,才会讲栈帧各种Pop出去,那样拉动的高大难题尽管仓库占用量超出了编写翻译器所负有的默许空间,导致程序还是编写翻译器崩溃

    陈先生通过导出了另一个结论:

    消除难点方法的效用,跟空间的利用功用有关

    跟着陈老师利用clock()函数对两样算法总括多项式实行了比较
    新葡亰496net 4

    并得出了另叁个思想即:化解难题方法的频率,跟算法的高明程度有关

    陈先生最终交给了何以是数据结构???这一题材的回应,即:

    • 数码对象在计算机中的组织章程

      • 逻辑结构

      • 物理存款和储蓄结构

    • 多少对象自然与一多种加在其上的操作相关联

    • 成就那些操作所用的格局便是算法

    数据结构概念

    • 在《Data Structures and Algorithm Analysis in C》(以下简称DSAAC)一书中从不聊到数据结构的切切实实定义。

    与数据结构定义相比较附近的自身感到应该是在第3章:表、栈和队列中提起的抽象数据类型(Abstract Data Type,ADT),书少将抽象数据类型看作是一对操作的集聚,并感觉ADT中不须求设计怎么着落到实处际操作作的汇集,其可视为模块化设计的增加补充。

    并比方:表、集结、图和它们的操作一齐能够视作是抽象数据类型

    • 在陈越先生讲明的《数据结构》(以下简称《数据结构》)中,陈越先生以为数据结构并未统一的合法概念。

    可是陈老师通过比较各样数据结构相关数据所下定义提取了重大字。
    新葡亰496net 5

    因此图片能够看到关键字为“数据结构”和“算法”,可知数据结构是与算法密不可分的(看到此间的时候本人只是以为数据结构却是和算法结合的很连贯,但并未知晓数据机构到底是何等)。

    随着陈老师通过比如:怎样在书架上摆放图书,引进了

    “解决难题方法的频率跟数据的团组织措施有关”这一见解。

    由来,小编大约驾驭了陈老师所想表明的观点,即:

    多少通过分歧的算法进行重组成为有组织的数目,再通过不一致算法对数码实行操作,结构化的数额与对数据的操作集共同产生了数据结构(本人总括的,如有不妥还请提议)

    在陈先生的课中,还比方了陈设打字与印刷函数PrintN并对循环及递归算法实行比较
    新葡亰496net 6

    因而相比较就能够开采循环和递归算法完成时,数据量对于递归算法的功用影响是十分的大的,并且在数据量达到1e7等级时,内部存款和储蓄器随即崩盘。

    一经对于C语言有料定了解的话,能够精晓:编写翻译器是被分配贰个暗许大小的仓库空间,一旦饭馆超过这些空间随即就能崩溃(即使大家得以由此调解编写翻译器暗许空间来缓解这一难题,但那些比较还反映了选择递归算法时产生的长空复杂度过高的标题)我们在如下代码中得以窥见

    void Print(int N){
    if(N!=0){
    Print(N-1);
    printf("%dn",N);
     }
    }
    

    假设采用此递归算法,意味着不管数据量多大,程序都会联手递归到N=0的场所,才会讲栈帧每个Pop出去,那样带来的赫赫难点不怕旅社占用量超过了编写翻译器所兼有的私下认可空间,导致程序依然编写翻译器崩溃

    陈先生通过导出了另一个结论:

    消除难题方法的功能,跟空间的利用效能有关

    进而陈老师利用clock()函数对两样算法总结多项式进行了比较
    新葡亰496net 7

    并得出了另一个观念即:缓和难题方法的频率,跟算法的精粹绝伦程度有关

    陈先生最终交给了怎么着是数据结构???这一主题素材的回复,即:

    • 数量对象在计算机中的组织章程

    • 逻辑结构

    • 物理存款和储蓄结构

    • 多少对象自然与一多元加在其上的操作相关联

    • 完了这一个操作所用的法子就是算法

    内容简单介绍:

    数据结构(Data Structure)

    本章学习要点

    C语言完结(C-Support)

    • 《C Prime Plus》(以下简称《CPP》) 一书中在第14章:结议和其他数据格局对数据结构做了较为详细的C语言完结教学。14章入眼字为:struct , union , typedef。

    • 在执教数据结构的基本功概念时,《CPP》中使用了book.c及manybook.c四个渐进的例程来对数据结构举行具体的证实。当中,manybook.c的效果为录入library中书籍消息,并将其打字与印刷出来。小编接下来也选取经过笔者注释的manybook.c程序实行有关概念的论述

    struct book{ //定义book结构
    char title[MAXTITL];//定义结构第一个成员字符组title
    char author[MAXAUTL];//定义结构第二个成员字符组author
    float value;//定义结构第三个成员浮点变量value
    };
    
    • 通过上述例程大家可以,该Book结构中带有了多少个分子(member)或许叫做字段(田野先生),定义三个组织有如下三个首要本领:

      • 制造布局的格式或布局
      • 宣称服从该布局的变量(上述顺序由于是节选自manybook.c并未有声称)
      • 获得对三个布局变量各类部件的访问
    • 在manybook.c的主程序部分我们注脚了相应的library变量

      struct book library[MAXBKS]; //定义结构变量

      并经过拜访结构变量中的成员到位对书籍的田间管理,如:

    while(count < MAXBKS && gets(library[count].title)!=NULL&&library[count].title[0]!=''){ /*while循环条件分别为:1.当前输入数本册书小于书库最大可容纳书本册书
                         2.library[count].title当前值不为空
                         3。title首字符不为''*/
        printf("Now enter the author.n");
        gets(library[count].author);
        printf("Now enter the value.n");
        scanf("%f",&library[count  ].value);
        while(getchar()!='n')
            continue;//遇上换行符时跳出while循环
        if(count < MAXBKS)
            printf("Enter the next title.n");
    }
    

    通过上述顺序达成对图书消息的录入,值得关怀的是:

    gets(library[count].author);

    那行代码,为:对于library结构变量中第(count 1)个变量中author成员的赋值。

    • 通过示范程序的示范,很好地询问了怎么定义一个构造,以及结构中富含的积极分子,对于数据结构C语言的始发完成有了较好的摸底。

    C语言完毕(C-Support)

    • 《C Prime Plus》(以下简称《CPP》) 一书中在第14章:结商谈其余数据形式对数据结构做了较为详细的C语言完结教学。14章入眼字为:struct , union , typedef。

    • 在教授数据结构的功底概念时,《CPP》中央银行使了book.c及manybook.c多少个渐进的例程来对数据结构进行实际的认证。个中,manybook.c的机能为录入library中书籍音讯,并将其打字与印刷出来。笔者接下来也采纳经过作者注释的manybook.c程序开始展览有关概念的阐释

      struct book{ //定义book结构 char title[MAXTITL];//定义结构第一个分子字符组title char author[MAXAUTL];//定义结构第贰个分子字符组author float value;//定义结构第八个分子浮点变量value };

    • 经过上述例程我们能够,该Book结构中富含了四个分子(member)可能叫做字段(田野先生),定义三个结构有如下多少个第一技术:

    • 确立布局的格式或布局

    • 宣示遵守该布局的变量(上述顺序由于是节选自manybook.c并未有声称)
    • 获得对贰个构造变量各种部件的拜访

    • 在manybook.c的主程序部分大家注解了相应的library变量

    struct book library[MAXBKS]; //定义结构变量

    并透过走访结构变量中的成员到位对图书的管制,如:

    while(count < MAXBKS && gets(library[count].title)!=NULL&&library[count].title[0]!=''){ /*while循环条件分别为:1.当前输入数本册书小于书库最大可容纳书本册书
                         2.library[count].title当前值不为空
                         3。title首字符不为''*/
        printf("Now enter the author.n");
        gets(library[count].author);
        printf("Now enter the value.n");
        scanf("%f",&library[count  ].value);
        while(getchar()!='n')
            continue;//遇上换行符时跳出while循环
        if(count < MAXBKS)
            printf("Enter the next title.n");
    }
    

    经过上述顺序实现对书籍新闻的录入,值得关心的是:

    gets(library[count].author);

    那行代码,为:对于library结构变量中第(count 1)个变量中author成员的赋值。

    • 经过演示程序的言传身教,很好地领悟了什么样定义一个布局,以及组织中蕴藏的成员,对于数据结构C语言的早先实现有了较好的询问。

    数据结构历来都是计算机职业最为宗旨的一门课程。随着面向对象才干的提升,古板的数据结构课程面对着融合新剧情,提高到面向对象数据结构、算法及软件工程的冲天的重视挑战。 本书开辟性地将C 语言作为数据结构的算法描述性语言。一方面为观念的数据结构内容开展了C 语言达成,另一方面更偏重于将数据结构与面向对象技艺完全组成,围绕抽象数据类型的定义来研商每一项数据结构及算法。书中山大学量C 语言的顺序实例,既是数据结构的现实贯彻,又是面向对象技巧的算法基础。 本书可视作Computer及连锁标准的主旨教材,也可供广大斟酌开采职员自学提升时利用,是一本斩新的数据结构与面向对象技能完全组成的新型教材。

    • 抽象数据类型(ADT)的物理实现
    • “数据结构”是Computer中存款和储蓄,协会数量的艺术。
    • “数据结构是数据对象”以及存在于该目的的实例和烧结实例的数目成分之间的各样关系
    • 解决难点方法的频率跟数据的组织方式空间的利用效率算法的巧妙程度有关

        1)明白各名词、术语的意义,掌握基本概念;

    上学之后(After Learning)

    数据结构之后的读书能或无法举办得顺遂,非常大程度上取决对于数据结构(Data Structures)驾驭得是还是不是彻底,下一篇笔记应该是不可缺少讲算法解析方面,Flag:前一周末将第二篇笔记发出来。

    读书之后(After Learning)

    数据结构之后的读书能不能够实行得顺畅,十分大程度上有赖于对于数据结构(Data Structures)精通得是否通透到底,下一篇笔记应该是关键讲算法剖判方面,Flag:上周末将第二篇笔记发出来。

    目录

    例子1:

        2)明白算法多个要素的适当含义;

    好几小废话

    给上次商酌笔者自家博文的@ffl先生裂墙推荐Typora那款macOS X上的markdown编辑器,即时预览效果等等,易用和UI设计比娄老师引荐的马克down Pad2确实好了十分多(无意冒犯),上面上四个截图:

    新葡亰496net 8
    新葡亰496net 9

    假诺教师喜欢的话,也足以试着用一用,在那上边写以为是一种艺术作为,摆脱了那多个HTML标签的意况,真自由。

    一点小废话

    给上次评价笔者自身博文的@ffl先生裂墙推荐Typora那款macOS X上的markdown编辑器,即时预览效果等等,易用和UI设计比娄老师推荐的马克down Pad2确实好了广大(无意冒犯),上边上五个截图:

    新葡亰496net 10
    新葡亰496net 11

    假使老师喜欢的话,也得以试着用一用,在那上头写感觉是一种情势表现,摆脱了那多少个HTML标签的情状,真自由。

    第1章 概述
    1.1 抽象数据类型
    1.2 c 类和抽象数据类型
    1.3 c 应用中的对象
    1.4 对象设计
    1.5 类继承的施用
    1.6 面向对象程序设计
    1.7 程序测试与珍惜
    1.8 c 程序设计语言
    1.9 抽象基类及多态性
     书面作业
     第2章 基本数据类型
    2.1 整型
    2.2 字符类型
    2.3 实数类型
    2.4 枚举类型
    数据结构,数据结构和算法开篇。2.5 指针
    2.6 数组类型
    2.7 文本串及变量
    2.8 记录

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

        3)精晓总结语句频度和揣测算法时间复杂度的主意。

    享有学习相关代码均已git到自个儿的码云:

    BIGCATCODE/Data Structures

    小说中如有写得一无所能或不顺手的地点,烦请您提出。

    请你喝咖啡哈

    抱有学习相关代码均已git到本身的码云:

    BIGCATCODE/Data Structures

    小说中如有写得一无所长或救经引足的地点,烦请您建议。

    请你喝咖啡哈

    . 2.9 文件
    2.10 数组和笔录的施用
     书面作业
     上机题
     第3章 抽象数据类型和类
    3.1 用户类型类
    3.2 类的比喻
    3.3 对象和新闻传送
    3.4 对象数组
    3.5 多构造函数
    3.6 应用比方:三角矩阵
     书面作业
     上机题
     第4章 群体类
    4.1 线性群众体育
    4.2 非线性群众体育
    4.3 算法解析
    4.4 顺序查找与折半查找
    4.5 基本的逐条表类
     书面作业
     上机题
     第5章 栈和队列
    5.1 栈
    5.2 类stack
     5.3 表明式求值
    5.4 队列
    5.5 类queue
     5.6 优先级队列
    5.7 实例斟酌:事件驱动模拟
     书面作业
     上机题
     第6章 抽象操作
    6.1 运算符重载
    6.2 有理数
    6.3 有理数类
    6.4 作为成员函数的有理数运算
    6.5 作为友元函数的有理数流运算符
    6.6 有理数的转变
    6.7 有理数的选择
     书面作业
     上机题
     第7章 格局数据类型
    7.1 模板函数
    7.2 模板类
    7.3 表的模板类
    7.4 中缀表明式求值
     书面作业
     上机题
     第8章 类和动态积存
    8.1 指针与动态数据结构
    8.2 动态申请对象
    8.3 赋值与初叶化
    8.4 安全部组
    8.5 串类
    8.6 形式相配
    8.7 整型集结
     书面作业
     上机题
     第9章 链表
    9.1 结点类
    9.2 构造链表
    9.3 设计链表类
    9.4 类linkedlist
     9.5 linkedlist类的贯彻
    9.6 用链表完毕集结
    9.7 实例商量:打印缓冲池
    9.8 循环表
    9.9 双向链表
    9.10 实例钻探:窗口管理
     书面作业
     上机题
     第10章 递归
    10.1 递归的概念
    10.2 设计递归函数
    10.3 递归代码和平运动转时货仓
    10.4 用递归进行难点求解
    10.5 递归评估
     书面作业
     上机题
     第11章 树
    11.1 二叉树结构
    11.2 设计treenode函数
    11.3 树扫描算法的运用
    11.4 二叉寻觅树
    11.5 二叉寻觅树的使用
    11.6 binstree的实现
    11.7 实例商量:索引(concodance)
    封面作业
     上机题
     第12章 承继和抽象类
    12.1 承袭概述
    12.2 c 中的传承
    12.3 多态性和虚函数
    12.4 抽象基类
    12.5 迭代算子
    12.6 有序表
    12.7 异构表
     书面作业
     上机题
     第13章 高档非线性结构
    13.1 基于数组的二叉树
    13.2 堆
    13.3 heap类的兑现
    13.4 优先级队列
    13.5 avl树
    13.6 avl树类
    13.7 树迭代算子
    13.8 图
    13.9 graph类
     书面作业
     上机题
     第14章 群众体育数量的团体
    14.1 数组排序的骨干算法
    14.2 快捷排序(qulcksort)
     14.3 哈希法(hashing)
     14.4 哈希表类
    14.5 搜索方法的品质
    14.6 二进制文件和表面数据操作
    14.7 辞典
     书面作业
     上机题
     附录 部分书面作业答案

    以此程序前七个用了循环达成打字与印刷1-N,前边四个施用递归的主意完成的,很生硬递归的频率比较低,是因为,递归完结原理是以旅舍的章程,也正是说函数把 PrintN(N) 到PrintN(1)这N个函数压入栈中,在逐条打字与印刷出来,内部存款和储蓄器消耗巨大。
    图示:

     

    PDF 百度云盘下载:

    新葡亰496net 12

    1,数据结构探讨的局面

    《数据结构 C 语言叙述》(Data Structures C ) PDF 源码 下载:

    内存图

        1)程序设计=算法 数据结构

    ------------------------------------------分割线------------------------------------------

    例子2:

               程序设计:为Computer管理难点编写一组指令集;

    FTP地址:ftp://ftp1.linuxidc.com

    计算

                算法:管理难题的布置;

    用户名:ftp1.linuxidc.com

    新葡亰496net 13

                数据结构:难题的模子。

    密码:www.linuxidc.com

    多项式相加

         数值总括的主题材料:

    在 2014年LinuxIDC.com9月《数据结构 C 语言描述》(Data Structures C ) PDF 源码

    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;
    }
    

            比方:结构静力解析总计---------线性代数方程组;全球气候预先报告------------环流格局方程。

    下载格局见 http://www.linuxidc.com/Linux/2013-10/91140.htm

    在Computer中,有反复乘法与加法的演算时,一般遵守权重,只需比较乘法次数就可以了,第贰个算法每三回巡回施行了i 1次乘法,一共施行了(N^2 3*N)/2次,第三种算法试行了N次乘法,显著第二种成效高,那正是算法的妙用

         非数值总结的标题:

    ------------------------------------------分割线------------------------------------------

    实在数据结构是由局地主导数据类型组合成了叁个犬牙相错的数据类型,用于减轻某一类难点(基本难题有数量的增添,删除,条件查询,遍历等)

            例1:求一组整数(n)中的最大值。

    本文恒久更新链接地址:http://www.linuxidc.com/Linux/2014-09/107319.htm

    计算:到底什么是数据结构?

            例2:Computer对弈。

    新葡亰496net 14

    • 数量对象在计算机中的社团章程

      1. 逻辑结构
      2. 物理存款和储蓄结构
    • 多少对象自然与一名目大多加在其上的操作相关联

    • 成功这么些操作所用的法子就是算法

            例3:足球协会的数据库管理。

    抽象数据类型(Abstract Data Type)

        小结:数据结构描述现实世界实体的数学模型(非数值计算)及其上的操作在Computer中的表示和促成。

    • 数据类型
      1. 数码对象集
      2. 多少会集相关联的操作集
    • 空洞:描述数据类型的章程不注重于现实贯彻
      1. 与寄存的机械非亲非故
      2. 与数据存款和储蓄的情理结构非亲非故
      3. 与落实际操作作的算法和编制程序语言非亲非故

     

    算法

    2,基本概念

    什么是算法?

    • 二个点滴指令集
    • 接受一些输入(有些时候不须要输入)
    • 发出输出
    • 自然在容易步骤之后终止
    • 每一条指令必须

      1)数据和数据结构

    时间复杂度Tn

    基于算法写成的顺序在实施时占用存款和储蓄单源的尺寸

            数据:全数能被输入到Computer中,且被Computer管理的标志的聚焦计算机操作的对象的总称,是Computer管理的消息的某种特定的暗号表示格局。

    空间复杂度Sn

    听大人讲算法写成的顺序在施行时好费时间的尺寸

    牛刀小试

    用算法达成 求一个数列的最大子列和

    新葡亰496net 15

    题目一

    付出下列多个算法:

    //第一种算法:时间复杂度为 T(n^3)
    int MaxSubseqSum1(int a[] , int N)
    {
        int thisSum=0 , MaxSum=0;
            int i,j,k;
        for( i=0 ; i<N ; i   )  /* i 是子列左端位置 */ 
            for( int j=i ; j<N ; j   )   /* j是子列右端位置 */
            {   
                thisSum = 0;   /* thisSum 是从 a[i] 到 a[j] 的子列和 */
                for(int k=i;k<j;k  )thisSum =a[k];
                /* 如果刚得到的这个子列和更大,则更新结果 */
                if(thisSum>MaxSum) MaxSum = thisSum;
            }
        return MaxSum;
    } 
    

    新葡亰496net 16

    image.png

    新葡亰496net 17

    image.png

    //最快的算法,时间复杂度为T(n)
    int MaxSubseqSum1(int a[] , int N)
    {
        int thisSum=0 , MaxSum = 0;
            int i;
        for( i=0 ; i<N ; i  )
        {
            thisSum =a[i];     /* 向右累加 */
            /* 发现更大的则更新当前结果 */
            if(thisSum>MaxSum)MaxSum = thisSum;
           /* 如果当前子列和为负数,则不可能是后面的部分和增大,故舍弃 */
            else if(thisSum<0)thisSum=0;
        }
        return MaxSum;
    }
    

    算法三能够品尝写一下。
    上述资料来自 MOOC 《数据结构》

            数据成分:数据中的一个“个体”,数据结构中切磋的大旨单位。

            数据项:数据结构中研讨的微乎其单反位,数据元素是多少项的聚众。

            数据结构:带结构的数码成分的聚合。

            数据的逻辑结构:线性结构,树形结构,图状结构,群集结构。

            数据结构的格局定义

                                     数据结构是一个二元组Data_Structures=(D,S)。其中D是数据成分的有限集,S是D上涉及的有限集。

            数据结构存款和储蓄结构:逻辑结构在存款和储蓄器中的印象。    

            数据成分的画面方法:用二进制位(bit)的位串表示数据元素;

            关系的画面方法:(表示<x,y>的主意)

                    顺序映象:以存款和储蓄地点的周边表示后继关系;

                    链式映象:以附加音讯(指针)表示后继关系。

        2)数据类型

            数据类型是叁个值的集聚和概念在此聚众上的一组操作的总称。

        3)抽象数据类型

            抽象数据类型(Abstract Data Type 简称ADT)是指叁个数学模型以及定义在此数学模型上的一组操作。

             ADT两大首要特点:

                数据抽象:用ADT描述程序管理的实业时,重申的是其本质的风味,其所能达成的效用以及它和表面用户的接口;

                数据封装:将实体的外表特征和其内部贯彻细节分离,并且对外表用户隐藏当中间贯彻细节。

            ADT描述方法:(D,S,P)  

                        当中:D是数量对象;S是D上的关系集;P是对D的中坚操作集。

            ADT的象征和达成:ADT需求通过固有数据类型(高档编制程序语言中曾经落到实处的数据类型)来贯彻。

     

    3,算法和算法度量

       1)算法

            算法是为了缓慢解决某类难点而规定的三个有限长的操作种类。一个算法必须满足以下多少个基本点特点:

            (1)东周性:算法中各类步骤都能在有限时期内做到;

            (2)明确性:对于各个状态下所应试行的操作,在算法中都有适用的明确,且在任何条件下,算法都唯有一条实行路线;

            (3)可行性:算法中的全数操作都必须丰硕基本;

            (4)有输入:作为算法加工对象的量值,经常突显为算法中的一组变量;

    新葡亰496net,        (5)有输出。

         2)算法设计基准

            (1)准确性:算法应当满意以一定的“规格表达”方式提交的供给;对“无误”的知晓:a,b,c,d;

            (2)可读性:算法应该轻松人的知道;

            (3)健壮性:当输入的数码非法时,算法应当恰本地作出反应或开始展览对应的管理;

            (4)高功效与低存款和储蓄量供给:效能指算法实行时间,存储量指算法实施进度中所需的最大存款和储蓄空间。二者都与难题的范畴有关。

        3)算法功用的权衡方法和规则

              (1)事后总计法:必须进行顺序;别的因素掩盖算法本质。

              (2)事前深入分析估计法

                        和算法实践时间相关的成分:算法选取的政策;难点的局面;编制程序顺序的言语;编写翻译程序发生的机器代码的品质;计算机推行命令的速度。

                随着难题规模n的增长,算法推行时间的拉长率和f(n)的增加率同样。则可记作:T(n)=O(f(n)),称T(n)为算法的(渐近)时间复杂度

                算法=调控结构 原操作(固有数据类型的操作)                                                          

                算法的实施时间 = ∑原操作(i)的施行次数×Σ原操作(i)的施行时间

            从算法中甄选一种对于所商讨的题目来说是基本操作的原操作,以该基本操作在算法中另行试行的次数作为算法运维时刻的衡量圭臬。

     

              例题1:

    1 for(i = 1; i <= n; i  )
    2     for (j = 0; j <=n; j  )
    3     {
    4         c[i,j]=0;
    5         for (k = 0; k <= n; k  )
    6             c[i,j]  = a[i,k]*b[k,j];
    7     }
    

     

              例题2:

     1 void select_sort(int a[], int n)
     2 {
     3     //将a中整数序列重新排列成自小到大有序的整数序列
     4     for (int i = 0; i < n-1;   i)
     5     {
     6         j = i;
     7         for (int k = i 1; k < n;   k)
     8         {
     9             if (a[k] < a[j])
    10                 j = k;
    11             if (j != i) a[j] <--> a[i]
    12         }
    13     }
    14 }
    

     

              例题3:

     1 void bubble_sort(int a[], int n)
     2 {
     3     //将a中整数序列重新排列成自小到大有序的整数序列
     4     for (int i = n-1, change = TRUE; i > 1 && change; --i)
     5     {
     6         change = FALSE;
     7         for (int j = 0; j < i;   j)
     8         {
     9             if (a[j] > a[j 1])
    10                 {a[j] <--> a[j 1];
    11                 change = TRUE;}
    12         }
    13     }
    14 }
    

     

        4)算法的储存空间供给

             算法的空间复杂度S(n)=O(g(n)),表示随着问题规模n的拉长,算法运维所需存款和储蓄量的增进率与g(n)的增进率一样。

             算法的存款和储蓄量包涵:输入数据所占空间;程序本身所占空间;帮助变量所占空间。

             若所需额外层空间间相对于输入数据量来讲是常数,则称此算法为原地操作

     

    附录:代码达成清单

    partOne.cpp

    新葡亰496net 18新葡亰496net 19

      1 #include<stdlib.h>
      2 #include "structure.h"
      3 
      4 #include <iostream>
      5 using namespace std;
      6 
      7 
      8 //矩阵乘法
      9 int**  matrixMultiplcate(int** a, int** b, int n)  
     10 {
     11     int** c;
     12     c = (int **)malloc(sizeof(int *)*n);
     13     for(int m = 0; m < n; m  )
     14         c[m] = (int *)malloc(sizeof(int)*n);
     15 
     16     for (int i = 0; i < n;   i)
     17         for (int j = 0; j < n;   j)
     18         {
     19             c[i][j] = 0;
     20             for ( int k = 0; k < n;   k)
     21                 c[i][j]  = a[i][k] * b[k][j];
     22         }
     23     return c;
     24 }
     25 
     26 
     27 void dispalayMatrix()
     28 {
     29     int a[5][5] = {{1, 2}, {3, 4, 5}, {6}, {7}, {0, 8}}; 
     30     int b[5][5] = {{1, 2}, {3, 4, 5}, {6}, {7}, {0, 8}}; 
     31     int **p;
     32     int i, j, n = 5;
     33 
     34     p = (int **)malloc(sizeof(int *)*n);
     35     for(int m = 0; m < n; m  )
     36         p[m] = (int *)malloc(sizeof(int)*n);
     37     
     38     cout <<"原矩阵:"<< endl;
     39     for (i = 0; i < n;   i)
     40     {
     41         for (j = 0; j < n;   j)
     42         {
     43             p[i][j] = a[i][j];
     44             cout << a[i][j] << "t" ;
     45         }
     46         cout << endl;
     47     }
     48     cout << endl;
     49     
     50     int **c = matrixMultiplcate(p,p,n);
     51     cout <<"新矩阵:"<< endl;
     52     for (i = 0; i < n;   i)
     53     {
     54         for (j = 0; j < n;   j)
     55             cout << c[i][j] << "t" ;
     56         cout << endl;
     57     }
     58 }
     59 
     60 
     61 //选择排序
     62 int* select_sort(int a[], int n)
     63 {
     64     //将a中整数序列重新排列成自小到大有序的整数序列
     65     int j, temp = 0;
     66     for (int i = 0; i < n-1;   i)
     67     {
     68         j = i;
     69         for (int k = i 1; k < n;   k)
     70         {
     71             if (a[k] < a[j])
     72                 j = k;
     73             if (j != i) 
     74             {
     75                 temp = a[j];
     76                 a[j] = a[i];
     77                 a[i] = temp;
     78             }
     79         }
     80     }
     81     return a;
     82 }
     83 
     84 
     85 void display_select_sort()
     86 {
     87     int a[10];
     88     int i = 0;
     89     for (i = 10; i>0; i--)
     90         a[10-i] = i;
     91     
     92     cout << "原始数组:" << endl;
     93     for (i = 0; i < 10; i  )
     94         cout << a[i] << "t";
     95         
     96     int* new_a =  select_sort(a, 10);
     97     cout << "选择排序后数组:" << endl;
     98     for (i=0; i<10; i  )
     99         cout << new_a[i] << "t";
    100 }
    101 
    102 
    103 //冒泡排序
    104 int* bubble_sort(int a[], int n)
    105 {    
    106     //将a中整数序列重新排列成自小到大有序的整数序列
    107     bool change = true;
    108     int temp = 0;
    109     for (int i = n-1; i > 0 && change; --i)
    110     {
    111         change = false;
    112         for (int j = 0; j < i;   j)
    113         {
    114             if (a[j] > a[j 1])
    115             {
    116                 temp = a[j];
    117                 a[j] = a[j 1];
    118                 a[j 1] = temp;
    119                 change = true;
    120             }
    121         }
    122     }
    123     return a;
    124 }
    125 
    126 
    127 void display_bubble_sort()
    128 {
    129     int a[10];
    130     int i = 0;
    131     for (i = 10; i>0; i--)
    132         a[10-i] = i;
    133     
    134     cout << "原始数组:" << endl;
    135     for (i = 0; i < 10; i  )
    136         cout << a[i] << "t";
    137         
    138     int* new_a = bubble_sort(a, 10);
    139     cout << "冒泡排序后数组:" << endl;
    140     for (i=0; i<10; i  )
    141         cout << new_a[i] << "t";
    142 }
    

    View Code

      运维结果如下:

    新葡亰496net 20

     

    新葡亰496net 21

     

    新葡亰496net 22

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:数据结构,数据结构和算法开篇

    关键词:

上一篇:k近邻算法,KNN算法完毕及其交叉验证

下一篇:没有了