自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 资源 (1)
  • 收藏
  • 关注

原创 红黑树之java实现

package cai.tree;import java.io.*;import java.util.*;class RedBlackTree{ private class RBNode{ public E data; public RBNode parent; public RBNode left; public RBNode right; public int col; pu

2010-06-23 16:27:00 570

转载 红黑树

<br />红黑树也是一种比较常用的数据结构,网上有篇介绍的比较清楚的,转载如下:http://imlazy.ycool.com/post.1104022.html<br /> <br />红黑树(Red-Black Tree)是二叉搜索树(Binary Search Tree)的一种改进。我们知道二叉搜索树在最坏的情况下可能会变成一个链表(当所有节点按从小到大的顺序依次插入后)。而红黑树在每一次插入或删除节点之后都会花O(log N)的时间来对树的结构作修改,以保持树的平衡。也就是说,红黑树的查找方法与二

2010-06-23 16:25:00 344

原创 AVL树

 AVL树是普通二叉查找树的变形,查找效率会比红黑树好,但是由于要求更严格,所以插入和删除比红黑树消耗大。定义:1>它的左子树和右子树都是AVL树 2>左子树和右子树的高度差不能超过1 从条件1可能看出是个递归定义,如GNU一样. 性质:1>一棵n个结点的AVL树的其高度保持在0(log2(n)),不会超过3/2log2(n+1) 2>一棵n个结点的AVL树的平均搜索长度保持在0(log2(n)). 3>一棵n个结点的AVL树删除一个结点做平衡化旋转所需要的时间为0(log2(n)). 性能:实际效率和插入

2010-06-22 09:14:00 537

原创 二叉查找树

二叉查找树也是一种比较常见的数据结构,在实际应用中一般是用二叉查找树的变形,如AVL树,红黑树。例如stl中的map就是红黑树的应用。a)下面是红黑树的java实现,包括:    1)递归实现的contains函数    2)递归和非递归实现的insert操作。    3)递归和非递归实现的remove操作。b)啰嗦几句java,java没有像c++那样功能强大的指针可以指针指向指针,也没有c++一样的引用。java的引用其实和c++的一层指针大概是差不多的。所以有些事情java没办法做,例如交换函数swa

2010-06-20 12:00:00 409

原创 二叉树的遍历

二叉树是树中最重要的数据结构。在算法中回溯,分支限界就是对解空间树遍历的应用,解空间树是在遍历中生成。下面是对二叉树遍历的非递归代码,包括两种后序,两种中序,三中先序。a)以中序为例两种程序在本质上是一样的都是自“底”向“上”访问,只不过traverse_1空指针不入栈,traverse_2空指针入栈。其本质都是:要弹出栈访问的节点其左子树必定已经访问过,则只需要将节点弹出使树在此节点断裂变成两棵子树root和p.rigth。如果p.right不为空则访问之,否则p=null继续访问root.b)在后序遍历

2010-06-19 14:47:00 499

原创 类广义表到树

树是一种重要的数据结构,下面是如:(a b(c d) aa (bb cc dd) ee(ff ( gg (h i j)))) 这样的类广义表读入一颗树的程序。a)在括号里面的表示为上个符号的子节点,如 c , d为b的子节点。a和b为兄弟节点。b)又有nextToken程序。----------------------------------------------------------------------------------------------------------------------

2010-06-17 13:36:00 581

原创 字符串之KMP

KMP是字符串匹配的常见算法有多种变形,下面仅仅讨论下经典的KMP算法:a)kmp算法主要是先计算Pattern串p的特性,利用的是一个nextPos[]数组。    1)nextPos[0] == -1;    2)如果nextPos[j] == k,则:'p0 ... pk-1' == 'pj-k+1 ... p j-1'    (1 k满足此等式,即k是最大的。    3)原理是:如果主串的第i个char和pattern的第j个char不匹配那么Pattern向前移动,直到主串和Pattern的第k个

2010-06-16 17:16:00 368

原创 Stack应用之中缀->后缀

中缀变后缀也是Stack的一个应用。原理也比较简单:a)operatorPri函数比较运算符的优先级。b)主运行函数toProcess:    1)如果是变量则直接输出。   2)如果是运算符则:       1。如果栈为空则直接进栈。       2。如果当前运算符优先级高于栈顶运算符则当前运算符进栈。       3。如果当前运算符优先级低于栈顶运算符则栈顶运算符出栈并输出,直到栈为空或栈顶运算符优先级第于当前运算符。       4。如果优先级相等,则一定为左右括号匹配,栈顶运算符(“(”)出栈即可。

2010-06-14 22:35:00 406

原创 一个Tiny-c编译器

这个是我闲着没事,就写了一个编译器。纯手工写的,没有用YACC/LEX.

2010-06-14 16:25:00 603

原创 Stack应用之进制转换与迷宫问题

栈可以用链表来实现,表现为后进先出。具体实现就不详细说了。下面直接看两个问题:u       进制转换:1)进制转换是基于以下公式1:N = (N div d) * d + N mod d    (div为整除运算,mod为求余运算)2)一个d进制数n1n2n3n4n5 可表示为((((n1 * d + n2 ) * d ) + n3) * d + n4) * d) + n5或者表示为:n1*d^4 + n2*d^3 + n3*d^2 + n4*d + n53)递归应用公式1,即可得到d进制的数。DecTo

2010-06-14 14:05:00 488

原创 链表之ArrayList

链表是最经常用的数据结构之一,可以是栈和队列的实现的基础。下面直接上代码:a)modCount 在AbstractList中定义。用来表示链表改变的次数。b)注意 RangeCheck函数。c)这里没提及Iterator类,其中iterator类在AbtractList中有一个内部类Itr来表示,用iterator()来引入    public Iterator iterator() {        return new Itr();    }-------------------------------

2010-06-13 18:52:00 692

原创 数据结构之一(引论及最大子序列和问题)

 时间复杂度:1.      大O记号:如果存在正常数c和c0 使得当N>=n0时T(N)在大O记号中比较的其实是“相对增长率”,其实也就是求导后的比较。对于具体的数值是没有意义。比如:某个N使得f(N)当T(N) = O(f(N))时,f(N)是T(N)的一个“上界”。几个结论:结论一:如果T1(N) = O(f(N))且T2(N) = O(g(N)),那么a) T1(N) + T2(N)  = O(f(N) + g(N)); 或者写成max( O(f(N)) , O(g(N)) ).b) T1(N) *

2010-06-12 17:24:00 513

原创 第一篇

<br />        我的CSDN开张啦!第一篇文章纪念一下~~<br />        要准备找工作了~~就从复习数据结构开始吧~~<br />       

2010-06-12 15:03:00 374

Tiny-c compiler

一个TINY-C编译器,纯手工写的,没有用Yacc/lex

2010-06-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除