📄 csdn_文档中心_数据结构与算法总论.htm
字号:
<P>先说说泛型设计的基本思想:泛型编程(generic
programming,以下直接以GP称呼)是一种全新的程序设计思想,和OO,OB,PO这些为人所熟知的程序设计想法不同的是GP抽象度更高,基于GP设计的组件之间偶合度底,没有继承关系,所以其组件间的互交性和扩展性都非常高。我们都知道,任何算法都是作用在一种特定的数据结构上的,最简单的例子就是快速排序算法最根本的实现条件就是所排序的对象是存贮在数组里面,因为快速排序就是因为要用到数组的随机存储特性,即可以在单位时间内交换远距离的对象,而不只是相临的两个对象,而如果用联表去存储对象,由于在联表中取得对象的时间是线性的既O[n],这样将使快速排序失去其快速的特点。也就是说,我们在设计一种算法的时候,我们总是先要考虑其应用的数据结构,比如数组查找,联表查找,树查找,图查找其核心都是查找,但因为作用的数据结构不同将有多种不同的表现形式。数据结构和算法之间这样密切的关系一直是我们以前的认识。泛型设计的根本思想就是想把算法和其作用的数据结构分离,也就是说,我们设计算法的时候并不去考虑我们设计的算法将作用于何种数据结构之上。泛型设计的理想状态是一个查找算法将可以作用于数组,联表,树,图等各种数据结构之上,变成一个通用的,泛型的算法。这样的理想是不是很诱惑人?
<BR><BR>泛型编程带来的是前所未有的弹性以及不会损失效率的抽象性,GP和OO不同,它不要求你通过额外的间接层来调用函数:它让你撰写完全一般化并可重复使用的算法,其效率与针对特定数据结构而设计的算法旗鼓相当。我们大家都知道数据结构在C++中可以用用户定义类型来表示,而C++中的模板技术就是以类型作为参数,那么我可以想象利用模板技术可以实现我们开始的GP思想,即一个模板函数可以对于各种传递进来的类型起作用,而这些类型就可以是我们定义的各种数据结构。泛型算法抽离于特定类型和特定数据结构之外,使得其适应与尽可能的一般化类型,算法本身只是为了实现算法其需要表达的逻辑本质而不去被为各种数据结构的实现细节所干扰。这意味着一个泛型算法实际具有两部分。1,用来描叙算法本质逻辑的实际指令;2,正确指定其参数类型必须满足的性质的一组需求条件。到此,相信有不少人已经开始糊涂了,呵呵,不要紧。毕竟GP是一种抽象度非常高的程序设计思想,里面的核心就是抽象条件成为成为程序设计过程中的核心,从而取代了类型这在OO里面的核心地位,正是因为类型不在是我们考虑的重点,类型成为了抽象条件的外衣,所以我们称这样的程序思想为泛型思想------把类型泛化。</P>
<P>(三)个人学习心得
<BR>至于如何学习数据结构,我个人认为合适的方法是,首先从根本上就要认识到数据结构的本质,数据结构和算法之间的密切关系,以及数据结构的应用方法。不然我们很可能陷入各种数据结构的复杂特性中却还根本不知道到底什么才是数据结构的本质,学了很多很久却其实什么都没有弄明白,在这里我说点我个人的一点关于数据结构本质的东西:
<BR><BR>学好数据结构最重要的是对程序设计方式和程序语言概念和实现的理解int i; <BR>int i[];
<BR>struct i{}; <BR>ADT i{}; <BR>到底有什么区别,这就是程序设计语言实现的问题了。
<BR>定义了一种数据类型就是定义了一类操作 <BR>int i,j;i=j+1;
<BR>这样的操作在语言本身中实现了,也就是说你不需要关心这样的操作程序语言是如何完成的,所以int就是基本数据类型
<BR><BR>抽象了基本数据类型的就是数据结构。 <BR>当你定义了 <BR>ADT P{};
<BR>的时候,比如如果P是链表,这就要你去实现它各种的操作。而且P能够完成的所有操作都必须由你去实现,而你实现得基础就是这些char
int float *p...基本数据类型。这就是抽象数据类型。 <BR>当你把类型定义完成后,剩下的就是算法去完成程序流程的控制。
<BR>所以:数据结构+算法=程序
<BR><BR>还想说点的是,设计思想,程序设计语言,和数据结构,始终是促进计算机软件科学发展的最大动力。一般来说都是思想先与语言,然后出现支持这种思想和包含这样思想的数据类型的语言实现。
<BR><BR>具体说: <BR>面向机器编程 机器语言,汇编语言 <BR>面向过程编程 C。。。。语言 <BR>面向对象编程 JAVA
C++ <BR>当然思想毕竟只是思想,你可以用不同的语言实现。但必须说明的是只能用一个层面上的语言实现。
比如,机器语言,由于其语言本身抽象层很低,低到了就像给一个对象赋值的操作也要程序员进行位操作。为在语言实现这个层面上,它不支持。
为什么说C也可以进面向对象的编程呢?关键就在C很好的支持ADT了。他可以用复杂了ADT去代替C++中已经变成基本数据类型的CLASS,但是正是因为要用C完成OO,必须程序员来实现(定义ADT)。所以说,C不适合开发OO软件。而C++却恰恰把CLASS定义成了一个基本类型,这样就完成了OO这一个层次的抽象。当然由于C++是C的超集,他同样是完全支持面向过程的。
<BR><BR>说了这么多,就是想说说
数据结构和程序语言和设计思想的关系。当我们能把数据结构的学习和程序设计语言,程序设计想法相联系起来的时候,我想我们对数据结构本身的认识已经更加深刻了,我们学习到每一种的新的数据结构的时候我们不再恐慌,因为我们知道了任何一种数据结构都有其共同的共性和特殊的特性,每一种数据结构都是为了一个领域所现实的,从这一方面来说,数据结构本身就具有继承特性,我们可以用一个继承树来表示一个完整的数据结构体系,而每一种数据结构都是继承体系中的一个子节点。
<BR><BR>最后在这里我推荐几本我觉得比较出色的数据结构方面的教材: <BR></P>
<P>《数据结构与算法------面向对象的C++设计模式》
电子工业出版社出版。在amazon上是五星评价,个人认为其对数据结构的整体描叙和对各种应用算法十分出色。
<BR><BR>《Algorithm in c++ I-V》是RS的著作《Algorithm in
c》的C++版本,完整的描叙了各种算法,amazon上五星评价,高等教育出版社有其影印版。 <BR><BR>《data
structrus in C++ with STL》
使用C++标准模板库来描叙数据结构,是使用泛型设计的方法描叙数据结构的一本全面教材。清华出版了中文版,但有其影印版。
<BR><BR></P><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>对该文的评论</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文档中心_数据结构与算法总论.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_数据结构与算法总论.files/ico_pencil.gif" width=16>
</SPAN> cuijingjun <I>(2003-8-7 10:46:28)</I>
</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>好文章,是一篇经典范文!
<BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_数据结构与算法总论.files/ico_pencil.gif" width=16>
</SPAN> Leowang <I>(2003-7-24 17:36:32)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>good,mark
<BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_数据结构与算法总论.files/ico_pencil.gif" width=16>
</SPAN> bruceteen <I>(2003-7-24 8:32:48)</I>
</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>好文,谢谢!
<BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_数据结构与算法总论.files/ico_pencil.gif" width=16>
</SPAN> asdmonster <I>(2003-7-24 6:35:53)</I>
</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>hehe,别人推荐来看看。
<BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_数据结构与算法总论.files/ico_pencil.gif" width=16>
</SPAN> ffgg <I>(2003-7-22 14:08:12)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>好 <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_数据结构与算法总论.files/ico_pencil.gif" width=16>
</SPAN> liagl <I>(2003-7-22 11:10:33)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3
width=532><BR>近来在研究数据的逻辑结构(关系),文中提到了三种(集合没有),1:1关系是线性结构,1:m关系是树形结构,m:n关系是网状结构。
还有两种逻辑结构文中没有提到,一种是Isa关系(is a kind of),一种是Asa关系(as a part
of),C++中就充分使用了这两种结构。 <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_数据结构与算法总论.files/ico_pencil.gif" width=16>
</SPAN> BluesLoveGoal <I>(2003-7-21 14:10:10)</I>
</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>多看,多用,多想
<BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_数据结构与算法总论.files/ico_pencil.gif" width=16>
</SPAN> williamkim <I>(2003-7-20 22:13:30)</I>
</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>It is very good! It is worth
storing up. <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_数据结构与算法总论.files/ico_pencil.gif" width=16>
</SPAN> bruceteen <I>(2003-7-20 18:00:08)</I>
</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>好 <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_数据结构与算法总论.files/ico_pencil.gif" width=16>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -