数据结构学习笔记,备位充数

By admin in 4858.com on 2019年4月10日

学学在此之前(Before Learning)

数据结构作为CS课程中的重中之重(其实CS的有所科目都很首要),作为开拓“数据结构及其操作”的壹把钥匙,实在是不敢马虎。学习了半个学期,在此之前因为运动和别的部分枝叶,向来未有完整的日子来读书那门科目(相比习惯大段大段的光阴来上学,碎片化的光阴会让作者感觉到不小的不爽快)。未来手头上的事体稳步地少了,拖拉了这么久的就学笔记也好不不难得以一片一片地Pop出来了。总觉得自个儿的数据结构成了最早Push进去最晚Pop出来的栈帧。

话不多说,笔记大约会有1贰篇左右,首要参照了如下材料:

1.MOOC-陈越、赵琦铭教师主讲《数据结构》;

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

三.《C Prime Plus 汉语版》- 斯蒂芬 Prata(云巅工作室 译)

上学以前(Before Learning)

数据结构作为CS课程中的重中之重(其实CS的具备科目都很重点),作为开拓“数据结构及其操作”的1把钥匙,实在是不敢大意。学习了半个学期,从前因为运动和其它一些小事,一贯从未完全的日子来上学那门科目(相比较习惯大段大段的光阴来学学,碎片化的时光会让自个儿觉得相当的大的不舒适)。未来手头上的事务稳步地少了,拖拉了这么久的读书笔记也终归能够一片一片地Pop出来了。总感觉到温馨的数据结构成了最早Push进去最晚Pop出来的栈帧。

话不多说,笔记大约会有12篇左右,主要参照了如下材料:

1.MOOC-陈越、刘中波铭教师主讲《数据结构》;

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

叁.《C Prime Plus 普通话版》- 斯蒂芬 Prata(云巅工作室 译)

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

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

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

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

4858.com 1

以下是自己上学数据结构的总结和局地笔记

数据结构概念

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

    与数据结构定义比较接近的自身觉着应当是在第1章:表、栈和队列中谈到的抽象数据类型(Abstract Data
    Type,ADT),书元帅抽象数据类型看作是1些操作的集聚,并认为ADT中无需设计怎么着促成操作的聚集,其可说是模块化设计的补充。

    并举例:表、集合、图和它们的操作壹起能够当做是抽象数据类型

  • 在陈越先生教师的《数据结构》(以下简称《数据结构》)中,陈越先生认为数据结构并从未统一的官方概念。

    不过陈老师通过相比较种种数据结构相关数据所下定义提取了主要字。
    4858.com 2

经过图片能够见见关键字为“数据结构”和“算法”,可知数据结构是与算法密不可分的(看到此间的时候自身只是认为数据结构却是和算法结合的很严密,但并从未了解数据机构到底是怎么样)。

继而陈老师通过举例:怎么着在书架上摆放图书,引进了

“解决难题方法的频率跟数据的集体育赛事业办公室法有关”那1看法。

从那之后,作者大概通晓了陈老师所想表达的视角,即:

数量经过区别的算法举办组合成为有结构的多寡,再通过差异算法对数据开始展览操作,结构化的数据与对数码的操作集共同形成了数据结构(本人总括的,如有不妥还请提议)

在陈先生的课中,还举例了统一筹划打字与印刷函数PrintN并对循环及递归算法实行相比
4858.com 3

透过相比即可发现循环和递归算法达成时,数据量对于递归算法的频率影响是非常大的,并且在数据量达到1e7级别时,内部存款和储蓄器随即崩盘。

要是对于C语言有必然驾驭的话,能够理解:编写翻译器是被分配2个暗中同意大小的库房空间,1旦堆栈超过那些空间随即就会崩溃(尽管大家得以经过调整编写翻译器私下认可空间来缓解这一题材,但以此相比较还展示了使用递归算法时造成的半空中复杂度过高的题材)大家在如下代码中得以窥见

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

如果选拔此递归算法,意味着不管数据量多大,程序都会联合递归到N=0的景况,才会讲栈帧每一种Pop出去,那样拉动的远大难题不怕堆栈占用量超出了编写翻译器所具备的暗中认可空间,导致程序竟然编写翻译器崩溃

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

斩草除根难题方法的频率,跟空间的利用功效有关

紧接着陈老师利用clock()函数对分歧算法总计多项式进行了比较
4858.com 4

并搜查缴获了另三个见识即:缓解难点方法的功效,跟算法的高明程度有关

陈先生最终交给了怎么着是数据结构???那一题指标回答,即:

  • 数量对象在计算机中的社团办公室法

    • 逻辑结构

    • 大体存款和储蓄结构

  • 数码对象自然与1多种加在其上的操作相关联

  • 成就这个操作所用的章程就是算法

数据结构概念

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

与数据结构定义比较像样的本人以为应当是在第二章:表、栈和队列中提起的抽象数据类型(Abstract Data
Type,ADT),书准将抽象数据类型看作是部分操作的集纳,并以为ADT中无需设计怎么样贯彻操作的聚合,其可视为模块化设计的补给。

并举例:表、集合、图和它们的操作1起得以看成是抽象数据类型

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

而是陈老师通过对照各种数据结构相关数据所下定义提取了主要字。
4858.com 5

通过图形能够看来关键字为“数据结构”和“算法”,可知数据结构是与算法密不可分的(看到那里的时候自个儿只是觉得数据结构却是和算法结合的很连贯,但并未清楚数据机构到底是怎么样)。

跟着陈老师通过举例:怎么着在书架上摆放图书,引进了

“化解难点方法的效能跟数据的组织格局有关”那一观点。

迄今结束,作者大约领悟了陈老师所想表明的意见,即:

数量通过区别的算法举行组合成为有协会的多少,再通过分歧算法对数码进行操作,结构化的数据与对数据的操作集共同形成了数据结构(自个儿总计的,如有不妥还请提出)

在陈先生的课中,还举例了统一筹划打印函数PrintN并对循环及递归算法举行相比
4858.com 6

透过相比即可发现循环和递归算法达成时,数据量对于递归算法的频率影响是非常大的,并且在数据量达到壹e七级别时,内部存款和储蓄器随即崩盘。

假定对于C语言有早晚驾驭的话,能够精通:编写翻译器是被分配2个暗中同意大小的库房空间,1旦堆栈超越那么些空间随即就会崩溃(固然大家能够透过调整编写翻译器私下认可空间来消除这壹标题,但这几个比较还体现了选拔递归算法时造成的空中复杂度过高的题材)大家在如下代码中能够发现

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

若是接纳此递归算法,意味着不管数据量多大,程序都会联合递归到N=0的情形,才会讲栈帧各个Pop出去,那样带来的宏伟难点尽管堆栈占用量超出了编译器所怀有的暗中认可空间,导致程序竟然编写翻译器崩溃

陈先生通过导出了另三个定论:

缓解问题方法的频率,跟空间的利用功用有关

紧接着陈老师利用clock()函数对不相同算法总括多项式实行了相比
4858.com 7

并搜查缉获了另三个意见即:斩草除根难题方法的效能,跟算法的非凡纷呈程度有关

数据结构学习笔记,备位充数。陈先生最终交给了怎么是数据结构???那1题指标答疑,即:

  • 数码对象在微型计算机中的协会措施

  • 逻辑结构

  • 大体存款和储蓄结构

  • 数据对象自然与1层层加在其上的操作相关联

  • 实现那一个操作所用的点子就是算法

内容简介:

数据结构(Data Structure)

C语言完毕(C-Support)

  • 《C Prime Plus》(以下简称《CPP》)
    一书中在第二4章:结构和其余数据情势对数据结构做了较为详细的C语言完成教学。1肆章重点字为: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并未有声称)
    • 获得对1个构造变量各样部件的走访
  • 在manybook.c的主程序部分大家申明了相应的library变量

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

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

while(count < MAXBKS && gets(library[count].title)!=NULL&&library[count].title[0]!='\0'){ /*while循环条件分别为:1.当前输入数本册书小于书库最大可容纳书本册书
                     2.library[count].title当前值不为空
                     3。title首字符不为'\0'*/
    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+一)个变量中author成员的赋值。

  • 透过示范程序的言传身教,很好地问询了怎么定义2个布局,以及结构中包涵的分子,对于数据结构C语言的始发落成有了较好的摸底。

C语言落成(C-Support)

  • 《C Prime Plus》(以下简称《CPP》)
    一书中在第二四章:结构和其余数据方式对数据结构做了较为详细的C语言达成教学。1四章重点字为: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]!='\0'){ /*while循环条件分别为:1.当前输入数本册书小于书库最大可容纳书本册书
                     2.library[count].title当前值不为空
                     3。title首字符不为'\0'*/
    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++语言完毕,另1方面更偏重于将数据结构与面向对象技术完全组成,围绕抽象数据类型的定义来谈谈每壹种数据结构及算法。书中山大学量C++语言的程序实例,既是数据结构的有血有肉落到实处,又是面向对象技术的算法基础。
本书可看做总计机及有关标准的着力教材,也可供周边研发职员自学进步时行使,是一本全新的数据结构与面向对象技术完全组成的时尚教材。

  • 抽象数据类型(ADT)的大体完毕
  • “数据结构”是总计机中存款和储蓄,组织数量的办法。
  • “数据结构是数量对象”以及存在于该对象的实例和构成实例的数额成分之间的各个关系
  • 涸泽而渔难题方法的频率跟数据的组织方式空间的利用效率算法的巧妙程度有关

学学之后(After Learning)

数据结构之后的学习能无法进行得顺畅,非常大程度上有赖于对于数据结构(Data
Structures)驾驭得是不是透彻,下1篇笔记应该是根本讲算法分析方面,Flag:下周末将第一篇笔记发出来。

读书之后(After Learning)

数据结构之后的读书能还是不可能实行得百步穿杨,相当大程度上取决对于数据结构(Data
Structures)精晓得是否透彻,下壹篇笔记应该是主要讲算法分析方面,Flag:下一周末将第三篇笔记发出来。

目录

例子1:

壹些小废话

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

4858.com 8
4858.com 9

若果教授喜欢的话,也能够试着用1用,在这上边写感觉是1种艺术作为,摆脱了那么些HTML标签的情形,真自由。

一点小废话

给上次评价作者本人博文的@ffl先生裂墙推荐Typora那款macOS
X上的markdown编辑器,即时预览效果等等,易用和UI设计比娄老师推荐的马克down
Pad二确实好了成都百货上千(无意冒犯),上面上三个截图:

4858.com 10
4858.com 11

若果教授喜欢的话,也足以试着用壹用,在那地方写感觉是一种方法作为,摆脱了这些HTML标签的事态,真自由。

第1章 概述
1.1 抽象数据类型
一.二 c++类和抽象数据类型
1.三 c++应用中的对象
1.肆 目的设计
一.伍 类继承的运用
1.陆 面向对象程序设计
一.七 程序测试与保卫安全
一.8 c++程序设计语言
一.玖 抽象基类及多态性
 书面作业
 第一章 基本数据类型
2.1 整型
二.二 字符类型
二.三 实数类型
2.四 枚举类型
2.5 指针
二.陆 数组类型
二.7 文本串及变量
2.8 记录

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

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

BIGCATCODE/Data
Structures

文章中如有写得一无所能或不顺畅的地点,烦请您建议。

请您喝咖啡哈

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

BIGCATCODE/Data
Structures

小说中如有写得百无一是或不顺遂的地点,烦请您提出。

请您喝咖啡哈

. 2.9 文件
2.10 数组和笔录的利用
 书面作业
 上机题
 第贰章 抽象数据类型和类
3.1 用户类型类
三.二 类的比方
三.三 对象和音信传递
三.四 指标数组
3.5 多构造函数
三.六 应用举例:三角矩阵
 书面作业
 上机题
 第4章 群体类
四.1 线性群众体育
四.贰 非线性群众体育
四.三 算法分析
4.四 顺序查找与折半查找
4.伍 基本的次第表类
 书面作业
 上机题
 第伍章 栈和队列
5.1 栈
5.2 类stack
 伍.三 表达式求值
5.4 队列
5.5 类queue
 5.陆 优先级队列
5.柒 实例讨论:事件驱动模拟
 书面作业
 上机题
 第陆章 抽象操作
6.一 运算符重载
6.2 有理数
陆.三 有理数类
陆.四 作为成员函数的有理数运算
陆.5 作为友元函数的有理数流运算符
陆.6 有理数的转换
陆.7 有理数的使用
 书面作业
 上机题
 第天问 格局数据类型
7.1 模板函数
7.2 模板类
七.三 表的模板类
7.四 中缀表明式求值
 书面作业
 上机题
 第拾章 类和动态储存
八.一 指针与动态数据结构
8.② 动态申请对象
8.叁 赋值与初叶化
八.四 安全体组
8.5 串类
8.6 形式相配
8.七 整型集合
 书面作业
 上机题
 第9章 链表
9.1 结点类
九.二 构造链表
9.三 设计链表类
9.4 类linkedlist
 九.5 linkedlist类的落到实处
玖.6 用链表实现集合
9.七 实例钻探:打字与印刷缓冲池
9.8 循环表
玖.九 双向链表
九.十 实例研商:窗口管理
 书面作业
 上机题
 第10章 递归
拾.1 递归的定义
十.二 设计递归函数
10.三 递归代码和平运动作时堆栈
拾.四 用递归举办难题求解
拾.伍 递归评估
 书面作业
 上机题
 第11章 树
11.一 二叉树结构
11.2 设计treenode函数
11.3 树扫描算法的选拔
1一.肆 二叉搜索树
1一.5 二叉搜索树的行使
11.6 binstree的实现
1一.七 实例钻探:索引(concodance)
封面作业
 上机题
 第二二章 继承和抽象类
1贰.壹 继承概述
1二.贰 c++中的继承
1二.三 多态性和虚函数
1贰.4 抽象基类
1二.⑤ 迭代算子
12.6 有序表
12.7 异构表
 书面作业
 上机题
 第二叁章 高级非线性结构
13.1 基于数组的2叉树
13.2 堆
一3.叁 heap类的落到实处
壹3.四 优先级队列
13.5 avl树
13.6 avl树类
1叁.七 树迭代算子
13.8 图
13.9 graph类
 书面作业
 上机题
 第二四章 群体数量的团队
1肆.1 数组排序的大旨算法
1四.贰 快捷排序(qulcksort)
 14.3 哈希法(hashing)
 1四.肆 哈希表类
1四.5 搜索方法的性质
1四.六 贰进制文件和表面数据操作
14.7 辞典
 书面作业
 上机题
 附录 部分书面作业答案

这几个程序前3个用了巡回落成打字与印刷一-N,前边一个利用递归的主意完成的,很驾驭递归的作用非常的低,是因为,递归达成原理是以堆栈的章程,相当于说函数把
PrintN(N) 到PrintN(一)那N个函数压入栈中,在挨家挨户打字与印刷出来,内存消耗巨大。
图示:

PDF 百度云盘下载:

4858.com 12

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

内存图

——————————————分割线——————————————

例子2:

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

计算

用户名:ftp1.linuxidc.com

4858.com 13

4858.com ,密码:www.linuxidc.com

多项式相加

在 2014年LinuxIDC.com\9月\《数据结构 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

在总括机中,有数十次乘法与加法的演算时,壹般遵从权重,只需比较乘法次数就能够了,第3个算法每壹次巡回执行了i+三遍乘法,1共执行了(N^贰+三*N)/1遍,第三种算法执行了N次乘法,显明第二种效用高,那正是算法的妙用

——————————————分割线——————————————

实际上数据结构是由局地着力数据类型组合成了3个扑朔迷离的数据类型,用于缓解某壹类难题(基本问题有数据的充实,删除,条件查询,遍历等)

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

总括:到底哪些是数据结构?

4858.com 14

  • 多少对象在微机中的协会方式

    1. 逻辑结构
    2. 物理存款和储蓄结构
  • 数量对象自然与一文山会海加在其上的操作相关联

  • 成功这么些操作所用的不二等秘书诀就是算法

抽象数据类型(Abstract Data Type)

  • 数据类型
    1. 数量对象集
    2. 数码集合相关联的操作集
  • 泛泛:描述数据类型的措施不依靠于现实贯彻
    1. 与寄存的机器非亲非故
    2. 与数据存款和储蓄的大体构造非亲非故
    3. 与贯彻操作的算法和编制程序语言无关

算法

如何是算法?

  • 一个个别指令集
  • 收受部分输入(有个别时候不要求输入)
  • 产生输出
  • 肯定在点滴步骤之后终止
  • 每一条指令必须

时间复杂度Tn

基于算法写成的程序在履行时占用存款和储蓄单源的长度

空中复杂度Sn

基于算法写成的次第在推行时好费时间的尺寸

牛刀小规模试制

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

4858.com 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;
} 

4858.com 16

image.png

4858.com 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 《数据结构》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有