数据结构
亮仔亮仔我爱你哟
这个作者很懒,什么都没留下…
展开
-
KMP模式匹配
参考博客地址 http://news.cnblogs.com/n/176771/原创 2016-06-29 18:04:51 · 359 阅读 · 0 评论 -
哈夫曼树、哈夫曼编码——哈哈,至少你要了解一下原理吧
哈夫曼树,即带权路径最小的二叉树,又称为最优二叉树。哈夫曼算法描述如下: 1)用给定的一组权值{W1,W2,……,Wn},生成一个有n棵树组成的森林F={T1,T2,……Tn},其中每棵二叉树Ti只有一个节点,即权值为Wi的根节点(也是叶子) 2)从F中选择两棵节点权值最小的树,作为新树根的左、右子树(左小右大),新树根的权值是左右子树根节点权值之和 3)从F中删除这两棵树,另将新二叉树加入F原创 2016-07-09 15:17:21 · 879 阅读 · 0 评论 -
二叉树的中序遍历、递归实现、非递归实现、层次遍历、二叉树的应用,来来来,都有都有
/* you only have to complete the function given below. Node is defined as class Node { int data; Node left; Node right;}*///递归实现中序遍历void inOrder(Node root) { if(root == null){原创 2016-07-08 12:06:28 · 795 阅读 · 0 评论 -
Collection集合之Queue集合
Collection集合在Java中被定义为接口,接口主要包含方法如下:public interface Collection<E> extends Iterable<E> {//将指定的对象从集合中移除,移除成功返回true,不成功返回falseboolean remove(Object o);//将指定对象添加到集合中boolean add(E e);//查看该集合中是否包含指定的对象原创 2016-06-19 23:14:56 · 1142 阅读 · 0 评论 -
循环队列和链队列
队列是一种先进先出的线性表,允许出队的一端叫做队头,允许进队的一端叫做队尾。1.循环队列是基于数组实现的,front指向队头元素,rear指向队尾元素的下一位置。因为是循环队列,所以无法判断当front和rear相遇时,此时队列是空还是已满。故这里设一下条件:当队列为空时: front==rear当队列满时,保留一个元素。由于是循环队列,所以rear可能比front大,也可能比原创 2016-06-19 16:12:01 · 997 阅读 · 0 评论 -
Java中Stack类的实现——上源码
/* * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * *原创 2016-06-18 18:03:51 · 1013 阅读 · 0 评论 -
利用栈判断括号是否匹配
输入格式如下: 3 {[()]} {[(])} {{[[(())]]}} 输出格式如下: YES NO YES利用栈来判断,遇到左括号就进栈,遇到右括号,在当前栈不为空的情况下,判断栈顶元素和右括号是否匹配 实现代码如下:import java.io.*;import java.util.*;import java.text.*;import java.math.*;imp原创 2016-06-18 15:59:55 · 1654 阅读 · 0 评论 -
栈的应用
关于栈,我们知道是只允许在一端进行插入和删除操作的线性表,允许插入和删除的一端成为栈顶,另一端则称为栈底。栈的应用之一 :递归对于斐波那契数列——0 1 1 2 3 5 8 …… 如果用迭代法,我们就会借用公式:a3 = a1 + a2; a1=a2 ; a2=a3 通过循环来求。如果用递归,则是需要写好递归结束条件(n<2时,return n==0?0:1)和递归条件f(n)=f(n-1)+f原创 2016-06-18 14:33:57 · 878 阅读 · 0 评论 -
链表中有环——怎么判断
对于给定的单链表,有如下问题: 1. 如何判断该链表中是否有环存在? 2. 如何计算出链表中环的长度? 3. 如何找到环的连接点,即环的入口? 4. 如何计算带环链表的长度?对于问题1 我们设置一个快指针fast、一个慢指针slow。如果不存在环,那么fast总是先遇到null,而退出。如果存在环,fast总能追赶上slow,此时slow还没有完全遍历完链表,而fast则已原创 2016-06-17 14:23:50 · 809 阅读 · 0 评论 -
比较两个单链表是否相等——高手教你少用if,写出简洁代码
现在问题是这样的,给你两个单链表,让你比较他们是否相等,比如: 1. 1->2->3_null 和 1->3->null不相等 2. 2->4->5->null 和 2->4->5-null相等 也就是说两个链表的节点个数相同,并且节点所含元素要想到。其实说实话,如果是让我比较的话,我会先比较两个为空,不为空,或者一个为空一个不为空的情况。然后对于均不为空的情况,会依次比较当一个节点不原创 2016-06-16 18:30:53 · 11061 阅读 · 2 评论 -
逆序输出单链表的值——深深地被递归折服
要求逆序输出单链表的值,例如: 1.null 不打印 2. 1->2->3->5->null ,打印结果为 5 4 3 2 1 哈哈,遇到这个题目时,我的第一想法就是,这要是个双向链表就好了。 既然不是,总得想办法吧。我想对于单链表,只能依次顺序遍历,那就借用一个数组,把每次遍历的结果存到数组中,最后把数组逆向输出。但是因为不知道链表元素的个数,所以申请数组大小时候会原创 2016-06-16 17:15:07 · 4897 阅读 · 0 评论 -
算法的时间和空间复杂度问题
1.时间复杂度:T(n)=O(f(n)) 即,随着问题规模n增加,算法的时间增长率和f(n)的增长率相同,称之为算法的时间复杂度。 常用的时间复杂度所耗费的时间从小到大依次为: O(1) 2.空间复杂度:指计算算法所需的存储空间原创 2016-06-16 09:48:33 · 511 阅读 · 0 评论 -
树的相关定义
度是指节点拥有的子树数,叶节点的度为0树的度是指树中各节点度的最大值树的高度(深度)指树中节点的最大层次树的存储充分利用顺序存储和链式存储的特点:主要有三种,即双亲表示法、孩子表示法、孩子兄弟表示法双亲表示法:这里用一段连续存储空间表示结点,结点中附设一个双亲指针域,表示其双亲结点的位置,这样可以很方便的查找双亲。但是如果要查找子结点就麻烦了,需要一次遍历整个数组啦,因此,我们可以原创 2016-06-30 10:27:06 · 638 阅读 · 0 评论 -
数据的逻辑结构和物理结构
逻辑结构----------指数据之间的关系,是面向问题的。有以下几种:1.集合:所有元素属于同一集合。2.线性结构:元素之间是一对一的关系。3.树形结构:数据元素是一对多的层次关系。4.图形结构:数据元素是多对多的关系。物理结构----------指数据的逻辑结构在物理中的存储,是面向计算机的。有以下几种:1.顺序存储结构:把数据放在地址连续的存储单元。其数据间的原创 2016-06-14 13:55:43 · 993 阅读 · 0 评论 -
哈希冲突的解决方法
1.拉链法------即数组加链表的数据结构解决地址冲突,Java中HashTable和HashMap用的就是用的这种冲突解决方法2.开地址法(不建立链表)------按照给定探测序列,依次查找key能插入的位置。根据生成的探测序列的不同,可以有:线性探测法、和二次探测法。线性探查法的序列记为:h(i)=(h(key)+i) mod M 容易造成元素连成一片,从而使得探查次数原创 2016-07-30 11:19:03 · 947 阅读 · 0 评论