很多朋友抱怨说严蔚敏的书很难,复习效果不理想。我现在一面在讲大家要耐心,要多查多问,而转过头来看到那些符号,想起自己当初C语言60分的成绩,初学数据结构的茫然,一步一步爬过来的辛苦,于是有了写个数据结构入门的想法,但愿对刚刚入门C语言基础不好和大跨考的朋友们有所帮助,数据结构复习已经进入正常轨道的朋友可以飘过。
我重新审视严书,概念与文字描述的内容都是易懂的,而算法与程序往往是卡住我们的地方。我试着解释每个符号的含义,C语言的基础知识点,图论中的难点,等等。但应该很少会涉及概念性的知识点。
本节主要讲了结构体定义的N种不同写法,类型定义符typdef的用法,引用机制。
P9页例1-6
在C语言中,最简单的结构体是这样的:
现在添加一个成员函数(这实际上是C++的内容),即数据结构中所谓的基本操作,如下: 关于函数和if..else…语句的知识请参阅C语言课本,这个不用解释的吧。下面给出完整的程序,来描述这个结构是如何被使用的。当我说到“完整的程序”的时候,你完全可以在VC++6.0上来运行它。 结构体的知识暂时介绍这些,对于理解例1-6的结构已经够用了。
在此强调一点,严书上的程序都是伪代码描述,完全COPY到程序里是肯定不能执行的。 ADT Triplet可以理解为结构体名称,ADT即为书中前文提到的Abstract Data Type,而Triplet即为三元组,函数InitTriplet(&T,v1,v2,v3),此外伪代码并未指明返回值,需要解释一下的是符号&的含义,&在C++中表示引用,完整的程序如下: 实际上函数f执行后,a=100,b=1,这就是引用符&的作用。实际上,在C语言中,&是地址符,C中的地址与指针的传递过程过于复杂,不作解释以免添乱,而这也正是C++中引入引用机制的原因。
实际上这个例题很简单,选择它只是为了引出结构体和引用机制的知识点,如果还有需要解释的地方,请告诉我!
P10页(1)—(11)
(1) 命令define的详细作用请参阅C语言课本,此处只作简单说明:
#define TRUE 1的效果是,在预编译的时候,程序中所有的“TRUE”都被机械的替换为1,1代表真值。(在控制台程序中TRUE不被支持,而在windows编程中TRUE与true等同。)
类型定义符typedef,详细请参阅C语言课本。 定义一个变量时,Status a;与int a;的效果是相同的,类型定义符typedef只是为了使用上的方便,在windows编程中你会见到大量的类型定义。
下面请注意了,讲到数据结构严书中经常会见到的结构体定义方法。
如下面这个使用了类型定义符的结构体定义: 其核心实际上就是前面已经讲过的 只不过把名称ADT换成了node。
这里typedef的作用:
将类型struct node{}重定义为Point;
将类型struct node {}*重定义为lPoint;(typedef struct node{}* lPoint
![](http://writeblog.csdn.net/images/smilies/default/wink.gif)
注意此处Point与lPoint的名称不能相同,前者是结构体名称,后者是结构体指针名称。
在此处,可以省略struct后面的结构体名称node,写成如下形式: 下面是完整的程序,来描述结构体是如何被使用的。 书中还会看到: 这里的node不能省略,其余不再做过多的解释。有关指针与内存分配的知识点,将在以后章节中讲到。
严书从(2)到(11)是把C语言的知识简单带过