数据结构与算法
panchao199022
这个作者很懒,什么都没留下…
展开
-
一个数组实现两个栈
用一个数组实现两个栈的大体思路:先定义一个数组,定义两个栈底指针base1,和base2初始值分别为0和size -1;再定义一个标志位flag用来指示是对哪个栈进行操作,在base2 - base1 == 1时,栈满了,在入栈时左边指针++,右边指针--,出战相反。一下为具体代码,由于比较简单,就没写注释。public class Stack { private int stac...原创 2013-09-26 21:19:11 · 94 阅读 · 0 评论 -
背包问题
背包问题基本思想:将所有物品编号放到数组中,从0号物品开始顺序的选取物品,如果可以装到背包,则将该编号进栈。如果当前的物品装不下,则取下一个物品,并尝试装进去。如果尚未求得解,又无物品可以选,则说明上一个物品装的不合适,就从堆栈中退出一个编号,再从这个退出的编号的下一个编号物品尝试。每求得一组解,就输出堆栈中的所有物品编号,然后退出栈顶元素,再从当前的退出的编号的下一个编号物品尝试...原创 2014-03-22 20:05:47 · 78 阅读 · 0 评论 -
二叉树的非递归遍历
二叉树的非递归遍历:先根,中跟和后跟一般都要用到栈后跟遍历一个节点,这个节点一般的入栈两次,第二次出战的时候才访问,所以得有个标志,标记是节点第几次入栈。层次遍历一般得用到队列线索树:左链接域指向左孩子节点或前驱节点,右链接域指向右孩子节点或后继节点。利用空链接域指向的原则如下:在某种遍历规则下,如果一个节点N的左链接域为空,则利用这个左链接域指向这种遍历规则下节点N的直接...原创 2014-03-24 20:17:11 · 83 阅读 · 0 评论 -
红黑树 插入
一、满足下面几个条件的二叉搜索树,称为红黑树:1. 任何一个节点都被着色――红色或是黑色。2. 根节点是黑色的。3. 所有的NIL节点都看成黑色(NIL节点是就是一个假想的或是无实在意义的节点,所有应该指向NULL的指针,都看成指向了NIL节点。包括叶节点的子节点指针或是根节点的父指针)。4. 如果一个节点是红色的,那...原创 2013-10-26 09:09:55 · 57 阅读 · 0 评论 -
红黑树(二)删除
一、红黑树的节点删除 从红黑树上删除一个节点,可以先用普通二叉搜索树的方法,将节点从红黑树上删除掉,然后再将被破坏的红黑性质进行恢复。 我们回忆一下普通二叉树的节点删除方法:Z指向需要删除的节点,Y指向实质结构上被删除的结点,如果Z节点只有一个子节点或没有子节点,那么Y就是指向Z指向的节点。如果Z节点有两个子节点,那么Y指向Z节点的...原创 2013-10-27 16:15:48 · 80 阅读 · 0 评论 -
一般树和二叉树的转换,森林一搬树的转换
一般树和二叉树的转换:就是将森林用二叉树的方式来存储,将所有节点都看成只有两个指针域的节点,son和next节点,son节点指向它的左边第一个节点,next指向它的兄弟节点。到此为止形成的就是一颗二叉树。也可以通过以下方式来转换:首先将同一双亲的兄弟节点从左至右地连接起来,然后将双亲节点的孩子节点的分支中,除与长子节点的分值保留外,其他的全部去掉,最后将兄弟相连的横线旋转45°一般...原创 2014-04-07 15:00:29 · 365 阅读 · 0 评论 -
分类二叉树或二叉排序树或二叉搜索树
在大量的数据处理中,为了便于数据查找,对输入的数据采用分类二叉树的方式存储,可以大大提高查找效率,其时间效率是O(log2n);分类二叉树的定义:① 每个元素有一个关键字(一般限定任意两个元素的关键字都不相同,相同的时候再做处理)② 根节点的左子树跟的关键字小于根节点的关键字③ 根节点的右子树跟的关键字大于根节点的关键字④ 根节点的左右子树也都是分类二叉树分类二叉树的中...原创 2014-04-07 15:45:58 · 196 阅读 · 0 评论