学习严蔚敏数据结构: 第一集

先是听课笔记:

 

01. 第一集第一章	绪论
1.1 数据结构讨论的范畴数据结构是一门与程序设计密切相关的问题1976年的一本书<算法 + 数据结构 = 程序设计>程序设计: 为计算机解题编写的一组指令集算法: 处理问题的策略数据结构: 问题的数据模型的表示概括的说: 数据模型讨论的是非数值计算的程序设计中现实世界实体的数据模型和在计算机中的表示的方法以及这些数据模型进行的操作如何在计算机中实现
1.2 基本概念1. 数据与数据结构1). 数据: 所有能被输入到计算机中, 且被计算机处理的符号的集合计算机操作的对象的总称是计算机处理的信息的某种特定的符号表示形式2). 数据元素: 数据中的一个"个体", 数据结构中讨论的基本单位, 但不是最小单位, 是数据项的集合3). 数据项: 数据结构中讨论的最小单位4). 数据结构: 带结构的数据元素的集合5). 数据的逻辑结构可归结为下面四类:1>. 线性结构2>. 树形结构3>. 图状结构4>. 集合机构: 和数学上集合的概念一致, 集合中元素之间不存在任何关系, 某种意义上来说, 这也是一种关系6). 数据结构的形式定义:数据结构是一个二元组: Data_Structures = (D, S)其中D为数据元素的有限集, S是D上关系的有限集该形式定义强调了数据结构的逻辑7). 数据的存储结构: 逻辑结构在存储器中的映像1>. 数据元素的映像方法: 用二进制位(bit)的位串表示数据元素2>. 关系集合的映像方法: 使用有序对(表示的方法)a. 顺序映像: 以存储位置的相邻表示后继关系b. 链式映像: 以附加信息(指针)表示后继关系8). 在不同的编程环境中, 存储结构可以有不同的描述方法可以使用高级语言中已经存在的数据类型来描述数据的存储结构2. 数据类型: 在用高级程序语言编写的程序中, 必须对程序中出现的每个变量、常量或表达式, 明确说出它们所属的数据类型.数据类型是一个值的集合和定义在此集合上的一组操作的总称3. 抽象数据类型(Abstract Data Type, 简称ADT): 是指一个数据模型以及定义在这个模型上的一组操作, 这里的数据模型在程序设计中就是数据结构ADT有两个重要特征:1). 数据的抽象: 用ADT描述程序处理的实体的时候, 强调的是其本质特征、 其所能完成的功能以及它和外部用户的接口(既外界使用它的方法)2). 数据的封装: 将实体的外部特性和其内部实现细节分离, 并且对外部用户隐藏其内部实现细节抽象数据类型的描述方法: 抽象数据类型可用(D, S, P)三元组表示, 其中D是数据对象, S是D上的关系集, P是对D的基本操作集抽象数据类型的表示和实现: 抽象数据类型需要通过固有数据类型(高级语言中已经实现的数据类型)来实现
1.3 算法及算法的衡量1. 算法算法是为了解决某类问题而规定的一个有限长的操作序列. 一个算法必须满足以下五个重要特征:1). 有穷性: 对于任意一组合法输入值, 在执行有穷步骤之后一定能结束, 即: 算法中每个步骤都能在有限时间内完成
这章讨论了数据与数据结构的一些基本的概念, 我之前并未曾专门的学习过数据结构这门课程, 以前大学也开过, 但是我玩心较重, 一节课也没上过, 被无情的荒废了(该打..)我接触编程开始是C语言, 但C学的时间很短暂, 也就1个月时间, 之后就开始学习面向对象的东西(OO), 学的Java我记得刚学Java, 就有两天专门看的是面向对象的一些基本特征: 封装、 继承和多态现在看起来, 严老师的课程一开始提的也是这些东西, 看来有些东西是相通的...(什么? 你没发现? 往下看...)你看数据类型的定义: 数据类型是一个值的集合和定义在此集合上的一组操作的总称再看抽象数据类型的定义: 指一个数据模型以及定义在这个模型上的一组操作好吧, 你再看类的定义: 类描述了具有相同特性(数据元素)和行为(功能)的对象的集合不难得出这个结论: 类 == 抽象数据类型抽象数据类型的重要特征: 数据的抽象、 数据的封装面向对象的三大特征的实现的基础也是抽象, 而封装是实现抽象的有效手段其实程序设计语言本质上都是一样:都是人们用来解决实际问题的工具, 而能够解决的问题的复杂度就取决于对问题的抽象程度;面向过程的语言以数据模型作为抽象单位, 粒度过细; 而面向对象语言使用类来作为抽象单位, 可以随意控制其大小, 比面向过程语言能解决的问题的复杂度提高了很多, 也就促进了当前软件工程的兴起和发展;但是当软件体系越来越庞大之后, 以类为单位的抽象也渐渐不能抵挡人们解决面临问题的复杂度;这时候组件技术的出现, 一定程度上弥补了面向对象在解决宏大问题上的苍白, 它的兴起, 带动了软件工程向更高层次上迈进;好吧, 人类的欲望是无穷的, 由此诞生的需求是越来越庞大, 于是一个一个新的名词诞生了: SOA, 云计算等等;不管有多少语言诞生和消亡, 程序设计语言的发展正沿着抽象能力越来越强的道路发展, 让我们拭目以待吧


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部