读书笔记《大话数据结构》 第一章 数据结构绪论 链式存储结构:把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。但是需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关联的数据元素的位置。就像谍战片里有些情节描述的,每个人都有一个上线一个下线,而他们之间也是单线联系的,任何一个人都不可能脱离上线或下线把消息传递出去。这个就和链式存储结构的概念很像了。 第二章 算法 第三章 线性表 第四章 第五章 第六章 第七章 第八章 第九章 第十章 总结 感谢

未完待续。。。。。。

尼采:人们无法理解他没有经历过的事情。

我们只能接受过去已经理解的事物相关的信息。

这个观点与我最近的感悟也是不谋而合。比如在我没认知财务自由是什么之前,这个词在我脑海中一点印象也没有,等我认知到合格词之后,感觉全世界的人都在谈论财务自由了。还有一个例子就是在我看网络相关的书的时候,等我读完了《图解TCP/IP》之后,很多问题我就会试着从网络的角度去分析,这是在我没接触计算机网络之前根本不可能发生的事。

对上面的话进一步的理解是,当我们接触过一种事物之后,我们会在它身上投入更多的注意力。可以说我们接触的东西越多,接触的越深,我们分析问题的角度就越广泛。

比如在没有人跟我说脏脏包之前,我的世界里从来没有这个词,但是当又一次我朋友在我面前买了这个东西之后,我每次去蛋糕店或者路过奶茶店的时候,总是能有意无意的看到脏脏包。

第一章 数据结构绪论

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

划重点:存在关系,集合。

换句话说,数据结构,数据之间的结构,也就是数据之间的组织形式。

数据结构是一门研究非数值计算的程序设计问题中的操作对象。

术语

  • 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。

  • 数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被成为记录。

  • 数据项:一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。

  • 数据对象:是性质相同的数据元素的集合,是数据的子集。

  • 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

逻辑结构与物理结构

逻辑结构

逻辑结构是指数据对象中数据元素之间的互相关系。

  • 集合结构:集合中的数据元素除了属于同一个集合外,他们之间没有其他的关系。让我联想到了一袋豆子。
  • 线性结构:线性结构中数据元素之间是一对一的关系。一个连着一个,让我想到了一串枣肠。
  • 树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。让我联想到了家族族谱,我的上一辈有那么多人,他们每个人的上一辈又有那么多人,这就是一种很形象的树形结构了。
  • 图形结构:图形结构的数据元素是多对多的关系。让我联想到了朋友关系网,任意两个人都可能有关系,从整体看没有源头,而每个人都可能是源头。

物理结构

物理结构是指数据的逻辑结构在计算机中的存储形式

  • 顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。数组就是这样的存储结构。

链式存储结构:把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。但是需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关联的数据元素的位置。就像谍战片里有些情节描述的,每个人都有一个上线一个下线,而他们之间也是单线联系的,任何一个人都不可能脱离上线或下线把消息传递出去。这个就和链式存储结构的概念很像了。

划重点:逻辑结构是面向问题的,而物理结构是面向计算机的,其基本的目标就是将数据及其逻辑关系存储到计算机的内存中。

抽象数据类型(ADT)

数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。类型就是用来说明变量或表达式的取值范围和所能进行的操作。

可以按照取值的不同,数据类型可以分成两类:

  1. 原子类型:是不可以再分解的基本类型,包括整型、字符型
  2. 结构类型:有若干个类型组合而成的,是可以再次分解的。

抽象是一种思考问题的方式,它隐藏了繁杂的细节,只保留实现目标所必须的信息。

抽象数据类型(Abstract Data Type,ADT):是指一个数据模型及定义在该模型上的一组操作。抽象的意义在于数据类型的数学抽象特性。抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。

1
2
3
4
5
6
7
8
9
10
11
//这个很重要,真的是将抽象数据类型的定义给抽象出来了,我说的很抽象啊。。。
//ADT 抽象数据类型
Data
**数据元素之间的逻辑关系的定义**
Operation
操作1
初始条件
操作结果描述
操作2
...
操作n

第二章 算法

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

数据结构和算法的关系

在我看来,数据结构就是基础、是工具,就像1、2、3、4这些数字,A、B、C、D这些字母,你、我、爱、他这些汉字,是一样的,它是一种基础学科,也是一种抽象。而算法就是在数据结构的基础上,加上各种运算步骤,就是算法。所以说数据结果是算法的基础。而算法应用数据结构处理各种问题。

两种算法的比较

在书中,作者举例个例子,将1到100相加得到最终的结果,最最直观的做法就是从1开始一直加到100,而高斯算法是(1+100)* 100 /2,只用一步三个运算就搞定了。从性能上分析一眼就看出高低了,第一种做法要99次运算,而第二种做法只需要3次运算。而这只是100个数的加法,如果是1亿、10亿、万亿个数相加呢,他们的差距简直是太大了。所以一个优秀的算法是很关键的。

算法的特性

五个基本特性:输入、输出、有穷性、确定性、可行性。

  • 输入输出:算法具有零个或多个输入,算法至少有一个或多个输出。

  • 有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。

  • 确定性:算法的每一步都具有确定的含义,不会出现二义性。

  • 可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。还有整体的可行性,如果说一个算法要用到100万台计算机同时运行1年,高级的机构可能会这么做,对于我们普通人来说,这就是个只能听不能用的算法,哪怕它再优秀。

算法设计要求

  • 正确性:是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案。

  • 可读性:算法设计的另一个目的是为了便于阅读、理解和交流。可读性高有助于人们理解算法,晦涩难懂的算法往往隐含着错误,不易被发现,并且难于调试和修改。

  • 健壮性:当输入数据不合法时,算法也能做出相关处理,而不是生产异常或莫名其妙的结果。

  • 时间效率高、存储量低(灰常重要):设计算法应该尽量满足时间效率高和存储量低的需求。在生活中,我们也是希望话最少的钱用最短的时间办最大的事,算法也是一样的思想。

算法效率的度量方法

事后统计法

事前

第三章 线性表

第四章

第五章

第六章

第七章

第八章

第九章

第十章

总结

一定要好好学,这是算法的基础

这本书真的很好,为什么入门时期的时候没看呢
不过现在来看也还是不错的,收获满满

感谢

《大话数据结构》程杰


本文作者: qizikuai
本文链接:
http://qizikuai.github.io/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!