理解数据结构和抽象数据类型

来源:互联网 发布:手游市场数据分析报告 编辑:程序博客网 时间:2024/05/17 01:40

这两天在看一本介绍数据结构的书,叫《数据结构从应用到实现(java版)》,感觉挺不错的。刚刚看了第二章"数据结构概观",总结一下学习成果,很多话就是摘自书上的。

 

1.什么是数据结构?

百度百科上查过了,是没有标准的定义的,存在不同的表述。

 

本书称“数据结构是数据组件的汇集或集合,这些数据组件一起构成了一个有意义的整体”,而“数据组件本身也可以是数据结构”。这是我想到了马克主义哲学上形式和内容之间的关系,同样是这种辩证的可以相互转换的关系。

 

教材上一般都这样称:说数据结构是相互之间存在一种或多种特定关系的数据元素的集合。而数据元素是指什么呢?数据元素(data element)是计算机术语。它是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。有时,一个数据元素可由若干个数据项组成。

 

【逻辑结构与存储结构】上边提到的数据元素之间的关系指的是“逻辑结构”,而数据必须在计算机内存储,可以说数据的存储结构是逻辑结构的实现形式。一个逻辑结构可以有多种存储结构,且各种存储结构影响数据处理的效率。

 

【数据结构的作用:用来模拟实际或抽象系统的】

 

2.需要学习什么数据结构?

学习计算机科学中那些经典的数据结构。

这里需要提一下数组,书中称"数组:以邻接方式放置的项的集合对任意项提供单步随机访问",它已经成为大部分程序设计语言的一部分了,所以不把它看成是一种形式的数据结构。


3.什么是抽象数据类型?

首先,这一概念是软件开发人员在力求编写的代码健壮、易维护且可以复用的过程中产生的。

这一块知识我先前有所了解,英文上是AbstractData Type。此书中将其比作“抽象”的墙壁,“它将接口和实现明确分开,所以用户只看到接口,因此不需要参与实现。”构建者则着力实现ADT接口。ADT成为了双方的契约,这使得代码更容易维护。

想到了一句话“一流公司出规范,二流公司出产品,三流公司出服务”。其实,ADT就相当于是规范。

 

4.面向对象编程(OOP,如Java)在数据结构上什么优势?

“OOP的范例把程序看成是相互作用的对象的系统。对象封装状态和行为,它的行为是由一组可以用于改变或访问它的状态的操作定义的”。一般,对象的成员字段是私有的,而方法是公共的,这就造成了“对象的行为是它开放给用户的接口”的局面:对用户来说,对象的行为是如何实现的(以及状态是如何存储的)是不可见的。

 

“在面向对象程序设计中,类是模版,可以构建若干个对象,是创建对象的蓝图”,类类似于ADT。之所以不称之为ADT,是因为“类有更广泛的感染力”。根据【抽象是相对于观察点来说的】的观点,类既可以充当ADT,又可以充当它的实现。这依赖于我们的视角:从外部,我们看到的是用类图表示的公共接口;从内部,我们看到的是它的实现细节。

 

面向对象编程使代码具有较好的移植性。OOP中代码有两种复用策略:合成复用和继承复用。所谓合成复用,简单的说就是类中包含有其他对象,has-A;而继承复用就是共享其他类行为实现的代码,它破坏了对象间的抽象墙壁。

 

5.如何选择正确的数据结构?

①考虑数据结构支持的操作的接口;

②数据结构的效率(占据多大空间,接口中的操作运行时间如何);

从以上两方面考虑,力求接近需求。