用简单问题来说明C语言语法,会使用户很快掌握语法的使用方法。如果不结合具体问题讲语法,则学生会感到空洞没味道,更谈不上会用语法写程序。程序设计的目的是让学生学会编程,因而应紧紧围绕这个目的展开讲解。过多的文字说明只会把要点淹没,让学生在文字堆里找要点。枯燥的讲解语法就像学英语时的死记单词,结合程序理解语法就像结合句子记单词。用程序来说话(在程序中加注释),比用大篇幅的文字说明更切题,学生印象更深刻。用一个简单的问题来说明一个复杂的语法,是学习程序设计的最好方法。本书正是在这个指导思想下,在教学实践中产生的。
本书力求把C语言中难学的部分(如函数的参数传递、二级指针、二维数组的指针表示、静态变量和外部变量等)讲得通俗易懂,把问题的本质揭示给读者。例如,初学者对函数参数的所谓“单向传递”和“双向传递”(大部分书都这样说),感到不好理解。不好理解的原因是所谓“单向传递”和“双向传递”没有把问题的本质揭开。
本书对函数的参数传递有这样的描述:函数调用分“值调用”和“地址调用”两种,函数调用中的“值调用”和“地址调用”是理解函数调用的关键。函数调用中的经典经验如下。
(1) 值调用。指的是\传送给\的是值。这时,即使主程序中的变量和函数中的变量同名,但它们不在同一个地址上,函数中变量的值发生改变,并不会改变主程序中变量的值。当从函数返回到主程序后,函数中变量的值被释放(静态变量除外),这时,在主程序中看不到在函数中被改变的值(静态变量除外),即所谓的单向传递。
(2) 地址调用。指的是\传送给\的是地址。这时函数中的变量和主程序中的变量是在同一个地址上(与变量是否同名无关),同一个地址上的内容发生变化,在函数中和在主程序中的效果是一样的,即所谓的双向传递。 为了证明以上经典经验,书中程序特意将“值调用”和“地址调用”的地址(函数中变量的地址和主程序中变量的地址)显示,以证明以上经典经验。用户掌握了函数参数传递的本质后,一切问题都解决了。
数据结构序言 书中对三维数组和三维数组的指针表示(这部分内容很少有书讲述)给出了重要概念,使二维数组和三维数组显得简单。三维数组学会之后,多维数组的用法也类似。
本书重要部分先给出C语言语法描述,再用一个个完整的程序例子教学生如何编程。一个完整的程序实例胜过几百个汉字的文字说明。本书用完整的程序实例说明问题,课堂上边讲解边演示,并随时修改程序,回答学生的提问。书中所有程序都调试通过(每个程序尾都有运行结果)并附有汉字注释。有些程序尾附有说明。
高级语言的种类很多,目前,国内高校都将 C语言作为计算机语言的基础课,计算机等级考试必考C语言,因而C语言的读者面很广。学好C对学C++是有很大帮助的。
书中程序可以在TC和Visual C++ 6.0环境下运行。书中的程序书写规范,让用户读起来很舒服。例如,大括号上下对齐(不在语句的后面加括号),稍复杂一点的问题就用图示说明。
作者2008年4月2日于南京
前 言
数据结构是计算机科学各专业以及其他相近专业的核心课程之一,其研究对象为问题求解方法、程序设计方法和典型的数据结构算法。
本书根据现代教育教学特点,充分考虑到一般本科院校学校计算机及其相关专业的现状,严格遵循教育部计算机及相关专业研究生考试大纲的要求,吸收国外教材的一些新思想,既有创新,又兼顾了传统教材的优点。把教师的教学要求与学生学习、实际工作需要和进一步深造等需求紧密结合起来。
本书既考虑数据结构的组织方式,又强化算法的实践与应用。采用自上而下的设计方法,从抽象的数据结构描述到数据结构的组织,再到操作的具体实现,并通过实例说明应用方法。这种组织方法的目的是:为了使学生在学习过程中更好地分析研究计算机加工数据的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作方法,通过程序设计实现相应的算法,求得相关问题的解,并能掌握算法的时间分析和空间分析技术。使学生通过实现算法的复杂程序训练,编写出结构清晰、正确易读、符合软件工程规范的程序。使教师方便组织教学内容,教学过程结构清晰,内容循序渐进易于讲解。
本书使用标准C++作为数据结构和算法的描述语言。采用C++语言中的类来表示抽象数据类型(ADT) ;尽可能用C++的类和面向对象结构来实现数据结构的算法。对基本的数据结构采用面向对象的方法,将数据与对象封装成类,以便在其他应用程序中直接使用。
本书读者应已经修完程序设计课程并熟悉标准C++语言,所使用的C++代码均在VC++编译器上全部通过测试。
本书是多位老师多年来从事数据结构教学的智慧和经验的结晶,提供了丰富的教学辅助手段,其配套教材有《数据结构实践教程》和《数据结构学习指导与习题集》,同时由清华大学出版社出版。这些辅助教材为数据结构课程的教学和学习提供了有效的保障。 数据结构前言 本书第1章、第6章和第7章由管致锦编写,第2章~第5章由徐慧编写,第8章和第9章由陈德裕编写,全书的统稿由管致锦负责。杭月芹、顾颀、周建美、丁卫平、陈苏蓉、顾卫江、丁红、章雅娟、周洁、朱颖等对本书进行了详细审阅,并提出了宝贵意见。聂志浪、赵戈杰、凡刚、陈惊雷、禹杰等同学完成了本书大部分算法代码的测试工作。
本书及其配套教材编写和实践过程历时3年,尽管做了大量的努力,也难免存在不妥和错误之处,恳请读者予以指正,我们也会在适当时间进行修订和补充,同时对教材中引用和参考的其他同行的文献资料在此一并致以感谢。
编 者2009年12月