《数据结构(C#语言描述)》

本文转载自abatei,数据结构学了很多次,但是只是知道硬性的概念,现在专攻C#语言,对编程语言也有了更深的认识,

买一本C#的数据结构来看看,再一次加深对数据结构的学习,真是一件让人高兴的事。

当当网可购买到,无需网上银行,可送货上门,货到付款

购买地址:

http://product.dangdang.com/product.aspx?product_id=20544747

如对本书有什么意见和建议可到概述作者的博客留言

http://cgbluesky.blog.163.com/

这是本书目录,另外之前也发布过一集二叉树的非递归遍历算法视频给大家试看,新的下载地址如下:

http://www.fileupyours.com/files/219335/5-2.swf

第1章       绪论

1.1 什么是数据结构

1.1.1   数据结构的产生与发展

1.1.2   数据和数据结构

1.1.3   数据的逻辑结构

1.1.4   数据的存储结构

1.2 算法与算法分析

1.1.5   算法

1.1.6   算法设计的目标

1.1.7   算法的时间复杂度

1.1.8   算法的空间复杂度

1.3 本章小结

1.4 习题

第2章       线性表

2.1 线性表的定义

2.2 线性表的顺序存储结构---顺序表

2.2.1 顺序表的特点

2.2.2 数组

视频2-1

2.2.3 剖析System.Collections.ArrayList

视频2-2

2.2.4 类型安全

2.3 线性表的链式存储结构---链表

2.3.1 单向链表

视频2-3

2.3.2 循环链表

视频2-4

2.3.3 双向链表

视频2-5

2.4 本章小结

2.5 实训指导:虚拟线性表

视频2-6

2.6 习题

第3章  栈和队列

3.1 栈

3.1.1 栈的概念及操作

3.1.2 剖析System.Collections.Stack

视频3-1

3.1.3 栈的应用

视频3-2

3.1.4 双向栈

3.2 队列

3.2.1 队列的概念及操作

3.2.2 循环队列

3.2.3 剖析System.Collections.Queue

视频3-3

3.3 本章小结

3.4 实训指导:虚拟循环队列

视频3-4

3.5 习题

第4章  

4.1 串的基本概念

4.2 String

4.3 System.Text.StringBuilder

4.4 串的模式匹配

4.4.1 Brute-Force算法

视频4-1

4.4.2 KMP算法

视频4-2

视频4-3

4.5 本章小结

4.6 实训指导:求最长公共子串

视频4-4

4.7 习题

第5章  

5.1 树的基本概念

5.1.1 树的定义

5.1.2 树的表示

5.1.3 树的基本术语

5.2 二叉树

5.2.1 二叉树的基本概念

5.2.2 二叉树的存储结构

5.3 二叉树的遍历

5.3.1 二叉树的深度优先遍历

视频5-1

5.3.2 二叉树的广度优先遍历

视频5-2

5.4 线索二叉树

5.4.1 线索二叉树的定义

5.4.2 中序线索二叉树

视频5-3

5.5 树和森林

5.5.1 树的存储结构

5.5.2 森林、树、二叉树的相互转换

视频5-4

5.6 可绘制二叉树的设计

5.6.1 二叉树的结点的位置关系

5.6.2 接口设计

5.6.3 二叉树绘制类的设计

5.6.4 实现可绘制二叉树

5.7 二叉树的画树算法

5.7.1 满二叉树画法

视频5-5

5.7.2 界内画法

5.7.3 最小面积画法

5.8 本章小结

5.9 实训指导:虚拟二叉树

视频5-6

5.10 习题

第6章 

6.1 基本概念和术语

6.2 图的存储结构

6.2.1 邻接矩阵表示法

6.2.2 邻接表表示法

6.3 图的遍历

6.3.1 深度优先搜索遍历

6.3.2 广度优先搜索遍历

6.3.3 非连通图的遍历

6.4 生成树和最小生成树

6.4.1 生成树

6.4.2 最小生成树

6.4.3 普里姆算法

视频6-1

6.4.4 克鲁斯卡尔算法

视频6-2

6.5 最短路径

6.5.1 单源点最短路径

视频6-3

6.5.2 所有顶点之间的最短路径

视频6-4

6.6 本章小结

6.7 实训指导:迷宫最短路径问题

视频6-5

6.8 习题

第7章  查找

7.1 查找的基本概念

7.2 顺序查找

7.3 二分查找

7.3.1 二分查找的基本原理

视频7-1

7.3.2 二分查找的算法实现

7.3.3 Array.BinarySearch方法

7.3.4 剖析System.Collections.SortedList

7.4 分块查找

视频7-2

7.5 二叉查找树

7.5.1 二叉查找树的定义

视频7-3

7.5.2 二叉查找树的查找

7.5.3 二叉查找树的插入

7.5.4 二叉查找树的删除

7.5.5 二叉查找树的代码实现

7.6 本章小结

7.7 实训指导:Array.BinarySearch的使用

7.8 习题

第8章          哈希表

8.1 概念引入

8.2 构造哈希函数的方法

8.2.1 直接定址法

8.2.2 数字分析法

8.2.3 除留余数法

8.3 哈希冲突解决方法

8.3.1 闭散列法(开放地址法)

8.3.2 开散列法(链地址法)

8.4 剖析System.Collections.Hashtable

视频8-1

8.4.1 Hashtable的实现原理

8.4.2 Hashtable的代码实现

8.5 剖析Dictionary<TKey, TValue>

视频8-2

8.5.1 Dictionary<TKey, TValue>类实现原理

8.5.2 Dictionary<TKey, TValue>的代码实现

8.6 本章小结

8.7 实训指导:虚拟哈希表

视频8-3

8.8 习题

第9章          排序

9.1 排序的基本概念

9.2 插入排序

9.2.1 直接插入排序

视频9-1

9.2.2 希尔排序

视频9-2

9.3 交换排序

9.3.1 冒泡排序

视频9-3

9.3.2 快速排序

视频9-4

9.4 选择排序

9.4.1 直接选择排序

视频9-5

9.4.2 堆排序

视频9-6

9.5 归并排序

视频9-7

9.5.1 二路归并排序

9.5.2 二路归并排序的实现

9.6 本章小结

9.7 实训指导:使用IComparer<T>接口进行排序

视频9-8

9.8 习题

第10章        综合实训---八数码问题

10.1 什么是八数码问题

10.2 八数码问题的解析

视频10-1

10.2.1 从初始状态到达目标状态是否有解

10.2.2 使用什么方法求解八解码问题的最优解

10.2.3 如何避免重复访问一个状态

10.2.4 怎样记录查找路径

10.2.5 使用什么数据结构表示棋盘状态

10.3 设计目标

10.4 界面设计

视频10-2

10.5 代码编写

视频10-3

10.5.1 MoveDirection.cs

10.5.2 AIResult.cs

10.5.3 HashHelpers.cs

10.5.4 SimpleDictionary.cs

10.5.5 NumSwitch.cs

10.5.6 IEightNumAI.cs

10.5.7 BFS_AI.cs

10.5.8 MainForm.cs

10.6 调试运行

10.7 思考与改进

时间: 2024-08-22 06:31:41

《数据结构(C#语言描述)》的相关文章

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

IOS测试框架之:athrun的InstrumentDriver源码阅读笔记

athrun的InstrumentDriver源码阅读笔记 作者:唯一 athrun是淘宝的开源测试项目,InstrumentDriver是ios端的实现,之前在公司项目中用过这个框架,没有深入了解,现在回来记录下. 官方介绍:http://code.taobao.org/p/athrun/wiki/instrumentDriver/ 优点:这个框架是对UIAutomation的java实现,在代码提示.用例维护方面比UIAutomation强多了,借junit4的光,我们可以通过junit4的

Yii源码阅读笔记 - 日志组件

?使用 Yii框架为开发者提供两个静态方法进行日志记录: Yii::log($message, $level, $category);Yii::trace($message, $category); 两者的区别在于后者依赖于应用开启调试模式,即定义常量YII_DEBUG: defined('YII_DEBUG') or define('YII_DEBUG', true); Yii::log方法的调用需要指定message的level和category.category是格式为“xxx.yyy.z

源码阅读笔记 - 1 MSVC2015中的std::sort

大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格式化,去掉或者展开用于条件编译或者debug检查的宏,依重要程度重新排序函数,但是不会改变命名方式(虽然MSVC的STL命名实在是我不能接受的那种),对于代码块的解释会在代码块前(上面)用注释标明. template<class _RanIt, class _Diff, class _Pr> in

CI框架源码阅读笔记5 基准测试 BenchMark.php

上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功能,各模块之间可以相互调用,共同构成了CI的核心骨架. 从本篇开始,将进一步去分析各组件的实现细节,深入CI核心的黑盒内部(研究之后,其实就应该是白盒了,仅仅对于应用来说,它应该算是黑盒),从而更好的去认识.把握这个框架. 按照惯例,在开始之前,我们贴上CI中不完全的核心组件图: 由于BenchMa

CI框架源码阅读笔记2 一切的入口 index.php

上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里这次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1.       设置应用程序环境 define('ENVIRONMENT', 'development'); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch case代码块中

Apache Storm源码阅读笔记

欢迎转载,转载请注明出处. 楔子 自从建了Spark交流的QQ群之后,热情加入的同学不少,大家不仅对Spark很热衷对于Storm也是充满好奇.大家都提到一个问题就是有关storm内部实现机理的资料比较少,理解起来非常费劲. 尽管自己也陆续对storm的源码走读发表了一些博文,当时写的时候比较匆忙,有时候衔接的不是太好,此番做了一些整理,主要是针对TridentTopology部分,修改过的内容采用pdf格式发布,方便打印. 文章中有些内容的理解得益于徐明明和fxjwind两位的指点,非常感谢.

CI框架源码阅读笔记4 引导文件CodeIgniter.php

到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理. 这之中,CodeIgniter.php做了哪些工作?我们一步步来看. 1.    导入预定义常量.框架环境初始化 之前的一篇博客(CI框架源码阅读笔记2 一切的入

jdk源码阅读笔记之java集合框架(二)(ArrayList)

关于ArrayList的分析,会从且仅从其添加(add)与删除(remove)方法入手. ArrayList类定义: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Monaco } span.s1 { color: #931a68 } public class ArrayList<E> extends AbstractList<E> implements List<E> ArrayList基本属性: /** *

dubbo源码阅读笔记--服务调用时序

上接dubbo源码阅读笔记--暴露服务时序,继续梳理服务调用时序,下图右面红线流程. 整理了调用时序图 分为3步,connect,decode,invoke. 连接 AllChannelHandler.connected(Channel) line: 38 HeartbeatHandler.connected(Channel) line: 47 MultiMessageHandler(AbstractChannelHandlerDelegate).connected(Channel) line: