基本信息
- 原书名:Data Structures and Algorithms Using C#
- 原出版社: Cambridge University Press
编辑推荐
“这是一本绝佳的介绍C#语言数据结构的优秀著作,对于数据结构课程极具价值!”
——CHOICE杂志
随着.NET框架的广泛应用,C#已经成为最受欢迎的程序设计语言之一。但是,市面上尚无用C#语言讲述数据结构和算法的图书,广大C#程序员不得不将自 己转换C++或Java描述的数据结构,费时费力,而且容易出错。
本书填补了这一空白。而且更加难能可贵的是,作者基于自己多年的教学和实践经验,从开发实战出发,采用了一种与一般数据结构图书不同的讲解方式:充分利 用.NET框架中现成的数据结构类,先讲述各种数据结构怎么在开发中选用,怎样用来解决实际问题,在有了感性认识之后,再深入研究如何实现;同时,用更加 实用的时间测试方法代替常规的大O表示法来分析算法性能,避免了复杂的数学推导。书中除涵盖了数组、广义表、链表、散列表、树、图、排序、搜索等常规数据 结构和算法外,还讨论了概率和动态规划等方面的高级算法。
中文版对原书的代码进行了全面的调试,改正了不少原版存在的问题,保证了代码的质量和技术内容的准确性。
本书是C#程序员不可或缺的实用参考书,也适合作为应用型高校相关专业.NET平台开发课程的教材。
内容简介
作译者
目录
1.1 群集的定义
1.2 群集的描述
1.2.1 直接存取群集
1.2.2 顺序存取群集
1.2.3 层次群集
1.2.4 组群集
1.3 CollectionBase类
1.3.1 用ArrayList实现Collection类
1.3.2 定义Collection类
1.3.3 实现Collection类
1.4 泛型编程
1.5 时间测试
1.5.1 一个简单化的时间测试
1.5.2 用于.NET环境的时间测试
1.5.3 Timing Test类
小结
练习
第2章 数组和ArrayList
2.1 数组基本概念
译者序
译者在翻译过程中对原书代码进行了测试运行,发现了一些问题,并进行了相应的修正。如有不当之处,恳请读者指正。..
全书的翻译工作主要由吕秀锋负责,崔睿对本书代码进行了测试并做了大量的修正。在本书的翻译过程中,得到了许多人的帮助。首先要感谢人民邮电出版社图灵公司的杨海玲编辑在翻译过程中提供的各种建议和帮助,同时还要感谢罗婧编辑在编辑过程中所做的大量细致入微的工作。
受译者的水平所限,本书翻译中的疏漏或不当之处在所难免,敬请广大读者及同行批评指正。...
译 者
2009年2月
前言
C#语言根植在一个功能非常丰富的.NET框架开发环境中。在.NET框架类库中包含有一套数据结构类(也称为群集类),这套类的范围广泛,从Array 类、ArrayList类和Collection类到Stack类和Queue类,再到HashTable类和SortedList类。学习数据结构与算 法的学生在学习如何实现它们之前可以先看看如何使用数据结构。以前,老师在构建完整的栈数据结构之前只能抽象地讲解栈的概念,而现在老师可以通过向学生们 展示如何用栈执行一些计算(如数制之间的转换),立即展示数据结构的实用工具。有了这些知识后,学生可以在课后学习数据结构(或算法)的基本原理,甚至可 以构造他们自己的实现。
本书主要提供了对数据结构与算法的实用概述,这是所有计算机程序员们需要知道和了解的。基于这个原因,本书没有涵盖数据结构与算法的正规分析。因此,本书 没有一个数学公式,也一次都没有提及大O分析(如果你不知道大O分析的含义,查看参考文献中提到的任何一本书都可以)。相反,本书把各种数据结构与算法作 为求解问题的工具。书中讨论的数据结构与算法都用简单的时间测试进行了性能比较。
前提条件
阅读本书的唯一前提条件就是需要读者对C#语言有大概的了解,尤其是要了解一些用C#进行面向对象编程的知识。
章节组织
第1章向读者介绍数据结构作为数据群集的概念。介绍了线性和非线性群集的概念。示范说明了Collection类。这章还介绍了泛型编程的概念,它允许程 序员编写一个类或一种方法,然后用于众多数据类型。泛型编程是C#语言一种重要的新特性(在C# 2.0及更高版本中可用)。这种特性是如此重要以至于在System.Collections.Generic命名空间中存在一个专门的泛型数据结构库。 当数据结构具有在此库中能找到的泛型实现时,我们就会讨论它的用途。这章结尾处介绍了衡量书中讨论的数据结构与算法性能的方法。..
第2章回顾了构造数组的方法,并且用示例说明了Array类的特性。Array类把许多与数组相关的函数(UBound函数、LBound函数等)封装到单独一个包中。ArrayList是数组的一种特殊类型,它支持动态调整大小。
第3章介绍了基础排序算法,如冒泡排序和插入排序;而第4章则研究了用于内存查找的最基本的算法,即顺序查找和二叉查找。
第5章探讨了两种经典的数据结构:栈和队列。这章的重点是这些数据结构在解决日常数据处理问题中的实际应用。第6章介绍了BitArray类,这种类可用来有效地表示大量整型数值,比如测试成绩。
数据结构的书中通常不介绍字符串,但是本书第7章介绍了字符串、String类和StringBuilder类。这是因为在C#语言中许多的数据处理是在 字符串上执行的,读者应该了解基于这两种类的特殊方法。第8章分析了用于文本处理和模式匹配的正则表达式的使用。与较传统的字符串函数和方法相比,正则表 达式常常会提供更强大且更有效的处理。
第9章向读者介绍把字典作为数据结构来使用。字典和基于字典的不同数据结构把数据作为键值对来存储。这章向读者说明了如何创建基于 DictionaryBase这个抽象类的自定义类。第10章介绍了散列表和HashTable类。HashTable类是字典的一种特殊类型,它在内部 用散列算法存储数据。
链表作为另外一种经典的数据结构是在第11章介绍的。C#语言中的链表并不像在C++这样的基于指针的语言中的链表那样重要,但是它仍然在C#编程中发挥 着作用。第12章为读者介绍了另一种经典数据结构—二叉树。二叉查找树作为二叉树的特殊类型将是这章的主要内容,其他二叉树类型在第15章进行介绍。
第13章向读者说明在集合中存储数据的方法。这种方法在数据结构只存储具有唯一性的数据值的情况下是很实用的。第14章涵盖了更多高级排序算法,包括流行 且高效的快速排序算法QuickSort,此算法是大多数在.NET框架库中实现的排序过程的基础。第15章会看到3种数据结构:AVL树、红黑树和跳跃 表。在无法使用二叉查找树的时候,这3种数据结构对查找是很有用的。
第16章讨论了图以及图的算法。图在表示许多不同的数据类型时非常有用,特别是网络。最后,第17章向读者介绍算法设计技巧的精髓:动态算法和贪心算法。
致谢
在这里我要感谢帮助我完成本书的各界人士。首先,我要感谢听我讲授数据结构与算法开发课程的学生们,他们是(排名不分先后):Matt Hoffman、Ken Chen、 Ken Cates、Jeff Richmond和Gordon Caffey。此外,要感谢我在Pulaski技术学院(Pulaski Technical College)的同事Clayton Ruff,他多次旁听我的课程并且提出了极好的建议和批评。我还要感谢院长David Durr和系主任Bernica Tackett支持我的写作工作。同样,我还要感谢我的家人在我全身心投入研究和写作时对我的宽容与支持。最后,我要感谢剑桥大学出版社的编辑 Lauren Cowles和Heather Bergman,感谢他们容忍我的许多问题、内容更改,以及习惯成自然地交稿延迟。...
媒体评论
——CHOICE杂志...