实例介绍
数据结构与算法,C#语言描述,中文版,很好的一本书。
目录 前言1 前提条件1 章节组织1 第1章 Collections类、泛型类和 Timin类概述18 11群集的定义18 12群集的描述18 121直接存取群集18 122顺序存取群集20 123层次群集21 12.4组群集22 13Co‖ ection base类22 131用 ArrayLists实现 Collection类22 132定义 Collection类23 1.33实现 Collection类23 14范型编程24 15时间测试25 151一个简单化的时间测试25 152用于NET环境的时间测试26 153 Timing Test类27 小结28 练习28 第2章数组和 Array Lists30 21数组基本概念30 2.1.1数组的声明和初始化30 212数组元素的设置和存取访问30 21.3取回数组元数据的方法和属性31 214多维数组31 215参数数组32 216锯齿状数组32 22 ArrayList类33 221 ArrayList类的成员34 222应用 ArrayList类34 ArrayList grades new arrayList((; 34 小结 练习36 第3章基础排序算法38 31排序算法38 311数组类测试环境38 312冒泡排序39 313检验排序过程40 314选择排序40 315插入排序41 32基础排序算法的时间比较42 小结43 练习43 第4章基础查找算法44 41顺序查找算 44 41.1查找最小值和最大值45 4.1.2自组织数据加快顺序查找速度 4,2叉查找算法47 4.3递归二叉查找算法48 小结49 练习49 第5章堆栈和队列50 51堆栈、堆栈的实现以及 STACK类50 51.1堆栈的操作50 512 Stack类的实现50 52 STACK类52 5,2.1 Stack构造器方法52 5.2.2主要的堆栈操作52 523Peek方法54 52.4C|ear方法54 525 Contains方法54 52.6 Copy To方法和 ToArray方法54 527 Stack类的实例:十进制向多和进制的转换54 53队列、 QUEUE类以及 QUEUE类的实现55 531队列的操作55 532 Queue的实现56 5.33 Queue类:实例应用56 5.34用队列存储数据58 5.35源自 Queue类的优先队列60 小结6 练习61 第6章 BitArray类63 61激发的问题63 62位和位操作63 621二进制数制系统64 6,2.2处理二进制数:按位运算符和位移运算符64 63按位运算符的应用 631位移运算符66 64整数转换成二进制形式的应用程序66 65位移的示例应用程序68 66 BITARRAY类69 661使用 BitArray类69 662更多 BitArray类的方法和属性70 67用 BITARRAY来编写埃拉托斯特尼筛法71 68 BITARRAY与数组在埃拉托斯特尼筛法上的比较72 小结 练习72 第7章字符串、 String类和 String Builder类73 7.15 TRING类的应用73 711创建 String对象73 712常用 String类的方法们73 7.1.3Sp[t方法和Join方法75 714比较字符串的方法76 7.1.5处理字符串的方法78 7.2 STRINGBUILDER类81 721构造 String Builder对象81 7.2.2获取并且设置关于 String Builder对象的信息81 7.23修改 String Builder对象82 7.3STR|NG类与 STRINGBUILDER的性能比较83 小结84 练习85 第8章模式匹配和文本处理86 81正则表达式概述86 811概述:使用正则衣达式86 82数量词87 83使用字符类88 84用断言修改止则表达式90 85使用分组构造 851匿名组90 852命名组91 85.3零宽度正向预搜索断言和零宽度反向预搜索断言91 8.6CAPTURESCOLLECTION E 92 87正则表达式的选项92 小结 练习93 第9章构建字典: Dictionary base类和 Sortedlist类94 91DCT| ONARYBASE类94 911 Dictionary Base类的基础方法和属性94 912其他的 Dictionary Base方法95 92通用的 KEYVALUEPAIR类96 935 ORTEDLIST类97 931使用 Sortedlist类97 小结97 练习98 第10章散列和 Hashtable类99 101散列概述99 102选择散列函数99 103查找散列表中数据100 104解决冲突101 1041桶式散列法101 1042开放定址法102 1043双重散列法102 105 HASHTABLE类102 1051实例化 Hashtable对象并且给其添加数据102 1052从散列表中分别取回关键字和数值103 1053取回基于关键字的数值103 1054 Hashtable类的实用方法104 106 HASHTABLE的应用程序:计算机术语表104 小结106 练习106 第11章链表107 111数组存在的问题107 112链表的定义 113面向对象链衣的设计108 1131Node类108 1132 Linkedlist类108 114链表设计的改进方案109 114.1双向链表110 114.2循环链表111 115使用「 TERATOR类113 1151新的 Linkedlist类114 1152实例化 Iterator类114 116通用的 LINKED LIST类和通用的NODE类117 1161通用链表实例117 小结118 练习118 第12章二叉树和二叉查找树119 121树的定义119 122二叉树120 1221构造二叉查找树120 12.22遍历叉查找树121 12.2.3在二叉查找树中查找节点和最大/最小值123 1224从BST中移除叶子节点123 1225删除带有个了节点的节点124 122.6删除带有两个子节点的节点124 小结126 练习127 第13章集合128 13.1集合的基础定义、操作及属性128 1311集合的定义128 1312集合的操作128 1313集合的属性128 132第一个用散列表的SET类的实现129 1321类数据成员和构造器方法129 1322Add万法129 1323 Remove方法和sze方法129 1324Unon方法129 1325 ntersection方法130 132.6 upset方法130 132.7 Difference方法130 1328测试CSet实现的程序130 133CSET类的 BITARRA实现131 1331使用 BitArray实现的概述131 1332 BitArray集合的实现132 小结13 练习133 第14章高级排序算法134 141希尔排序算法134 14.2归并排序算法135 143堆排序算法136 1431构造堆136 144快速排序算法138 1441快速排序算法的描述139 1442快速排序算法的代码 39 144.3快速排序算法的改进140 小结140 练习140 第15章査找的高级数据结构和算法141 151AL树141 151.1AVL树的基本原理141 1512AVL树的实现141 152红黑树143 1521红黑树规则143 1522红黑树的插入143 1523红黑树实现代码144 153跳跃表146 1531跳跃表的基木原理146 1532跳跃表的实现147 149 练习150 第16章图和图的算法151 161图的定义151 162由图模拟真实世界系统151 163图类151 1631顶点的表示152 1632边的表示152 1633图的构造152 1634图的第个应用:拓扑排序153 1635拓扑排序算法154 1636拓扑排序算法的实现154 164图的搜索156 1641深度优先搜索156 1642广度优先搜索157 165最小生成树158 1651最小生成树算法158 16.6查找最短路径159 1661加权图159 16.62桷定最短路径的 Dijkstra算法160 1663 Dijkstra算法的代码160 小结164 练习164 第17章高级算法165 17.1动态规划1 171.1动态规划实例:计算斐波纳契数列165 17.1.2寻找最长公共子串167 1713背包问题168 172贪心算法169 1721贪心算法实例:找零钱问题169 1722采用哈夫曼编码的数据压缩170 17.23用贪心算法解决背包问题174 小结176 练习176 索引177 第1章 Colllections类、泛型类和 Timing类概述 这本书采用C#语言米讨论数据结构与算法的开发和实现。书中用到的数据结构都可以在NET框架类库 System. collections中找到。木章会逐步展开群集的概念,首先是讨论自身特有的 Collection类(采用数组作为我们 实现的基础)的实现,接着会介绍NET框架中 Collection类的内容。 泛型是c#语言2.0版新增加的个重要补充。泛型允许C排#语言程序员可以独立地或者在·个类中编写函数的某 个版本,而且不需要为了不同的数据类型而多次负载此函数。C#语言2.0版还为个别几种 System. Collections数据 结构实现范型提供了一个专门的库 System. Collections. Generic。本章将向读者介绍泛型编程。 木章最后会介绍一种用户定制的类— Timing类。后续的儿个章节将会用此类来衡量数据结构与/或算法的性 能。此类将代替人O分析法的位置。这不是因为人O分析法不重要,而是因为本书采取了一种更为实用的方法来学 习数据结构与算法。 11群集( collection的定义 群集是一种结构化的数据类型。它存储数据,并且提供数据的添加、删除、更新操作,以及对群集的不同属性 值的设置与返回操作。 群集可以分为两类:线性的和非线性的。线性群集是一张元素列表,表中的元素顺次相连。线性群集中的元素 通常由位置来决定次序(例如,第一个元素、第二个元素、第三个元素,依次类推)。在现实世界中,购物清单就 是很好的线性群集实例。而在计算机世界中(当然这也是真实世界)则把薮组设计成线性群集。 非线性群集所包含的元素在群集内没有位置次序之分。组织结构图就像用架子垒好的台球一栟是一个非线性群 集的实例。而在计算机世界中树、堆、图和集都是非线性群集。 无论是线性的还是非线性的群集都拥有一套定义好的属性和操作的集合。其中,属性用来描述群集,而操作就 是群集能执行的内容。群集 Count就是群集属性的一个实例。它保存着群集中数据项的数量。这里把群集的操作称 为方法,它包括Add(即向群集添加新元素), Insert(即在群集指定的索引位置添加新元素)、 Remove(即从群集 中移除指定元素)、 Clear(即从群集中移除所有元素)、coη ntains(即确定指定元紊是否是群集的成员)、以及 Indexof (即确定指定元素在群集中的索引位置) 12群集( collection)的描述 在两种主要的群集类中有几个子类别。线性的群集可能是直接存取群集,也可能是顺序存取群集。而非线性的 群集既π以是层次群集,也可以是组群集。本小节就来讨论这些群集的关型。 121直接存取群集( collection 直接存取群集最常见的实例就是数组。这里把数组定义为具有相同数据类型的元素的群集,而且所有数组元素 如同图1-1说明的那样可以通过整数型索引直接进行存取访问。 Item o Item 1 Item 2 Item 3 Item Item n-1 图11数组 数组可以是静态的,这样当声明数组的时候便于针对程序的长度来固定指定元素的数量。数组也可以是动态的, 通过ReDm或者 ReDim preserve语句就可以增加数组元素的数量。 在C#语言中,数组不只是内置的数据类型,它还是一种类。在木章的后续部分,当详细分析数组使用的时候将 会讨论如何把数组作为类对象来使用 我们可以用数组来存储一个线性的群集。向数组添加新元素是很容易的,只要简单地把新元素放置在数组尾部 第一个空位上就可以∫。但是,在数组中插入一个元素就不是这么容易的(或高效)了。因为要给插入的儿素空出 位置,所以需要按顺序向后移动数组元素。从数组的尾部删除一个元素也是很有效率的操作,只要简单地移除掉最 后·个元素的值就可以了。但是,删除数组中任何其他位置上的元素就没有这么有效率了,就像处理插入操作样 为了保持数组中元素的连续性,可能需要先前调整许多数组元素的位冒。这些情况将在本章后续内容中进行讨 论。NE框架为简化线性群集的编程提供了一种专门的数组类 Array List第3章将会对此类进行分析研究。 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论