数据结构&算法
dianer_come_on
一名奋斗路上的小程序猿
展开
-
实现二叉排序树
二叉排序树,即二叉查找树,它具有如下的特点:如果左子树不为空,那么左子树上的所有结点均小于它的根节点的值。如果右子树不为空,那么右子树上的所有结点均大于它的根节点的值。左右子树也分别为二叉排序树。 二叉排序树的代码如下所示:package BiTree;/* * 实现一棵二叉排序树 * 2 *原创 2017-05-02 20:37:13 · 210 阅读 · 0 评论 -
Java栈的两种实现方式
用数组和链表两种方式来实现了栈 首先来看用数组实现的,比较简单import java.util.Arrays;/* * 用数组来实现一个栈 * 栈:后进先出 * 主要有push pop peek isEmpty * peek 负责获取栈顶元素 在数组的实现中 peek负责获取最新存放在数组中的元素 stack[size-1] * 这样在pop取出元素的时候直接获取peek()的值就好原创 2017-04-20 22:11:52 · 1851 阅读 · 0 评论 -
实现单链表中的增删查改(2)
今天亲手写了一次单链表的增删查功能,实现了~package link;/* * 实现一个单链表的增删查改 */class Node<E>{ Node<E>next; E data; public Node(E data){this.data=data;} public void display(){ System.out.print(data+"原创 2017-04-20 22:06:42 · 230 阅读 · 0 评论 -
leetcode题目之两数求和
题目很简单,返回数组中等于目标的两数的下标。用了两种方法去求解。第一种两层循环,时间复杂度O(n^2) 第二种用了hashmap。时间复杂度O(n). question: Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may原创 2017-03-15 11:04:04 · 392 阅读 · 0 评论 -
归并排序的实现
归并排序是利用递归与分治技术将数据序列划分为越来越小的半子表,再对半字表排序,最后再用递归方法将排好序的半子表合并成为越来越大的有序数列。具体流程可以通过下面一张图来说明。 先将要排序的数列划分为不能再分的子序列,然后一一排序。归并排序的代码如下:package learn_link;public class MergeSortTest { public static void main(原创 2017-03-14 20:18:30 · 171 阅读 · 0 评论 -
冒泡排序和快速排序
冒泡排序是排序算法中最简单的。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。/*冒泡排序*/ /** * 冒泡排序 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个原创 2017-03-10 11:07:37 · 220 阅读 · 0 评论 -
java实现链表
主要定义了两个类,一个节点类,一个单链表类 先看节点类//节点类 public class Node { protected Node next; //指针域 protected int data;//数据域 public Node( int data) { this. data = data; } //显示此节点 public void di原创 2017-03-09 21:33:25 · 200 阅读 · 0 评论 -
栈和队列的“转换”
今天在复习数据结构时候,看到栈和队列这一章,有两个很有意思的问题, 1 如何使用两个栈来实现一个队列 2 如何使用两个队列来实现一个栈 思想都比较简单,简而言之就是两边儿来回倒 附两张图即可说明 接下来 记录一下这两个功能的java代码实现 首先是两个栈 实现一个队列package learnstack;import java.util.Stack;/* * 本程序计划使用两个栈来原创 2017-03-09 16:24:16 · 236 阅读 · 0 评论 -
随手记录一些常用的函数
昨天在做某企业的在线编程题的时候,虽然没做出来,但是其中用到了一些看似十分普通却不一定一下能想起来的方法函数,在此特地记录一下。 涉及到的功能嘛 注释里都有比较清楚的写。 有将一个字符串转换成UTF-8编码 16进制和2进制的相互转换 将一个字符串装进一个整型数组等等 下面挨个总结吧1 将一个字符串bstr装进整型数组num[ ] String bstr="your string"原创 2017-03-08 21:01:13 · 216 阅读 · 0 评论 -
用时间复杂度O(1)的算法求栈中的最小元素
总体思想是以空间来换时间,设置两个栈,其中一个栈放元素,一个栈放最小的值,在push时,判断新push进去的元素和原先栈中的元素哪个小,小的才有资格入栈;在pop元素时候,要记得将存放最小值的栈的栈顶元素也pop出来。很简单。栈的实现用链表的实现方式。/* * 用O(1)的时间复杂度求栈中的最小元素 */public class MyStack1 { LinkedStack<Integ原创 2017-04-24 20:33:58 · 504 阅读 · 0 评论 -
求一个数组中的第二大的数字
原理就是设置两个变量,一个用来存储最大元素max,另一个用来存储第二大的元素sec,遍历一次数组,比较的时候,如果数组中的值比比最大元素max大,则将max设置为这个数,将sex设置为max.当数组中的值比max小的时候,要注意将当前值和sec值进行一下比较,取大的存储。就是这么个思路。package array;public class GetMaxItem { public static原创 2017-04-24 22:47:38 · 919 阅读 · 0 评论 -
找出数组中出现次数最多的数字&找出数组中只出现一次的数字
用map存储,key为数组中的元素,value为元素出现的次数,若数组中的元素都只出现了一次,则map.put(num[i],1),否则,每当检测到map中的key已经包含有数组元素时,将map中与之的value值加1,表示次数+1,最后再在map中找出value最大key,输出。package array;import java.util.*;/* * 找出数组中出现次数最多的数字 * 思路原创 2017-04-25 20:37:17 · 1272 阅读 · 0 评论 -
字符串分隔
题目要求:连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理,记录一个特别精妙的算法。import java.util.*;/* * 连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 */public class StringDivide原创 2017-05-03 21:59:53 · 235 阅读 · 0 评论 -
队列的两种实现方式
和栈类似,用数组和链表来实现了了队列 首先是数组实现的;/* * 用数组实现一个队列 * 未处理边界情况 */public class MyQueue<E> { int size; int i=0;//队列头 private Object[] queue; public MyQueue(){ queue=new Object[10];原创 2017-04-20 22:15:07 · 375 阅读 · 0 评论