数据结构
HadwinLing
这个作者很懒,什么都没留下…
展开
-
数据结构与算法 ——二叉搜索树
二叉搜索树(BST)是二叉树的一种特殊表示形式,它满足如下特性:每个节点中的值必须大于(或等于)存储在其左侧子树中的任何值。每个节点中的值必须小于(或等于)存储在其右子树中的任何值。验证二叉搜索树/** 1. Definition for a binary tree node. 2. public class TreeNode { 3. int val; 4. TreeNode left; 5. TreeNode right; 6. TreeNode(in原创 2020-10-05 15:19:14 · 219 阅读 · 0 评论 -
数据结构与算法——动态规划之01背包问题
动态规划算法背包问题:有一个背包,容量为4磅 , 现有如下物品要求:要求达到的目标为装入的背包的总价值最大,并且重量不超出要求装入的物品不能重复思路分析算法的主要思想,利用动态规划来解决。每次遍历到的第i个物品,根据w[i]和v[i]来确定是否需要将该物品放入背包中。即对于给定的n个物品,设v[i]、w[i]分别为第i个物品的价值和重量,C为背包的容量。再令v[i][j]表示在前i个物品中能够装入容量为j的背包中的最大价值。则我们有下面的结果: (1) v[i][0]=v[0][原创 2020-08-03 10:25:53 · 366 阅读 · 0 评论 -
数据结构与算法——暴力匹配算法
暴力匹配算法如果用暴力匹配的思路,并假设现在str1匹配到 i 位置,子串str2匹配到 j 位置,则有:如果当前字符匹配成功(即str1[i] == str2[j]),则i++,j++,继续匹配下一个字符如果失配(即str1[i]! = str2[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j被置为0。用暴力方法解决的话就会有大量的回溯,每次只移动一位,若是不匹配,移动到下一位接着判断,浪费了大量的时间。(不可行!)暴力匹配算法实现.packag原创 2020-08-02 15:57:17 · 909 阅读 · 0 评论 -
数据结构与算法——分治算法
治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题二分搜索大整数乘法棋盘覆盖合并排序快速排序线性时间选择最接近点对问题循环赛日程表汉诺塔分治算法的基本步骤分治法在每一层递归上都有三个步骤:原创 2020-08-02 15:54:11 · 281 阅读 · 0 评论 -
数据结构与算法—二分法查找的非递归实现
package com.hadwinling.binarysearchnorecursion;/** * @author HadwinLing * @version V1.0 * @Package com.hadwinilng.binarysearchnorecursion * @date 2020/8/2 10:37 */public class BinarySearchNoRecursion { public static void main(String[] args) {原创 2020-08-02 15:48:31 · 285 阅读 · 0 评论 -
数据结构——树
学习于B站的韩顺平老师。二叉树遍历的说明1.前序遍历:先输出父节点,在遍历左子树和右子树2.中序遍历:先遍历左子树,在是输出父节点,在遍历右子树3.后序遍历:先遍历左子树,在遍历右子树,最后输出父节点二叉树-查找指定节点二叉树-删除节点先创建一个节点class HeroNode{ private int no ; private String name; private HeroNode left;//默认为null private HeroNode r原创 2020-08-01 19:11:09 · 126 阅读 · 0 评论 -
数据结构与算法--哈希表
Google公司的上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,姓名,年龄,住址)等信息,当输入员工的d时,要求查找到该员工的所有信息要求:不要使用数据库,速度越快越好–》哈希表(散列)package com.hadwinling.hashtable;import java.util.Scanner;public class HashTableDemo {...原创 2020-03-31 22:07:06 · 139 阅读 · 0 评论 -
数据结构与算法--归并排序
package com.hadwinling.sort;import java.util.Arrays;//归并排序public class MergetSort { public static void main(String[] args) { int [] arr = {8,4,5,7,1,3,6,2}; int [] temp = new int[arr.length]...原创 2020-03-31 08:05:36 · 132 阅读 · 0 评论 -
数据结构与算法--二分查找算法
二分查找的思路分析1.首先确定改数组的中间下标mid = (left+right)/2;2.然后让需要找到的数findVal和arr[mid]比较2.1findVal>arr[mid] ,说明要查找的数在mid的右边,因此需要递归向右查找2.2findVal<arr[mid],说明要查找的数在mid的左边,因此需要递归的向左查找2.3findVal == arr[mid]...原创 2020-03-31 08:03:59 · 146 阅读 · 0 评论 -
数据结构与算法--插值查找算法
package com.hadwinling.search;public class InsertValueSearch { public static void main(String[] args) { int [] arr = new int[100]; for (int i = 0; i < 100; i++) { arr[i]=i+1; } int re...原创 2020-03-31 08:03:05 · 178 阅读 · 0 评论 -
数据结构与算法--快速排序
package com.hadwinling.sort;import java.util.Arrays;public class QuickSort { public static void main(String[] args) { int [] arr = {-9,78,0,23,-567,70}; quicksort(arr, 0, arr.length-1); S...原创 2020-03-31 08:00:01 · 105 阅读 · 0 评论 -
数据结构与算法--简单的迷宫问题
package com.hadwinling.recursion;import java.util.Iterator;/* * 迷宫 */public class RecursionTest { public static void main(String[] args) { //先创建一个二维数组,来模拟迷宫 int[][] map = new int[8][7];...原创 2020-03-30 16:23:04 · 361 阅读 · 0 评论 -
数据结构与算法--八皇后问题
package com.hadwinling.recursion;/* * 八皇后问题:任意两个皇后不能处于同一行,同一列,或同一斜线 * * 思路: * 1.第一个皇后放在第一行第一列 * 2.第二个皇后凡在第二行第一列,然后判断是否ok,如果不ok,继续放在第二行、第三行,依次把所有列都放完,找到一个合适的 * 3.继续第三个皇后,还是第一列,第二列。。。直到第8个皇宫后...原创 2020-03-30 16:21:17 · 516 阅读 · 0 评论 -
数据结构-队列
package com.hadwinling.queue;import java.util.Scanner;/** *队列介绍: *队列是一个有序列表,可以用数组或是链表来实现 *原则:先入先出,即先存入队列的数据,要先取出,后存入的要后去除 * *因为队列的输入输出是分别从前后端来处理的,因此需要两个变量fromt和rear分别记录队列 *的前后端的下标:front会随着...原创 2020-03-30 16:19:29 · 116 阅读 · 0 评论 -
数据结构--希尔排序
package com.hadwinling.sort;import java.util.Arrays;/* * 希尔排序,交换法 */public class ShellSort { public static void main(String[] args) { int [] arr = {8,9,1,7,2,3,5,4,6,0}; shellSort(arr); ...原创 2020-03-30 16:17:40 · 105 阅读 · 0 评论 -
数据结构--选择排序
package com.hadwinling.sort;import java.util.Arrays;/* * 选择排序 * 思想:第一个从arr[]~arr[n-1]中选取最小 */public class SelectSort { public static void main(String[] args) { int[] arr = {101,34,110,1,-1,...原创 2020-03-30 16:17:09 · 94 阅读 · 0 评论 -
数据结构--插入算法
package com.hadwinling.sort;import java.util.Arrays;public class InsertSort { public static void main(String[] args) { int[] arr = {101,34,110,1,-1,90,123}; insertSort(arr); } public static...原创 2020-03-30 16:16:27 · 897 阅读 · 0 评论 -
数据结构--冒泡排序
package com.hadwinling.sort;import java.util.Arrays;/* * 冒泡排序 */public class BubbleSort { public static void main(String[] args) { int arr[] = { 3, 9, -1, 10, -2 }; int temp = 0; boolean...原创 2020-03-30 16:15:52 · 129 阅读 · 0 评论 -
数据结构---栈(数组实现)
/*栈的应用场景子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中2.处理递归调用:和子程序的调用类似,只是除了存储下一个指令的地址外,也将参数,区域变量等数据存入堆栈中3.表达式得到转换【中缀表达式转后缀表达式】与求值二叉树的遍历5.图形的深度优先(depth-first)算法///用数组来模拟...原创 2020-03-10 23:06:36 · 148 阅读 · 0 评论 -
数据结构---小孩出圈(约瑟夫问题),单向环形链表
约瑟夫问题—单项环形链表约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。提示:用一个不带头节点的循环链表来处理约瑟夫问题:先构成一个有n个接待你的单循环链表,然后由k节点起从1开始计数,计到m时对应节点从链表中删除,然后在从被删除节点的下一个节点又从1开始技术,直到最后一...原创 2020-03-09 08:38:36 · 795 阅读 · 0 评论 -
数据结构--单链表
/*单链表的创建1.先创建一个head头节点,作用是表示单链表的头2.后面每添加一个节点,就直接加入到链表最后遍历:11.通过一个辅助变量遍历,帮助遍历整个链表*/package com.hadwinling.linkedlist;/* * 单链表的创建 * 1.先创建一个head头节点,作用是表示单链表的头 * 2.后面每添加一个节点,就直接加入到链表最后 * ...原创 2020-03-08 19:51:35 · 135 阅读 · 0 评论 -
数据结构---数组实现队列
/*思路:front 变量的含义做一个调整:front 就指向队列的第一个元素,也就是说array【front】就是第一个元素front的初始值 = 0;2.rear变量 的含义做一个调整:rear指向对流的最后一个元素的后一个位置,因为希望空粗怀一个空间做约定3.当队列满时,条件时(rear+1)%maxsize == front (满)4.当队列为空时:rear == ...原创 2020-03-08 19:45:52 · 192 阅读 · 0 评论 -
数据结构---稀疏数组
/*稀疏数组:应用实例:使用稀疏数组,来保存二维数组(棋盘,地图等)把稀疏数组存盘。并且可以重新恢复原来的二维数组二维数组转为稀疏数组的思路1。遍历原始的二维数组,得到有效数据的个数sum2.根据sum就可以船舰稀疏数组SpareArray int[sum+1][3]3.讲二维数组的有效数据存入到稀疏数组中稀疏数组转原始的二维数组的思路1.先读书稀疏数组的第一行,根据...原创 2020-03-08 19:36:08 · 111 阅读 · 0 评论