现实生活中的数据如何在计算机世界中组织、存储和运算?这是计算机自诞生以来人们普遍关心的一个问题。数据结构这门学科很好地回答了这个问题。它以现实生活中的数据为对象,在研究其特征的基础上采用合理的数据集合的组织方式,设计合理的方法来表达这些数据,为数据集合选择适当的逻辑结构、存储结构及相应的处理算法,并给出相应算法的时间、空间复杂度的分析方法,以期培养良好的程序设计风格。
作为信息科学领域内程序设计的一门重要理论技术基础,数据结构不仅仅是计算机、自动化等理工类学科的核心课程,它已开始渗透到信息管理与信息系统、电子商务等与计算机相关的非理工类学科领域,逐渐成为一门跨学科的计算机类专业课程。
本书编写特色
目前市面上介绍数据结构的教材很多,但多半针对计算机专业的学生,如何针对非计算机专业的学生开设这门课程,成为各高校普遍关心的问题。我们在多年从事信息管理与信息系统、电子商务等专业教学的基础上,从读者的角度出发,精心编写了本教程。在整本教材的编写过程中,我们注意把握以下特色:
(1) 深入浅出的讲解方法。本书在叙述时,努力回避复杂的数学定义与推导,以读者都熟悉的C语言作为数据结构和算法的描述语言,采用通俗易懂的方式叙述各种数据结构的概念,包括数据结构的定义、逻辑结构、物理存储和基本运算,并通过实例来讲述运用抽象的理论来解决实际问题。使没有学过离散数学、图论、概率论等计算机和数学类基础课程的读者都能顺利地完成本书内容的学习。
(2) 丰富的实例和习题。数据结构通常被认为是一门较为枯燥、较难学习的课程。为了提高读者对这门课程的兴趣,本书在编写时尽量结合现实生活安排一些有趣的实例,如线性表一章中的多项式计算、栈与队列一章中的舞伴问题和迷宫问题、树一章中的信息加密问题等。 同时为了便于内容的掌握和一些读者进一步深造(如考研和考程序员等)的需要,每章在最后都设计有丰富的习题,并按填空题、判断题、选择题、问答题和上机题等进行了系统的分类。
(3) 图文并茂的编写方法。针对树、图等数据结构中一些较复杂的动态算法,精心设计了图例,力争以丰富的静态图表来表达动态的算法运行过程,并对这些算法加上详尽的文字说明。
本书内容设置
全书共分10章,具体内容如下:
第1章从实例入手,介绍了数据结构的基本概念,并阐述了算法的设计要求、时间复杂度、空间复杂度等相关概念。
第2章介绍了线性表的概念及基本操作,并讨论了线性表的顺序存储结构及其相关运算,接着介绍了线性表的链式存储,包括单链表、循环链表、双向链表,最后探讨了数组与特殊矩阵的存储与运算方法。
第3章介绍了栈和队列的概念及基本操作,然后介绍了二者的一些主要应用。
第4章在介绍串的概念与运算的基础上,讲述了串的定长顺序存储、堆分配存储、块链存储等3种存储方式,并给出了应用实例。
第5章介绍了树、森林、二叉树的概念及基本操作,给出了其逻辑结构与物理存储方法,最后讲述了哈夫曼树及其应用。
第6章介绍了图的概念及存储方法,讲述了图的深度优先搜索和广度优先搜索两种遍历方法,最后探讨了图的最小生成树、关键路径、最短路径等具体应用。
第7章介绍了查找的相关概念,并探讨了静态查找表、动态查找表、哈希表等多种查找方法。
第8章介绍了内部排序的相关概念,并探讨了插入排序、交换排序、选择排序、基数排序等多种查找方法。
第9章介绍了外部排序的相关概念,并探讨了磁盘和磁带两种外部排序的方法。
第10章介绍了文件的基本概念,并介绍了顺序文件、索引文件、ISAM和VSAM文件、散列文件和多关键字文件。
编写情况
本书由张瑞军担任主编,张文萍担任副主编,邓洪、王静参与了编写工作。具体分工如下: 本书第1、第5、第6章由张瑞军编写; 第2、第3、第4章由张文萍编写; 第8、第9章由邓洪编写; 第7、第10章由王静编写。本书在编写过程中,参考了清华大学严蔚敏教授、西北大学耿国华教授以及其他各兄弟院校编写的《数据结构》教材,并翻阅了大量的中英文论文,在此一并表示感谢。
限于自身水平,全体参编人员虽全身心投入,书中错误和不足之处在所难免,恳请读者批评指正。
编者
2009年1月