您的位置:首页 > 理论基础 > 数据结构算法

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

2009-03-04 09:06 190 查看
先是听课笔记:

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, 云计算等等;

不管有多少语言诞生和消亡, 程序设计语言的发展正沿着抽象能力越来越强的道路发展, 让我们拭目以待吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: