数据结构与算法
春_
life
展开
-
算法 - 快速幂算法
参考博客https://blog.csdn.net/qq_19782019/article/details/85621386简单来说就是进行二分,底数和指数,例如 2的8次方,循环一次变成 2*2的4次方,直到幂 = 0;(注意要区分奇偶),奇数的时候假如 2的7次方 就变成6+1,把 2的一次方 先附给result即可拿一道剑指offer的例题举例子:题目描述给定一个double类型的...原创 2020-02-07 22:38:53 · 200 阅读 · 0 评论 -
算法 -克鲁斯卡尔算法
如果形成回路则不选择文字描述加入的边的两个顶点不能都指向同一个终点,否则会构成回路原创 2020-02-06 19:13:44 · 166 阅读 · 0 评论 -
二叉树遍历的非递归方法
https://blog.csdn.net/qiuxinfa123/article/details/848807862.先序遍历。非递归先序遍历的思路如下:1.先将根节点入栈2.访问根节点3.如果根节点存在右孩子,则将右孩子入栈4.如果根节点存在左孩子,则将左孩子入栈(注意:一定是右孩子先入栈,然后左孩子入栈)5.重复2-4//先序遍历非递归 public void preO...原创 2020-02-06 16:01:38 · 289 阅读 · 0 评论 -
算法 - 普里姆算法(修路问题求解)
从A开始,A作为定点,找到与A相连并且未被处理(不在顶点集合中)的进行处理,找到权值最小的并加入集合,A-C[7]、A-G[2]、A-B[5],最小的是A-G[2],所以把G加入集合,这里是有A-G的连接的。然后把A、G作为顶点,找到与A、G相连未被处理的进行处理,A-C[7]、A-B[5]、G-E[4]、G-B[3]、G-F[6],最小的是G-B[3],把B加入集合,直到全部遍历完成!...原创 2020-02-06 14:36:52 · 683 阅读 · 0 评论 -
算法 - 贪心算法(集合覆盖问题求解)
1.穷举法2.贪心算法遍历集合的key,用当前key的value和allAreas去取交集),然后和(maxKey和allAreas的交集)比较大小,如果当前key的结合size大就把当前key赋给maxkey,循环5次后退出循环,并把maxkey加入到selects,且把maxkey覆盖的地区从allAreas中移除。直到allAreas集合为空退出while循环,得到的selec...原创 2020-02-06 13:29:29 · 1918 阅读 · 0 评论 -
算法 - KMP算法(字符串匹配)
百度的一个图文介绍http://www.sohu.com/a/336648975_453160package Algorithm.kmp;import java.util.Arrays;public class KMPViolenceMatch { public static void main(String[] args) { String str1 = ...原创 2020-02-05 22:12:06 · 125 阅读 · 0 评论 -
算法 - 动态规划(0-1背包问题)
推出公式:第三个就是:让上一次的和(新加入商品容量+(总空间-新加入的商品容量)也就是剩余空间的最大值,剩余空间的最大值去上一层找)package Algorithm.dac.knapsack;public class KnapsackProblem { public static void main(String []args){ int [] wei...原创 2020-02-05 19:16:22 · 249 阅读 · 0 评论 -
算法- 分治算法(实现汉诺塔)
package Algorithm.dac;public class Hannoitower { public static void main(String []args){ hannoiTower(5,'A', 'B', 'C'); } //汉诺塔移动方法 //使用分治算法 public static void hannoi...原创 2020-02-05 14:42:56 · 849 阅读 · 0 评论 -
算法 - 二分查找(非递归实现二分查找)
package Algorithm.binarysearchnorecursion;public class BinaaySearchNoRecur { public static void main(String[] args) { int arr [] = {1,2,3,4,5}; int b = binarySearch(arr, 0); ...原创 2020-02-05 13:56:11 · 465 阅读 · 0 评论 -
数据结构- 图
矩阵:0表示不连通,1表示连通原创 2020-02-05 13:36:53 · 118 阅读 · 0 评论 -
数据结构 - 多路搜索树(2-3树、b树、b+树、b*树)
如果二叉树的高度太高,速度还是比较慢2-3树 实现步骤数列:[16,24,12,32,26,34,10,8,28,38,20]第一步:16直接放到一个2节点第二步:24放到16后面第三步:12不能放到16前面,要不然不满足2-3树变成4叉了,所以要拆第四步:32放到16后面,然后放到24后面第五步:26放到24和32中间变成四叉不满足,如果放到24-32下面当成中间节点...原创 2020-02-04 20:50:55 · 202 阅读 · 0 评论 -
数据结构- 平衡二叉树AVL树(左旋、右旋、双旋转)
第三棵树根节点的左子树高度为3右子树高度为1,相差为2大于1,所以不是平衡二叉树//左旋转方法 private void leftRotate(){ //创建新的节点,以当前根节点的值 Node newNode = new Node(value); //把新的节点的左子树设置成当前节点的左子树 newNode.le...原创 2020-02-04 19:38:09 · 1003 阅读 · 0 评论 -
数据结构 - 二叉排序树BST(创建、遍历、删除节点)
数组与链表区别:二叉排序树的创建和遍历 代码实现package tree.binarysorttree;public class BinarySortTreeDemo { public static void main(String []args){ int [] arr = {7,3,10,12,5,1,9}; BinarySortTree...原创 2020-02-04 16:08:48 · 343 阅读 · 0 评论 -
算法 - 赫夫曼编码(对字符串进行压缩 与 解压(解码)) - (对文件进行压缩解压)
1.压缩:使用赫夫曼编码进行压缩题目构建赫夫曼树package tree.huffmantree;import java.util.*;public class HuffmanCode { public static void main(String[] args) { String content = "i like like like jav...原创 2020-02-03 20:50:10 · 1027 阅读 · 0 评论 -
数据结构 - 赫夫曼树
wpl最小的就是赫夫曼树(所有叶子节点的带权路径长度之和最小)写出来两个节点连接,然后循环就可以了package tree.huffmantree;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class huffmanTree { ...原创 2020-02-03 15:11:20 · 190 阅读 · 0 评论 -
算法 - 堆排序(大顶堆、小顶堆)
用的是顺序存储二叉树,也就是数组实现的二叉树,遍历的时候按照的是二叉树的形式代码实现package tree;import java.util.Arrays;public class HeapSort { public static void main(String []args){ int [] arr = {4, 6, 8, 5...原创 2020-02-03 14:10:56 · 694 阅读 · 0 评论 -
数据结构 - 线索化二叉树(线索化与遍历)
!!(这里我debug很久才理解过来)** 这里8的前驱为null,所以8的leftType=1,但是6是没有后继的或者说后继为null但是rightType为0(因为后继是在下一个节点来进行连接的,6没有下一个节点,所以不能实现后继的线索化,所以rightType=0)** public void threadedNodes(HeroNode node){ //如果...原创 2020-02-02 23:20:31 · 304 阅读 · 0 评论 -
数据结构 - 顺序存储二叉树(前序中序后序遍历)
就是逻辑上是二叉树,物理上是一个数组需求package tree;public class ArrayBinaryTreeDemo { public static void main(String[] args) { int arr [] = {1, 2, 3, 4, 5, 6, 7}; ArrayBinaryTree arrayBinaryT...原创 2020-02-02 16:01:58 · 1649 阅读 · 0 评论 -
数据结构 - 二叉树(删除节点)
因为二叉树是单向的,所以要判断当前节点的子节点(左或右)是否是被删除的节点 //递归删除节点 //规定:如果是叶子节点就删除节点,如果非叶子节点就删除子树 public void delNode(int no){ if (this.left !=null && this.left.no == no){ thi...原创 2020-02-02 15:35:41 · 2078 阅读 · 0 评论 -
数据结构 - 二叉树(前序中序后序查找)
public static int i = 1, j = 1, k =1; //编写前序查找方法 public HeroNode preOrderSearch(int no){ System.out.println("前序遍历"+(i++)+"次"); if (this.no == no){ return this;...原创 2020-02-02 15:02:43 · 414 阅读 · 0 评论 -
数据结构 - 树(二叉树的 前序、中序、后序 遍历)
二叉树遍历(前序中序后序,主要是看父节点的输出顺序)package tree;public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一颗二叉树 BinaryTree binaryTree = new BinaryTree(); ...原创 2020-02-01 22:11:40 · 326 阅读 · 0 评论 -
数据结构 - 哈希表(用数组+链表实现存储员工信息,添加增删查功能)
package hashtab;import java.util.Scanner;public class HashTabDemo { public static void main(String[] args) { //创建一个hashTab HashTab hashTab = new HashTab(7); //写一个...原创 2020-02-01 20:41:27 · 987 阅读 · 0 评论 -
查找算法-(顺序查找、二分查找、插值查找、斐波那契查找)
1)顺序查找或叫线性查找就是顺序遍历匹配2)二分查找package search;public class BinarySearch { /** * 二分查找数组必须有序 */ /** * * @param arr 数组 * @param left 左边索引 * @param right 右边索引 ...原创 2020-02-01 17:41:32 · 350 阅读 · 0 评论 -
数据结构 - 链表(双向链表学习)
程序里有几个注释的地方还是需要特别注意的,根据单链表自己的逻辑来写一遍双向链表,可能有几个细节处理的不到位。package DataStructures.LinkedList;public class DoubleLinkedListDemo { public static void main(String []args){ System.out.println(...原创 2019-10-03 14:22:34 · 180 阅读 · 0 评论 -
数据结构 - 单链表(百度面试题单链表的倒序打印)
方法1:反转打印(但是会改变链表结构,不建议)https://blog.csdn.net/weixin_43736084/article/details/101939789方法2:存入栈中,在出栈 public static void reversePrint(HeroNode head){ if (head.next == null){ ret...原创 2019-10-02 22:05:08 · 209 阅读 · 0 评论 -
java数据结构 - 单链表(腾讯面试题实现单链表反转)
直接上实现代码//单链表的反转 public static void reverseList(HeroNode head){ //如果当前链表为空,或只有一个节点,无需反转 if (head.next == null || head.next.next == null){ return ; } //定...原创 2019-10-02 21:23:00 · 303 阅读 · 0 评论 -
java数据结构 -链表 -获取有效节点个数,单链表中倒数k个节点
// 1.获取到单链表的节点的个数(如果有头结点,不统计头结点) public static int getLength(HeroNode head){ if (head.next == null){ return 0; } int length = 0; //定义一个辅助变量, ...原创 2019-10-02 19:06:58 · 781 阅读 · 0 评论 -
数据结构 - 单链表(Linked List)实现在内存中实现数据以链表形式生成并根据序号排序
1)介绍单链表的逻辑结构在内存中的实际结构具体创建示意图:2)代码实现例子1。第一个程序在添加的时候并没有按照序号排序,如果在添加的时候把位置改变输出的时候序号会改变package DataStructures.LinkedList;public class SingleLinedListDemo { public static void main(String[...原创 2019-10-02 12:52:26 · 653 阅读 · 0 评论 -
数据结构 - 队列(非环形队列,以及优化成环形队列)
1)队列的定义与实现形式-方式2)队列实现思路(非环形,下面进行优化)3)代码实现(注意并不是环形)package DataStructures.queue;import java.util.Scanner;/** * 使用数组模拟队列 */public class ArrayQueueDemo { public static void main(String []...原创 2019-09-29 21:47:24 · 1960 阅读 · 1 评论 -
数据结构 - 链表(单向环形链表)(约瑟夫问题)
问题如下(与分析)构建思路输入一个数,数到这个数的小孩出圈,出圈顺序的思路代码实现根据图解,来一步一步实现 //根据用户输入,计算小孩出圈顺序 /** * * @param startNo 表示从第几个小孩开始数数 * @param countNum 表示数几下出圈 * @param nums 表示最初有多少小孩在圈中 ...原创 2019-10-03 17:04:18 · 353 阅读 · 0 评论 -
数据结构 - 栈(链表实现栈的入栈出栈)
学完链表和栈,数组模拟栈学完后,自己根据链表写了个链栈,虽然只是简单的实现了入栈出栈遍历。收获还是很大的。在push这里思考了一会,思路是:传入一个数字,push里创建一个节点node,把数据加入node里,让head.next指向node(新节点),然后让node.next指向top,把node再换成top。**package stack;public class LinkedListS...原创 2019-10-03 21:28:53 · 2495 阅读 · 0 评论 -
数据结构- 栈(实现综合计算器)(一位数计算 扩展到 多位数计算)
思路代码(可以看到这里的数字只能是单位数字,那么如何改成可以是多位数呢?!往下看)package stack;public class Calculator { public static void main(String[] args) { //完成表达式运算 String expression = "7+2*6-2*2"; //...原创 2019-10-03 22:40:04 · 375 阅读 · 0 评论 -
数据结构 - 栈(数组模拟栈操作)
数组模拟栈操作package stack;import java.util.Scanner;public class ArrayStackDemo { public static void main(String[] args) { //测试ArrayStack //创建栈 ArrayStack arrayStack = new ...原创 2019-10-03 22:41:44 · 188 阅读 · 0 评论 -
数据结构 - 栈 (逆波兰计算器)(栈的三种表达式)(前缀、中缀和后缀表达式,后缀也叫逆波兰表达式)(中缀表达式转后缀表达式实现步骤及完整代码)
栈的三种表达式:前缀、中缀和后缀表达式,后缀也叫逆波兰表达式前缀(波兰表达式)中缀(对人来讲很好理解,对于计算机来讲就方便了,一般会把中缀表达式转换成后缀表达式)后缀(逆波兰表达式)计算过程例字...原创 2019-10-03 23:11:26 · 808 阅读 · 0 评论 -
数据结构与算法 - 递归回溯(迷宫问题)
递归的概念简单说就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码简介递归的调用机制递归能解决什么问题递归需要遵守的重要规则下面用代码来实现一个迷宫问题主要代码(这里用到了回溯,也就是在if(setWay()))假如是先想下走了,这里开辟个新栈运行setWay如果上下左右都走不通,会把当前坐标设置成3,然后回到上一个坐标的程序里,继续...原创 2019-10-07 16:29:50 · 2521 阅读 · 0 评论 -
数据结构 - 递归 回溯算法(八皇后问题)
游戏地址自己写完了可以根据结果去测试一下。算法分析八皇后问题算法思路分析1)第一个皇后先放第一行第一列2)第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在.第二列、第三列、依次把所有列都放完,找到一个合适3)继续第三个皇后,还是第一列、第二列……直到第8个皇后也能放在一个不冲突的位置,算是找到了一个正确解4)当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,...原创 2019-10-07 21:01:11 · 293 阅读 · 0 评论 -
算法 - 排序算法 的时间复杂度计算
简介度量一个程序(算法)执行时间的两种方法1)事后统计的方法这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要在同一台计算机的相同状态下运行,才能比较那个算法速度更快。2)事前估算的方法通过分析某个算法的时间复杂度来判断哪个算法更优.常见的时间复杂度 (很重要)...原创 2019-10-07 22:12:02 · 1705 阅读 · 0 评论 -
算法 - 排序算法 (算法学习)(冒泡、选择、插入、希尔、快排、归并)
1)冒泡排序1.1 图解演示原创 2019-10-07 22:17:30 · 126 阅读 · 1 评论 -
数据结构与算法 - 稀疏数组(理解+代码实现案例)
举例原创 2019-09-29 15:52:36 · 195 阅读 · 0 评论