
数据结构
文章平均质量分 78
月光轩辕-
Keep moving
展开
-
判断单项链表是否存在环
这个问题是之前去趋势科技面试的时候面试官问的一个问题,当时我没回答的上来,现在在网上找到了解答,现在特在此分享。 最简单的思路是遍历链表,然后针对每一个节点判断在之前的节点中是否出现过,也就是使用一种O(n^2)的算法 但是这样的方法显然不是最优的,我们要开始考虑存在环路的单向链表的特性,他是没有结束节点的,这样我们可以确定一个程序结束条件,就是 只要找到一个结束节点,那转载 2015-05-15 21:30:03 · 723 阅读 · 0 评论 -
最小堆
一种常见的数据结构,内部用二叉树的结构存储着数据,由于该二叉树满足完全二叉树的定义,所以我们可以通过数组来实现二叉树的存储。该数据结构满足堆首为堆中的最小元素,二叉树中的所有父节点都比子节点的要小。 首先要讨论的问题是构建堆 1从0开始构建,直接一项一项的添加进堆 这是一个动态添加的过程,每次添加都假设现在的堆满足最大堆的定义,每次添加一项我们就需要把它放到合适的位置。一个很初始的想法就是把原创 2015-04-23 13:57:46 · 3322 阅读 · 0 评论 -
求一个int型整数的两种递减数之和
求一个int型整数的两种递减数之和 描述: 给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数;2.递减数中各位数之和最大的数)之和。 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同的情况。 最大递减数:所输入整数的所有递减数中值最大的一个。 如: 75345323,递减数有:75,753,53,53,532原创 2015-03-25 20:48:53 · 1057 阅读 · 0 评论 -
计算表达式的值
这应该是属于数据结构入门的部分,我大一的时候就应该写过,现在重新看数据结构,我决定在实现一遍 (这里 讨论的表达式只包含加减乘除 小括号) 简单来讲计算表达式的值可以通过计算表达式的后缀表达式的值来计算(注:我们通常讲的表达式都是中序表达式) 举例说明: A+B-C*D 这是我们要计算的表达式,我们知道*比+/-的优先级高,但是计算机并不能智能的识别并处理,所以我们需原创 2015-01-23 12:37:01 · 1011 阅读 · 0 评论 -
ST算法
ST算法 总的来说 ST算法是一种采用空间换时间的算法,最后达到的目的是将查询连续数的最小值和最大值的时间优化为O(1) 从查询连续数的最小值和最大值这个问题起步, 首先,我们考虑直接算,如果查询m-n, 那么我们需要比较至少n-m次,最后的时间复杂度为O(n)这样的情况肯定是有问题,尤其是数据上升到了上万 上百万,另外查询次数的增加也会出问题 然后我们可以考虑使用线段树,我们可以将线段树原创 2015-01-16 10:46:53 · 1710 阅读 · 0 评论 -
树状数组与线段树入门
最近开始接触到了线段树和树状数组的题目 (refer to acm116系类)线段树和树状数组本身的组织都是二叉树的一种实现方式,从目前被我用到的地方来看,主要作用在于对于顺序的连续实体的资源和的查找十分迅速,线段树的表达能力比树状数组强很多,还能用在别的地方结合题目来谈:士兵杀敌(一)时间限制:1000 ms | 内存限制:65535KB难度:3描述南将军手下有N个士兵,分别编号1到N,这些士...原创 2015-01-16 10:46:48 · 579 阅读 · 0 评论 -
java代码实现线段树
//线段树 用来存取1-n 这条线段中 整数点出现的次数,已经一段中所有点出现的次数 //扩展 可以把整数点映射成n个实体, 每个实体会存放着一点资源, 线段树在大规模读取连续数的时候存在着优势 public class LineTree { int[] tree; int size; public LineTree(int n) { tree ...原创 2015-01-16 10:46:46 · 3361 阅读 · 2 评论 -
用java实现单向链表
主要就是简单的指针移动,之前有人让我帮改了一个链表的程序,但我觉得实现有问题 改完 自己又写了一个,代码在下面 public class MyLinkedList { int size; Node head; Node tail; public MyLinkedList() { size = 0; head = null;原创 2015-01-16 10:46:43 · 821 阅读 · 0 评论 -
B树、B-树、B+树、B树都是什…
原文地址:B树、B-树、B+树、B树都是什么【转】作者:无盐 B树、B-树、B+树、B*树都是什么 B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如:转载 2015-01-16 10:44:29 · 464 阅读 · 0 评论