数据结构与算法
国家二级残序员
距离成功,只差一张500W的彩票
展开
-
下压(LIFO栈)_API
栈,先进后出(FILO—First-In/Last-Out):能够动态调整数组大小的实现。在算法学习中,LIFO栈几乎达到了任意集合类数据类型的实现的最佳性能: 1. 每项操作的用时都与集合大小无关。 2. 空间需求总是不超过集合大小乘以一个常数。 无泛型的缺点在于某些push()和pop()操作会调整数组的大小:这项操作的耗时和栈大小成正比。import java.util.Iterator原创 2017-01-14 20:02:27 · 383 阅读 · 0 评论 -
前(中后)序表达式讲解
计算机处理括号、优先级之比较繁琐,前序和后序表达式中没有括号,而且在计算中只需单向扫描,不需要考虑运算符的优先级。举个例子说明计算过程: 名称 表达式 中序表达式 2*3/(2-1)+3*(4-1) 前序表达式 +/*23-21*3-41 后序表达式 23*21-/341-*+中序表达式:该表达式是我们常用的,不说了。前序表达式:1.计算:```4-1=1```,原创 2017-11-04 19:33:29 · 3740 阅读 · 1 评论 -
十进制整数转换二进制
Stack数据类型实现 见:http://blog.csdn.net/z3881006/article/details/76473015Stack<Integer> s = new Stack<Integer>();int N = 50;while(N>0){ s.push(N%2); N/=2;}int size = s.size();for(int i = 0;i <原创 2017-11-02 16:07:49 · 524 阅读 · 0 评论 -
3-sum问题
3-sum问题:统计一个不重复数组中3个数相加为0的组合。import java.util.Arrays;public class Main { public static void main(String[] args) { int[] in = { 3, 4, 5, 6, 1, -6, 8, 21 }; Arrays.sort(in); /原创 2017-11-08 17:34:16 · 566 阅读 · 0 评论 -
双栈算数表达式求值算法
/** * 双栈算数表达式求值算法 * 思路: * 1.将操作数压入操作数栈; * 2.将运算符压入运算符栈; * 3.忽略左括号; * 4.在遇到右括号时,弹出一个运算符, * 弹出所需要的操作数, * 并将运算符和操作数的运算结果压入操作数栈。 */public class Evaluate { public static void main(St原创 2017-11-07 10:41:50 · 514 阅读 · 0 评论 -
链表
定义 :链表是一个递归的数据结构,它或者为空(null),或者只想一个结点(node)的引用,该结点含有一个泛型的元素和一个指向另一个链表的引用。 引用:http://algs4.cs.princeton.edu/13stacks/1结点记录 Node对象含有两个实例变量,类型分别Item(参数类型)和Nodeprivate class Node { Item item; Node原创 2017-08-03 21:49:53 · 192 阅读 · 0 评论 -
背包、队列、栈(附数据类型实现)
背包、队列和栈背包、队列和栈数据类型都非常基础并且应用广泛。API背包背包是一种不支持从中删除元素的集合数据类型,目的是帮助用例收集元素并迭代所有收集到的元素,也是检查背包是否为空,或者获取背包中元素的数量。队列队列是一种基于先进先出(FIFO)策略的集合类型。在实际应用中使用队列的只要原因是在用集合保存元素的同事保存它们的相对顺序:使他们入列顺序和出列顺序相同。栈下压栈(简称栈)是一种基于先进后出原创 2017-07-31 21:46:51 · 1492 阅读 · 0 评论 -
希尔排序详解
1.希尔排序的产生希尔排序是基于插入排序的,插入排序步长为1的,而插入排序的步长是计算出来的。(学习希尔排序之前需要了解插入排序)。2.插入排序的缺陷步长为1的插入排序,必须得移动多次,举个栗子,假如一个很小的数据在考右侧的位置上,那么要讲该数据排序到正确的位置上,则所有中间数据都需要向右移动一次。3.希尔排序的优点希尔排序通过加大插入排序中元素之间的间隔(步长),并对这些间隔的元素进行排序,从而使原创 2017-03-13 17:15:32 · 6578 阅读 · 0 评论 -
%的位运算实现方式
当我们求余的时候,相当于除以2的N次冥,也就是相当于把数本身右移N位,但是右移掉的那些位需要通过位运算进行保留。人人网例题:x为整型,请用位运算实现x%8?解答:X%8 = X%2^3 ,8的二进制为1000,右移3位后,移掉的数需要保留,那么我们使用7的二进制0111来保留移掉的部分,所以X%8=X&7。在牛客网大神推出的公式为:X%2^n =X&(2^n-1),此公式说明X%后面的这个数必须的偶原创 2017-03-15 14:28:53 · 1116 阅读 · 0 评论 -
从头到尾彻底理解KMP
从头到尾彻底理解KMP作者:July时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。后收录于新书《编程之法:面试和算法心得》第4.4节中。1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本转载 2017-03-14 16:08:48 · 510 阅读 · 0 评论 -
排序和搜索讲解
一、排序1)桶排序准备大量的木桶,用木桶的标号(数组下标)作为数据,按照木桶标号的顺序进行排序。2)选择排序从“待排序部分”找到最小值(或最大值),让“待排序部分”的起始位置向后移动。3)冒泡排序比较相邻的两个数据,把这两个数据按照大小关系正确的交换排列。4)插入排序不断地把数据插入已排序的部分数据列,里面恰当的位置。5)归并排序分两步走,先了解下归并的概念。归并:把“几个已排序的数据列”合并成“一原创 2017-03-14 09:13:40 · 1531 阅读 · 0 评论 -
n个元素进栈,共有多少种出栈顺序(公式)
入栈元素的个数 出栈顺序 1 1 2 2 3 5 … … n ?然后我们来考虑f(4), 我们给4个元素编号为a,b,c,d, 那么考虑:元素a只可能出现在1号位置,2号位置,3号位置和4号位置(很容易理解,一共就4个位置,比如abcd,元素a就在1号位置)。 1) 如果元素a在1号位置,那么只可能a进栈,马上出栈,此时还剩元素b、c、d等待操作,就是子原创 2017-03-08 23:44:13 · 39050 阅读 · 3 评论 -
拓扑排序的原理及其实现
本文将从以下几个方面介绍拓扑排序:拓扑排序的定义和前置条件和离散数学中偏序/全序概念的联系典型实现算法Kahn算法基于DFS的算法解的唯一性问题实际例子取材自以下材料:http://en.wikipedia.org/wiki/Topological_sortinghttp://en.wikipedia.org/wiki/Hamiltonian_path定义和前置条件:定义:将有向图中的顶转载 2017-02-22 13:30:39 · 333 阅读 · 0 评论 -
Java中pop和poll区别
poll是队列数据结构实现类的方法,从队首获取元素,同时获取的这个元素将从原队列删除; pop是栈结构的实现类的方法,表示返回栈顶的元素,同时该元素从栈中删除,当栈中没有元素时,调用该方法会发生异常原创 2017-02-28 23:12:09 · 26463 阅读 · 0 评论 -
排序算法时间复杂度和空间复杂度比较
时间复杂度n^2表示n的平方,选择排序有时叫做直接选择排序或简单选择排序排序方法平均时间最好时间最坏时间桶排序(不稳定)O(n)O(n)O(n)基数排序(稳定)O(n)O(n)O(n)归并排序(稳定)O(nlogn)O(nlogn)O(nlogn)快速排序(不稳定)O(nlogn)O(nlogn)O(n^2)堆排序(不稳定)O(nlogn)O(nlog原创 2017-03-15 14:01:12 · 696 阅读 · 0 评论 -
RSA公钥加密算法
简介RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。 RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。解原创 2017-06-20 14:56:35 · 1588 阅读 · 0 评论