数据结构
文章平均质量分 73
Onlyan
这个作者很懒,什么都没留下…
展开
-
树状数组
树状数组是一种非常巧妙的数据结构。对于一个普通数组,可以构造出一个对应的树状数组。普通数组中的元素存放的只是本身的信息,但树状数组中的元素存放的却是多个原数组的信息。对于一个非负整数x,我们可以将它表示为二进制,设它的二进制形式中,结尾的0的个数为k。对于树状数组,它的x位置上的元素表示的是原数组从x位置开始,往后数2^k个元素的信息(一般是它们的和,也可以是最大值或最小值)。比如:原创 2012-10-27 22:47:15 · 708 阅读 · 0 评论 -
二叉查找树
二叉查找树是一种特殊的二叉树,除了拥有普通二叉树的性质之后,这种数据结构最重要的特征是:对于任何一个结点,它的值都大于或等于它的左子树上所有结点的值,而小于它的右子树上所有结点的值。这种数据结构有较高的查找效率和插入效率,同时为了方便各种操作,还在每个结点中引入一个指针域,用于指向结点的父亲。二叉查找树一般的操作包括以下几种:1、查找是否存在某个结点,其值等于给定值对于查找操作,只需要原创 2012-10-21 20:05:26 · 539 阅读 · 0 评论 -
并查集
并查集是一种用于不相交集合上的操作的高级数据结构。对于不相交集合,一般的操作包括两种:查询某个结点所属集合的代表元素、合并两个集合。针对这两种操作,我们可以设计这样一种数据结构:用编号0-n表示所有结点,用一个数组 parent[ ] 存储他们所属的集合的代表元素的编号。初始化时,每个元素单独构成一个集合,因此 parent[i] = i。当执行合并操作的时候,比如说把原创 2011-11-21 10:47:59 · 380 阅读 · 0 评论 -
线段树
线段树是一种由二叉树扩展而来的数据结构。线段树中的每个结点都包含一个区间,每一个结点要么包含两个儿子结点,要么是叶结点。包含两个儿子的结点,它的左儿子表示它的左半部分区间,右儿子表示它的右半部分区间。叶子结点的区间长度为1,即起点和终点重合。线段树的构造:给定一个区间[beg, end],以此构造出一个结点。若beg等于end,说明该结点是叶子结点,构造结束。否则求出该原创 2012-10-27 21:29:53 · 538 阅读 · 0 评论 -
字典树(Trie)
字典树是一种用于字符串处理的高级数据结构。字典树的形态不是固定的,它是根据需要处理的不同字符的数量来决定的。对于某种场合,有n种不同的字符,则对应的字典树就是n叉树。举个例子,假设需要处理的字符串只有小写字母组成,则一共有26种字符,此时构造出来的字典树就是一棵26叉树,即每个结点有26个子结点。边:字典树上的每条边代表一个字符。结点:字典树上的每个结点中包含了它的所有孩子的指针,以及原创 2012-11-10 13:11:29 · 651 阅读 · 0 评论 -
单调队列
队列是一种先进先出的数据结构,单调指的是数学中的单调性,包括严格的递增或者递减。单调队列指的就是严格符合单调性的队列,它有两个性质:1、对于单调递增队列,从队头到队尾的元素在某种比较标准下是严格递增的,比如q(1, 2, 3, 4, 5)。对于单调递减队列,从队头到队尾的元素在某种比较标准下是严格递减的,比如q(5, 4, 3, 2, 1)。2、排在前面的元素必定比排在后面的元素先进队原创 2012-11-26 21:36:32 · 1046 阅读 · 0 评论 -
单调栈
单调栈与单调队列很相似。首先栈是后进先出的,单调性指的是严格的递增或者递减。单调栈有以下两个性质:1、若是单调递增栈,则从栈顶到栈底的元素是严格递增的。若是单调递减栈,则从栈顶到栈底的元素是严格递减的。2、越靠近栈顶的元素越后进栈。单调栈与单调队列不同的地方在于栈只能在栈顶操作,因此一般在应用单调栈的地方不限定它的大小,否则会造成元素无法进栈。元素进栈过程:对于单调递增栈,若当原创 2012-11-26 21:59:20 · 16478 阅读 · 0 评论 -
优先队列
优先队列是一种特殊的队列,它同样具备入队与出队两种基本操作,但每次出队的元素都是队列中最大(最小)的元素,这里的最大与最小相当于优先级,因此这种队列叫优先队列。优先队列的实现方式不唯一,其中有一种是用堆实现的。对于堆实现的优先队列,它的入队操作相当于在堆的最后一个元素之后加入一个新元素,然后逐步往上浮动直到不需浮动为止;而出队操作则是保存堆顶的元素,然后把堆的最后一个元素放到第一个元素的位置上原创 2012-12-04 15:56:27 · 623 阅读 · 0 评论