前    言
  数据结构是计算机及相关专业的核心课程,目前的教材普遍采用C++模板描述数据结构中的算法。数据结构又是一门理论与实践并重的课程,编程实现各种数据结构与算法,无疑是提升教学效果的有效途径之一。由于数据结构课程通常在大学二年级开设,学生的软件设计能力较弱,学生普遍反映算法实现困难。
  本书为初学者学习编写数据结构与算法程序而著,没有过多地讨论常规教材中已有的基本概念与基础理论,旨在使本书成为一本用于编程参考的工具书。
  本书采用标准C++ 98的模板技术实现算法,编程平台是Visual C++ 2010,其中控制台程序用本地C++编程,窗体程序用本地C++与C++/CLI混合方式编程,C++/CLI主要用于窗体界面的设计。所有程序均在Windows 10系统中调试通过。
  全书共7章,内容依次为线性表、栈和队列、字符串和多维数组、树和二叉树、图、查找、排序。书中共有例程57个,其中控制台程序21个,窗体程序36个,部分窗体程序可用于教学演示。具体章节的组织与内容如下。
  第1章介绍了顺序表、单链表、循环双链表和静态链表类模板及相关算法的设计与实现,此外还设计了单链表窗体演示程序和一元多项式求和应用程序。
  第2章介绍了顺序栈、链栈、循环队列和链队列类模板的设计与实现。顺序栈窗体演示程序和循环队列窗体演示程序可用于教学演示。进制转换和舞伴配对问题分别介绍了栈与队列的应用。
  第3章首先介绍了BF模式匹配算法和KMP模式匹配算法的实现。其次介绍了对称矩阵的压缩存储、三元组表法和十字链表法进行矩阵压缩存储的实现,其中十字链表法为窗体程序,可用于教学演示。最后介绍了奇数阶幻方矩阵的实现。
  第4章介绍了二叉树用顺序存储和链表存储结构实现的类模板,此外还给出了用于教学演示的窗体程序。在线索二叉树一节,介绍了中序线索二叉树的实现。此外,还介绍了二叉树遍历的非递归算法以及哈夫曼树的实现。
  第5章介绍了图的邻接矩阵、邻接表和十字链表存储结构,以及深度优先遍历和广度优先遍历算法的实现。用C#语言设计了顶点与边的自定义控件,供窗体程序引用。图中一些重要的算法均用窗体程序给予了实现,包括Prim算法、Kruskal算法、Dijkstra算法、Folyd算法、拓扑排序算法和关键路径算法。最后介绍了七巧板涂色问题的实现。
  第6章介绍了顺序、折半、二叉排序树和散列表等查找算法的实现,其中折半查找、树表查找、平衡二叉排序树调整、闭散列表和开散列表查找等窗体程序可用于教学演示。最后介绍了MD5散列算法在密码保护上的应用。
  第7章介绍了插入、交换、选择、归并和分配几大类排序算法的实现,所有程序均为窗体程序,可用于教学演示。实现的算法有直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、二路归并排序、桶排序和基数排序等。最后介绍了荷兰国旗问题的实现。
  书中例程绝大多数源自作者从事数据结构课程教学的积累。教材编写力求简明易懂,并为关键部分代码加了注释。书中源代码均可从清华大学出版社官网下载。
  限于作者水平,书中不足之处在所难免,敬请读者批评指正。
  
  
编  者