第5章,数据抽象使得用户程序员在编写客户程序时,摆脱该数据类型的实现细节而仅仅关心该数据类型的接口。在计算机科学中,有一些重要的数据抽象——数据结构,应该尽早地介绍。计算机科学研究的数据结构主要有线性表、栈、队列、集合、图、树等等。
这里先谈谈《数据结构》课程与实现语言的事。
《数据结构(C语言版)》严蔚敏、吴伟民是经典教材,作者在前言中清楚的说明:
“全书中采用类C语言作为数据结构和算法的描述语言,在对数据的存储结构和算法进行描述时,尽量考虑C语言的特色,如利用数组的动态分配实现顺序存储结构等。虽然C语言不是抽象数据类型的理想描述工具,但鉴于目前和近一两年内(注:版次1997.4),“面向对象程序设计”并非数据结构的先修课程,故本书未直接采用类和对象等设施,而是从C
语言中精选了一个核心子集,并增添C++语言的引用调用参数传递方式等,构成了一个类C描述语言。它使本书对各种抽象数据类型的定义和实现简明清晰,既不拘泥于C语言的细节, 又容易转换成能上机执行的C或C++程序。 ”
真的很奇怪为什么直到现在还有很多人用C语言版数据结构。虽然《数据结构(C语言版)》很容易转换成能上机执行的C或C++程序,管你容易不容易,知道什么叫工具吗?越方便越好。如果Java、C#比C方便,就应该选Java/C#。这里也不是锻炼抽象思维的场所?学习高等数学、离散数学不够的话,可以旁听数学系的课。
其实yqj2065想说的是:从学习面向对象的角度,数据结构是一个很好的练习场,比GUI更好。这也是我将它们放在【第5章链表、数组和栈】的原因。注意,《编程导论》不是《数据结构》课程,所以仅介绍链表(linked list)和数组(array)和栈,将它们作为熟悉分支循环、面向对象的练习场。
在《数据结构》课程中,抽象数据类型(Abstract Data Type、ADT)是一个重要的概念。而在这里它是一个可选的术语。
为数据结构建模的ADT,描述的内容包括:(1)数据元素的集合、(2)元素之间的关系和(3)该ADT拥有的操作。我们分而治之
(3)使用某个Java接口I描述该ADT拥有的操作,
(2)用一个数据类型X(通常是结点)描述该ADT的数据元素并以X的对象之间的关系描述元素之间的关系。
(3)以接口的实现类管理元素的集合。
随便说一下,“抽象数据类型——一个数学模型以及定义在该模型上的一组操作”,这不是为何抽象数据类型的答案,而是数据类型。
ADT是为某一种类的具有相同行为的数据结构建立的数学模型——例如栈应该具有压入和弹出的行为,或者为具有相似语义的多种编程语言的某一数据类型建立的数学模型——例如各种语言中都有整数这一数据类型。
元素之间的关系是重点,关系通常以序偶来描述。如栈顶元素被最先弹出,这种关系反映在实现代码中;而链表元素之间的关系比较直观,由next设置。
使用Java学习数据结构,只需要3个基本武器:结点、数组和String。
原文地址:http://blog.csdn.net/yqj2065/article/details/39735999