自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创

一.简介二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二.满二叉树一棵二叉树的结点要么是叶子结点,要么它有两个子结点(如果一个二叉树的层数为K(根节点层数为1),且结点总数是(2^k) -1,则它就是满二叉树。)三.完全二叉树若二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边,这就是完全二叉树。四.总结在非空二叉树中,第i层的结点

2020-05-31 22:36:20 457

原创 插值查找

一.简介插值查找是根据查找关键字与查找表中最大、最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。根据开始、结束索引、查找值提前预判查找值可能的位置。二.实现package com.vincent;import java.util.Arrays;public class Main { public static void main(String[] args) throws Exception{ int[] arr

2020-05-31 11:38:26 578

原创 基数排序

一.简介基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,它是将要排序的元素分配至某些“桶”中1.找到数据中最大的数据,计算数据位数2.依次取出数据从个位开始判断,把数据丢到对应桶中。把桶中的数据依次赋值到原始数组二.实现package com.vincent;import java.util.Arrays;public class Main { public static voi

2020-05-27 22:19:52 398

原创 归并排序

一.简介归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。即先使每个子序列有序,再使子序列间有序。二.实现package com.vincent;import java.util.Arrays;public class Main { public static void main(String[] args) throws Exception{ int[] arr

2020-05-27 17:59:39 369

原创 快速排序

一.简介快速排序是对冒泡排序的一种改进。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。二.实现package com.vincent;import java.util.Arrays;public class Main { public static void main(String[] args) throws Exception{

2020-05-27 16:05:46 462

原创 希尔排序

一.简介如果插入排序中,较小的数比较靠后,则数据移动较多,效率也就相对较差。希尔排序是插入排序的一种(也称增量缩小排序),希尔排序把数据按一定增量分组,对每组数据使用插入排序,依次减小增量直到增量为1。原理:二.实现package com.vincent;import java.util.Arrays;public class Main { public static void main(String[] args) throws Exception{ int

2020-05-26 20:12:45 405

原创 插入排序

一.简介插入排序把数据分为有序和无序2部分,遍历无序数据依次为数据找到在有序数据中的合理位置二.实现package com.vincent;import java.util.Arrays;public class Main { public static void main(String[] args) throws Exception{ int[] arr = new int[32]; for(int i=0;i<arr.length;i++

2020-05-26 16:43:34 399

原创 选择排序

一.简介依次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起/始位置二.实现package com.vincent;import java.util.Arrays;public class Main { public static void main(String[] args) throws Exception{ int[] arr = new int[32]; for(int i=0;i<arr.length;i++){

2020-05-25 18:38:12 437

原创 冒泡排序

一.简介冒泡排序就是比较相邻的两个元素,把小的元素往前调或者把大的元素往后调。二.实现package com.vincent;import java.util.Arrays;public class Main { public static void main(String[] args) throws Exception{ int[] arr = new int[32]; for(int i=0;i<arr.length;i++){

2020-05-25 16:30:32 385

原创 八皇后求解

一.简介八皇后问题,一个古老而著名的问题,是回溯算法的典型案例。该问题由国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有 76 种方案。1854 年在柏林的象棋杂志上不同的作者发表了 40 种不同的解,后来有人用图论的方法解出 92 种结果。二.实现package com.vincent;import java.util.Arrays;public cla

2020-05-25 10:13:02 416

原创 中缀、后缀、前缀表达式

一.简介对于1+((2*3)-4)/2 的数学表达式怎么求值?分析:数学表达式求值有优先级,不能简单的从左往右依次计算, 需要从优先级高的开始计算二.中缀表达式运算符在数值间1+((2*3)-4)/2 ,数学表达式即为中缀表达式。从左往右遍历每个字符:1.字符是数值就入栈到数值栈中,是运算符就入栈到符号栈2.字符为运算符就和上一个运算符比较优先级(没有就直接入栈),小于上一个运算符优先级就出栈2个数值,出战1个运算符并计算结果入栈,再入栈当前运算符数学表达式解析完成后:从数值栈出栈2个数

2020-05-23 18:33:07 768

原创 栈(Stack)

一.简介栈是一种仅在表尾进行插入和删除操作的线性表(FILO)。操作的这一端被称为栈顶,另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。二.实现package com.vincent;import java.util.Arrays;import java.util.NoSuchElementException;public class Ar

2020-05-23 13:58:36 376

原创 约瑟夫问题求余(mod)解法

一.简介采用循环链表操作节点解决约瑟夫问题,需要自己定义一个循环链表,相对复杂java api 已经提供了许多容器类,ArrayList,LinkedList 等,完全可以使用这些容器加%运算解决二.实现package com.vincent;import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) throws Excep

2020-05-23 12:07:46 539

原创 约瑟夫问题环循环链表解法

一.简介据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进

2020-05-23 11:52:14 532

原创 双向链表

一.简介双向链表有2个指针,分别指向前一个结点、后一个节点。基本结构如下:二.实现package com.vincent;public class Main { public static void main(String[] args) throws Exception{ LinkedList<Integer> list = new LinkedList<>(); for(int i=0;i<32;i++){

2020-05-22 15:35:28 516

原创 单向链表

一.简介计算机对数据存储有顺序存储、链式存储。数组是一种顺序存储的体现,链表是链式存储的体现,很多高级数据结构都是基于链表实现。单向链表:数据元素通过一个指针指向下一个数据元素二.实现package com.vincent;public class Main { public static void main(String[] args) throws Exception{ LinkedList<Integer> list = new LinkedList

2020-05-21 21:32:16 400

原创 环形队列

一.简介每次数据出队后都把数据往前移动将是非常低效的,使用环形队列将大幅提高数据出队效率。使用front、rear 分别记录数据出队、入队索引位置,只有在队列满了之后才需要扩容移动数据二.实现package com.vincent;import java.util.Arrays;import java.util.NoSuchElementException;public class ArrayQueue<T> { private static final int DEF

2020-05-21 15:24:50 406

原创 队列Queue

一.简介先进先出:只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。即先添加的数据先获取,后添加的数据后获取。使用方向:1.数据排队2.BFS(广度优先搜索算法实现)3.消息队列二.实现package com.vincent;import java.util.Arrays;import java.util.NoSuchElementException;public class ArrayQueue<T> { private stat

2020-05-20 21:45:31 372

原创 稀疏数组(Sparse Array)

一.简介数组是非常常用的线性数据结构。稀疏数组可实现对有较多无效数据数组的压缩。原始数组——>稀疏数组:1.稀疏数组中第一行分别表示:原数组行数、列数、有效数据个数2.其余行分别记录原始数组中有效数据:行、列、有效值二.实现1.遍历原始数组中有效数据个数2.创建稀疏数组实现原始数组到稀疏数组的映射package com.vincent;import java.util.Arrays;public class Main { public static volatile

2020-05-20 19:53:00 914

原创 python 生成二维码图片

1.安装依赖库pip install qrcodepip install image2.生成图片文件import qrcodeqr = qrcode.QRCode(box_size=20)# 添加数据到二维码qr.add_data('hello world!')qr.make(fit=True)img = qr.make_image()img.save('./qrcode/test.png')3.测试运行代码即可生成二维码图片...

2020-05-10 16:46:57 855

原创 数据结构与算法概要

一.简介数据结构是指相互之间存在一种或多种特定关系数据元素的集合。一个或多个数据元素之间有一定的相互关系。算法是被计算机使用来解决问题的的方法。可简单视为一系列解决问题的指令,算法代表着用系统的方法描述解决问题的策略机制。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。图灵奖 Pascal之父——Niklaus Wirth 提出 “程...

2020-05-06 19:01:51 654

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除