数据结构学习
文章平均质量分 92
LEverything
这个作者很懒,什么都没留下…
展开
-
HashMap 与HashTable
HashMap 与HashTableHashMapHashTable两者的区别HashMapHashMap是线程不安全的,可以存储null键和null值。在JDK1.7是由数组+链表实现的,到JDK1.8引入了红黑树(当链表长度超过8时,将链表结构转换成红黑树结构,利用红黑树的快速增删改查提高性能)。HashMap的数组初始默认长度(tablelength)为16,加载因子(loadfactor)为0.75。当Map中的元素数量超过当前tablelength*loadfactor时,HashMap的原创 2020-09-10 20:25:35 · 160 阅读 · 0 评论 -
字符串匹配问题——KMP算法实现
字符串匹配问题KMP算法实现字符串匹配字符串匹配问题,就是给定一个字符串str1,要找到str2中第一个与str1匹配的索引位置。这种问题使用暴力求解很容易实现,但是每次遇到不匹配的值时,只后移1个位置进行下次匹配,这样就会造成许多重复的操作。使用KMP算法可以求出每次遇到不匹配值时,后移的位数,这样就可以加快匹配的速度。KMP算法实现字符串匹配KMP算法的核心就是 部分匹配表:假设字符串str1为:“ABCDABC”其部分匹配表就是str1子串的前缀和后缀的最长公共元素的长度,字符串“hell原创 2020-05-26 13:13:55 · 382 阅读 · 0 评论 -
动态规划——背包问题
动态规划——背包问题0-1背包问题完全背包问题0-1背包问题0-1背包问题就是给定一个背包的容量N,物品1,2…X:每个物品都有对应的import java.util.Arrays;public class Knapsack { public static void main(String[] args) { int[] val={1500,3000,2000}; // 物品价值 int[] w = {1,4,3}; //物品重量 int n原创 2020-05-25 19:02:34 · 184 阅读 · 0 评论 -
图
图图的表示方式邻接矩阵(二维矩阵)邻接表图的创建图的深度优先遍历(DFS)图的广度优先遍历(BFS)图是一种数据结构,其节点可以有零个或多个相邻的元素,两个节点相连称为边。顶点(也就是节点)vertex边edge路径无向图:顶点之间的连接没有方向有向图:顶点之间的连接有方向带权图:边上带有权值,也叫网。图的表示方式邻接矩阵(二维矩阵)邻接矩阵为邻接表邻接表只关心存在的边,相较于邻接矩阵而言不关心不存在的边,因此没有空间的浪费,邻接表由数组和链表组成。邻接表为标号为0的节点原创 2020-05-24 18:09:13 · 2716 阅读 · 1 评论 -
堆排序
堆排序堆排序介绍堆排序思路堆排序介绍堆排序是利用堆这种数据结构设计的一种排序算法。堆是一种完全二叉树:大顶堆:每一个节点的值都大于或等于它的左右孩子节点的值;父节点=arr[i],左孩子节点=arr[2i+1],右孩子节点=arr[2i+2];小顶堆:每一个节点的值都小于或等于它的左右孩子节点的值。堆排序思路将无序序列构成一个堆,根据升序或降序选择大顶堆或者小顶堆。将堆顶元素与末尾元素交换,将最大或者最小元素沉到数组末端;重新调整除末尾的剩余元素,使其满足堆的结构再进行交换,循环,直原创 2020-05-23 22:52:59 · 104 阅读 · 0 评论 -
二叉树的实现
树结构二叉树二叉树遍历前序遍历二叉树中序遍历二叉树后序遍历二叉树二叉树每个节点最多只能有两个子节点的一种树的形式,其子节点分为左节点和右节点。满二叉树:所有的叶子节点都在树的最后一层,节点数= 2n−12^n-12n−1,n为树的层。完全二叉树:所有的叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点左连续,倒数第二层的叶子节点右连续。二叉树遍历前序遍历二叉树步骤:创建一棵二叉树前序遍历先输出当前节点如果左子节点不为空,则继续递归前序遍历;如果右子节点不为空,则继续中原创 2020-05-20 19:12:17 · 208 阅读 · 0 评论 -
四种常见查找算法
查找算法常用查找算法线性查找二分查找插值查找斐波那契查找常用查找算法Java中常用的查找算法有四种:线性查找二分查找插值查找斐波那契(黄金分割)查找线性查找线性查找也就是顺序查找,它的思路很简单:将要查找的元素与数组中的元素依次比较,找到相同的就返回该索引。二分查找二分查找需要待查找的数组是有序的才可以使用该算法。其思路就是从待查找数组的中间位置取值与查找的数做比较,由于待查找数组有序,所以查找的数只有三种可能,查找的数等于数组中间位置的数;查找的数在数组左侧到中间位置的区间;原创 2020-05-12 14:57:27 · 1314 阅读 · 0 评论 -
排序算法(三)归并、基数排序
排序算法归并排序基数排序归并排序归并排序是一种利用分治递归思想排序的算法。这个算法的基本操作就是将两个有序表合并。因此在设计算法时要先将原数组划分到每组只有一个元素,这时就可以将每组都看成有序表,再将其依次合并,这里使用递归方法就能巧妙的解决。在做合并操作的时候需要三个指针 leftPos,rightPos,和tempIndex分别指向左有序表首位置,右有序表首位置,和零时数组首位置。import java.util.Arrays;public class MergeSort { pub原创 2020-05-11 17:49:59 · 244 阅读 · 0 评论 -
排序算法(二)插入、希尔、快速排序
排序算法插入排序希尔排序快速排序插入排序**思路:**插入排序由N-1趟排序组成,N是数组长度,将希尔排序快速排序原创 2020-05-10 19:10:29 · 246 阅读 · 0 评论 -
排序算法,冒泡、直接选择排序
排序算法分类排序内部排序外部排序插入排序直接插入排序希尔排序选择排序直接选择排序堆排序交换排序冒泡排序快速排序归并排序桶排序常用的排序算法都是内部排序,是指将数据加载到内部存储器中进行排序。外部排序是由于数据量过大,需要借助外部存储器进行排序。...原创 2020-05-09 18:36:36 · 210 阅读 · 0 评论 -
递归方法
递归方法在执行一个递归方法时就创建一个新的受保护的独立空间(栈空间)。递归必须向退出递归的条件逼近,否则就会无限递归(StackOverflowError),形成死递归。谁调用方法,结果返回给谁。递归可以解决的问题数学问题:8皇后问题,汉诺塔问题,阶乘,迷宫等。各种算法中,如快速排序,归并排序,二分查找,分治算法等迷宫问题使用递归回溯方法,在一个迷宫中找出通路。路径会根据寻找路径...原创 2020-05-08 17:44:02 · 198 阅读 · 0 评论 -
前中后缀表达式
前缀、中缀、后缀表达式前缀表达式前缀表达式的运算符位于操作数之前前缀表达式的计算方法:将前缀表达式按从右往左的顺序将数字压住栈中如遇到计算符,将栈顶两个数弹出进行相应的操作,得到的数压入栈中。(计算减法时用先弹出的数减去后弹出的数)最后得到的数就是表达式的计算值。中缀表达式中缀表达式就是平常手工计算时使用的表达式。中缀表达式的求值过程可以参考上一篇博客https://blog...原创 2020-05-06 21:40:53 · 175 阅读 · 0 评论 -
栈结构
栈结构(stack)栈的特性栈是先入后出的数据结构,栈顶(top)是最后插入的数据和最先删除数据(变化端),出栈(pop),入栈(push)栈的应用场景1.计算表达式的值或者中缀表达式与后缀表达式的转换2.二叉树的遍历3.图的深度优先搜索。...原创 2020-04-26 02:33:39 · 573 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环问题问题描述设编号为1,2…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的人出列,依次类推直到所有人出列为止,由此产生一个出队编号序列。问题分析a.创建一个单向的环形链表,按编号插入节点,显示节点class Boy{ private int no; private Boy ...原创 2020-04-25 00:46:31 · 275 阅读 · 1 评论