堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
其他好文 时间:
2014-06-19 07:54:46
阅读次数:
174
O(1)时间内删除结点的思路只能是复制该结点下一个结点的数据,然后删除该结点的下一个结点,来等效删除此结点。需要注意的地方是删除头结点和尾结点的处理。 1 #include 2 #include 3 #include 4 typedef struct Node 5 { 6 int da...
分类:
其他好文 时间:
2014-06-15 17:05:10
阅读次数:
107
最小生成树即在加权连通图里寻找n-1条边,连接n个顶点,并且使得所有边的权重之和最小。最小生成树常用的算法有prim算法和kruskal算法。
1. prim算法
prim算法的基本步骤是:假设图的顶点集合为V,边集合为E,初始化集合U={u},此时集合中只有一个结点u,从u的邻接顶点中选取一个顶点v,使得这两个顶点之间的权重最小,然后把v加入结合U中,再从结点v出发,选取最小权重对应的结点加...
分类:
其他好文 时间:
2014-06-15 14:58:46
阅读次数:
187
二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。基本概念:(1)结点的度。结点所拥有的子树的个数称为该结点的度。(2)叶...
分类:
其他好文 时间:
2014-06-15 11:14:30
阅读次数:
255
树的删边游戏。。由于题目的特殊性,我们只需计算环的边数值。若为偶环,则直接把环的根节点置0。若为奇环,则留下一条边与根结点相连,并那它们的SG置0;注意的是,两个点也可构成环,因为允许重边。所以,我们只需求点双连通分量,并判断分量中边的数量即可。然后DFS求树的SG值。 1 #include ...
分类:
其他好文 时间:
2014-06-15 10:43:23
阅读次数:
285
堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。
有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二叉树称为最大堆。那这一特性究竟有什么用呢?
假如有14个数分别是9...
分类:
其他好文 时间:
2014-06-15 08:03:16
阅读次数:
223
链接线段树的水题,拿来学习一下splay.本题涉及到求最大值以及单点更新,折腾了许久,差不多把splay搞明白了。按位置建树,按位置是一颗排序二叉树,对于区间的操作非常方便,每次操作都将需要的结点转自根的右孩子的左孩子,因为加了2个结点,一个最小的,一个最大的,据说是为了防止越界。这题只有单点,所以...
分类:
其他好文 时间:
2014-06-14 19:58:36
阅读次数:
224
将链表头尾倒置将几个链表合并成一个新的链表,将链表中重复的节点去掉,并按大小排序双向循环链表单向循环链表(约瑟夫循环)多项式相加程序源代码单链表、单向循环链表结点类packagejavab;publicclassNode{intdata;Nodenext;publicNode(intdata){th...
分类:
编程语言 时间:
2014-06-14 19:39:06
阅读次数:
267
存放学生表的链表的结点类型:typedef struct studentnod{ int no; char name[8]; char sex[2]; char class[4]; struct studentnod *next;}stuType;线性表:是具有相同特性的数据元素的一个有限序列;线性...
分类:
其他好文 时间:
2014-06-14 19:30:52
阅读次数:
210
二叉树的创建和四种遍历(前序、先序、后序、层次、结点的层数、深度、叶子数等)—java描述packagejavab;//树的结点类publicclassTreeNode{Stringdata;TreeNodeleftChild,rightChild,next;publicTreeNode(Strin...
分类:
编程语言 时间:
2014-06-14 13:54:02
阅读次数:
404