个人学习心得 ni{'V4A
至于如何学习数据结构,我个人认为合适的方法是,首先从根本上就要认识到数据结构的本质,数据结构和算法之间的密切关系,以及数据结构的应用方法。不然我们很可能陷入各种数据结构的复杂特性中却还根本不知道到底什么才是数据结构的本质,学了很多很久却其实什么都没有弄明白,在这里我说点我个人的一点关于数据结构本质的东西: [5L?#Y
1-E6ACq
学好数据结构最重要的是对程序设计方式和程序语言概念和实现的理解int i; i,ZEUdd*_
2k<#e2
int i[]; 7OmT^jV2
struct i{}; *tj(,:!
ADT i{}; I{dy,\p
j36YIz$a
到底有什么区别,这就是程序设计语言实现的问题了。 cX
C [O
GgY8\>u
定义了一种数据类型就是定义了一类操作
,==_u
v}u]tl$,
int i,j;i=j+1; =>5Lp
^7+;XUyg
这样的操作在语言本身中实现了,也就是说你不需要关心这样的操作程序语言是如何完成的,所以int就是基本数据类型 fdKE1,;
+_fFRyu>
抽象了基本数据类型的就是数据结构。 EP@u4F
![K\)7 iKo
当你定义了 ZT!8h$SE:
QG?!XWz
ADT P{}; _[&V9Jt
lFt!
的时候,比如如果P是链表,这就要你去实现它各种的操作。而且P能够完成的所有操作都必须由你去实现,而你实现得基础就是这些char int float *p...基本数据类型。这就是抽象数据类型。 xk~gGT&
*nU5PSs
当你把类型定义完成后,剩下的就是算法去完成程序流程的控制。 0yC~"u[N Y
n',X,P0
所以:数据结构+算法=程序 !1I# L!9
)M0(vog
Ygk_gBRiC
还想说点的是,设计思想,程序设计语言,和数据结构,始终是促进计算机软件科学发展的最大动力。一般来说都是思想先与语言,然后出现支持这种思想和包含这样思想的数据类型的语言实现。 R
q@|o5O
6vbKKn`ST
具体说: 1ygEyC[1
~{lb`M^]h
面向机器编程 机器语言,汇编语言 X<8|uP4
I ==)a6^
面向过程编程 C。。。。语言 dlfjx
5&Yt=)c\
面向对象编程 JAVA C++ _f@,)n
sc+%v1Y#}
当然思想毕竟只是思想,你可以用不同的语言实现。但必须说明的是只能用一个层面上的语言实现。 比如,机器语言,由于其语言本身抽象层很低,低到了就像给一个对象赋值的操作也要程序员进行位操作。为在语言实现这个层面上,它不支持。 为什么说C也可以进面向对象的编程呢?关键就在C很好的支持ADT了。他可以用复杂了ADT去代替C++中已经变成基本数据类型的CLASS,但是正是因为要用C完成OO,必须程序员来实现(定义ADT)。所以说,C不适合开发OO软件。而C++却恰恰把CLASS定义成了一个基本类型,这样就完成了OO这一个层次的抽象。当然由于C++是C的超集,他同样是完全支持面向过程的。 8a8a:d
k@lJ8(i^qU
说了这么多,就是想说说 数据结构和程序语言和设计思想的关系。当我们能把数据结构的学习和程序设计语言,程序设计想法相联系起来的时候,我想我们对数据结构本身的认识已经更加深刻了,我们学习到每一种的新的数据结构的时候我们不再恐慌,因为我们知道了任何一种数据结构都有其共同的共性和特殊的特性,每一种数据结构都是为了一个领域所现实的,从这一方面来说,数据结构本身就具有继承特性,我们可以用一个继承树来表示一个完整的数据结构体系,而每一种数据结构都是继承体系中的一个子节点。 \0 h>!u
9Zl4NV&B
最后在这里我推荐几本我觉得比较出色的数据结构方面的教材: ;6PU
u]NsCHKlT
c>D~MCNxg
《数据结构与算法------面向对象的C++设计模式》 电子工业出版社出版。在amazon上是五星评价,个人认为其对数据结构的整体描叙和对各种应用算法十分出色。 UZs '[pm)
Jkj7ty.J
《Algorithm in c++ I-V》是RS的著作《Algorithm in c》的C++版本,完整的描叙了各种算法,amazon上五星评价,高等教育出版社有其影印版。 9*s8%pL
|
CFG<]
《data structrus in C++ with STL》 使用C++标准模板库来描叙数据结构,是使用泛型设计的方法描叙数据结构的一本全面教材。清华出版了中文版,但有其影印版。