上一页 1 2 3 4 5 6 ··· 9 下一页
摘要: 本部分总结前面介绍的数据结构和算法,并讨论在不同的情况下如何进行选择。通用数据结构:数组、链表、树、哈希表专用数据结构:栈、队列、优先级队列排序:插入排序、希尔排序、快速排序、归并排序、堆排序图:邻接矩阵、邻接表外部存储:顺序存储、索引文件、B-树、哈希方法1 通用数据结构 若想存储真实世界中的类似人事记录、存货目录、合同表或销售业绩等数据,则只需要一般用途的数据结构。在本书中属于这种类型的结构有数组、链表、树和哈希表。他们被称之为通用的数据结构是因为它们通过关键字的值来存储并查找数据,这一点在通用数据库程序中常见到(栈等特殊结... 阅读全文
posted @ 2013-08-30 15:33 朗道二级相变 阅读(1479) 评论(2) 推荐(2) 编辑
摘要: 1 哈希表 哈希表是一种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除只需要接近常量的时间:即O(1)的时间级。实际上,这只需要几条机器指令。 对哈希表的使用者来说,这是非常迅速的事情。哈希表运算得非常快,在计算机程序中,如果需要在一秒钟内查找上千条记录,通常使用哈希表。哈希表的速度明显比树快,树的操作需要O(N)的时间级,哈希表不仅速度快,而且变成实现容易。 哈希表也有一些缺点:它是基于数组的,数组创建后难于扩展,某些哈希表被基本填... 阅读全文
posted @ 2013-08-30 10:30 朗道二级相变 阅读(1331) 评论(0) 推荐(1) 编辑
摘要: 1 树 树是一种数据结构,既能像链表那样快速的插入和删除,又能像有序数组那样快速查找,树是非常好的数据结构。本章重点介绍的是一种特殊的树————二叉树。 树是由边链结的结点组成,结点通常代表的是其他常用数据结构中存储的数据项。边的意思是从一个结点到另一个结点,在Java中就用引用来表示。计算机里面的树数据结构的拓扑图和真实的树相比是倒过来的。树的每一层结点都可以和下一层多个结点相连接,这里讨论的是二叉树,每一个结点最多有两个子节点。在更普通的树里面,结点的子结点可以多于两个,这种树叫多路树。后面的2-3-4 树可... 阅读全文
posted @ 2013-08-30 08:19 朗道二级相变 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 前面三章已经讨论过一下排序方法——冒泡排序、选择排序和插入排序,这些都容易实现,但是比较慢,另外还提到了递归排序,这种排序方式比简单排序要快,但是它需要的空间是原始数组空间的两倍,通常这是一个严重的缺点。 本章包含了两个高级的排序算法:希尔排序和快速排序。这两种排序时间比简单排序算法快得多。希尔排序大约需要O(N*(logN)^2)时间,快速排序需要O(N*logN)时间,这两种排序算法和归并排序不同,不需要大量的辅助存储空间,希尔排序几乎和归并排序一样容易实现,而快速排序是所有通用排序算法中最快的一种排序算法。本章最后还简要的介绍了基数排序,它是一种不常用但是很有趣的排序算法。1 希尔... 阅读全文
posted @ 2013-08-23 11:14 朗道二级相变 阅读(483) 评论(0) 推荐(0) 编辑
摘要: 递归是一种方法调用自己的方式。在数学中的数列中这个是很普遍的,比如递推公式an = an_1 + 1 本章主要用递归来解决一些常见的问题。1 三角数字 三角数字是这样的一个数字序列,1 3 6 10 15 21... 这个数字序列的规律是:a1 = 1,n >= 2时候,an = an_1 + n方法1:使用递归循环查找第n项 我们可以看到第n项是1+2+3...+n的结果,所以可以用一个公式来计算Sn = (1+n)*n/2package chapter6;public class Demo01 { public stati... 阅读全文
posted @ 2013-08-21 20:45 朗道二级相变 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 前面已经介绍了数组,我们看到数组作为数据存储结构是有一定缺陷的,在无序数组中,搜索是低效的;而在有序数组中,插入效率很低;不管哪一种数组,删除效率都很低。而且创建一个数组后,数组大小不可变。 本部分介绍链表,它是一种新的数据结构,可以解决上面的一些问题,这种数据结构就是链表,链表也是使用非常广泛的数据结构。这里将介绍单链表、双端链表、有序链表、双向链表和有迭代器的链表。1 链结点(Link) 在链表中,每个数据项都被包含在链结点中,一个链结点是某个类的对象,这个类可以叫做Link。因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类... 阅读全文
posted @ 2013-08-20 22:12 朗道二级相变 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 本章涉及到三种数据存储类型:栈、队列和优先级队列。首先介绍着三种结构与数组的区别,然后依次介绍每种数据结构。1 不同的结构类型 本章所讲的数据结构和算法与前面章节提到的有很大不同,下面是三个区别。1.1 程序员的工具 数组是前面介绍过的数据存储结构,和本书后面介绍的其他结构(链表、树)一样,都适用于数据库应用中做数据记录。它常用于记录那些对应于现实世界的对象和活动的数据,如职员档案、目录和商务数据等等。这些结构便于数据的访问:它们易于进行插入、删除和查找特定数据项的操作。 然而,本章要讲解的数据结构和算法更多的是作... 阅读全文
posted @ 2013-08-15 00:00 朗道二级相变 阅读(594) 评论(0) 推荐(0) 编辑
摘要: 一旦建立了一个重要的数据库后,就可能根据某些需求对数据进行不同方式的排序。比如对姓名按字母顺序排序,对学生按年级排序,对顾客按照邮政编码排序,对国内销售品按价格排序等等。 由于排序非常重要而且可能非常耗时,所以它已经成为计算机可选中广泛研究的课题,而且人们的确已经研究出一些非常成熟的方法。本章里可以看到一些比较简单的算法:冒泡排序、选择排序和插入排序。另外在第7章还可以看到高级排序的方法:希尔排序和快速排序。 计算机程序通常不能像人的大脑一样一下就看到全景,一下就能几个队员进行高低排序,它只能一步一步地解决具体问题和遵循一些简单的规则。但这种方式的好处是,对海量的数据进行处理时候要... 阅读全文
posted @ 2013-08-12 17:31 朗道二级相变 阅读(803) 评论(0) 推荐(1) 编辑
摘要: 1 简介 GO语言google开发的新语言。有如下特性: 自动垃圾回收、更丰富的内置数据类型、函数多返回值、错误处理、匿名函数和闭包、类型和接口、并发编程、反射、多语言混合编程package main// 我们需要使用fmt包中的Println()函数import "fmt"func main() { fmt.Println("Hello, world!") } 1.1 代码结构 package main:每个GO源代码文件的开头声明该Go代码所属的包,包是Go语言里最基本的分发单位,要生成可执... 阅读全文
posted @ 2013-08-12 11:36 朗道二级相变 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 1 channel 一般channel的声明形式为:var chanName chan ElementType 与一般的变量声明不同的地方仅仅是在类型之前增加了chan关键字。ElementType指定这个channel所能传递的元素类型。举个例子,我们声明一个传递类型的int的channel:var ch chan int 或者声明一个map,元素是bool型的channelvar m map[String] chan bool 定义一个channel也很简单,直接使用内置的函数make()即可:ch := mak... 阅读全文
posted @ 2013-08-12 11:36 朗道二级相变 阅读(462) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 9 下一页