datastructure
文章平均质量分 79
caikecai
语言处理~~喜欢看书,运动
展开
-
链表之ArrayList
链表是最经常用的数据结构之一,可以是栈和队列的实现的基础。下面直接上代码:a)modCount 在AbstractList中定义。用来表示链表改变的次数。b)注意 RangeCheck函数。c)这里没提及Iterator类,其中iterator类在AbtractList中有一个内部类Itr来表示,用iterator()来引入 public Iterator iterator() { return new Itr(); }-------------------------------原创 2010-06-13 18:52:00 · 677 阅读 · 0 评论 -
第一篇
<br /> 我的CSDN开张啦!第一篇文章纪念一下~~<br /> 要准备找工作了~~就从复习数据结构开始吧~~<br />原创 2010-06-12 15:03:00 · 358 阅读 · 0 评论 -
数据结构之一(引论及最大子序列和问题)
时间复杂度: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 · 501 阅读 · 0 评论 -
二叉树的遍历
二叉树是树中最重要的数据结构。在算法中回溯,分支限界就是对解空间树遍历的应用,解空间树是在遍历中生成。下面是对二叉树遍历的非递归代码,包括两种后序,两种中序,三中先序。a)以中序为例两种程序在本质上是一样的都是自“底”向“上”访问,只不过traverse_1空指针不入栈,traverse_2空指针入栈。其本质都是:要弹出栈访问的节点其左子树必定已经访问过,则只需要将节点弹出使树在此节点断裂变成两棵子树root和p.rigth。如果p.right不为空则访问之,否则p=null继续访问root.b)在后序遍历原创 2010-06-19 14:47:00 · 484 阅读 · 0 评论 -
Stack应用之中缀->后缀
中缀变后缀也是Stack的一个应用。原理也比较简单:a)operatorPri函数比较运算符的优先级。b)主运行函数toProcess: 1)如果是变量则直接输出。 2)如果是运算符则: 1。如果栈为空则直接进栈。 2。如果当前运算符优先级高于栈顶运算符则当前运算符进栈。 3。如果当前运算符优先级低于栈顶运算符则栈顶运算符出栈并输出,直到栈为空或栈顶运算符优先级第于当前运算符。 4。如果优先级相等,则一定为左右括号匹配,栈顶运算符(“(”)出栈即可。原创 2010-06-14 22:35:00 · 392 阅读 · 0 评论 -
字符串之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 · 354 阅读 · 0 评论 -
类广义表到树
树是一种重要的数据结构,下面是如:(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 · 569 阅读 · 0 评论 -
二叉查找树
二叉查找树也是一种比较常见的数据结构,在实际应用中一般是用二叉查找树的变形,如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 · 393 阅读 · 0 评论 -
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 · 523 阅读 · 0 评论