自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构 十三 图的深度遍历和广度遍历,以及迪杰斯特拉算法

1.图的深度遍历是采用递归实现2.图的广度遍历是基于队列实现3.迪杰斯特拉算法一次只能求出一个顶点到其他顶点的最短路径,方案是创建一个顶点集,每次从顶点集外选出一个到起点最近的点,然后加入到顶点集中,并以该顶点为中介,更新到其他点的最短路径,主要是采用了贪心算法的思想import sun.misc.Queue;import java.util.ArrayList;public class Graph { //使用一个常量N,如果两点间的权值为N,则说明不相邻 private s

2020-09-07 16:57:03 371

原创 数据结构十二 KMP算法

举例来说,有一个字符串 Str1 = “BBCABCDAB ABCDABCDABDE”,判断,里面是否包含另一个字符串 Str2 =“ABCDABD”?1.首先,用 Str1 的第一个字符和 Str2 的第一个字符去比较,不符合,关键词向后移动一位2. 重复第一步,还是不符合,再后移、3. 一直重复,直到 Str1 有一个字符与 Str2 的第一个字符符合为止4. 接着比较字符串和搜索词的下一个字符,还是符合。5.遇到 Str1 有一个字符与 Str2 对应的字符不符合。6.这时候,

2020-09-01 16:58:56 152

原创 数据结构十一 霍夫曼树的创建

赫夫曼树基本介绍给定 n 个权值作为 n 个叶子结点,构造一棵二叉树, 若该树的带权路径长度(wpl) 达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近import java.util.ArrayList;import java.util.Collections;import java.util.List;class Node implements Comparable&l

2020-08-29 17:22:07 459

原创 数据结构十 二叉树的线索化

在二叉树的很多前序,中序,后序遍历中,结点的left和right可能只用到了某一个,这就会造成很多结点的left和right属性为空,使得空间被浪费,为了充分利用这些空间,可以使用线索二叉树。让一些结点的左子树指向遍历的上一个结点,右子树指向遍历的下一个结点。class TreeNode{ private String name; private int no; private TreeNode left; private TreeNode right; //由于类

2020-08-29 17:20:36 133

原创 数据结构九 二叉树的三种遍历方式,前序查找,删除

class TreeNode{ private String name; private int no; private TreeNode left; private TreeNode right; public TreeNode(String name, int no) { this.name = name; this.no = no; } public String getName() { ret

2020-08-25 21:26:34 99

原创 数据结构八 希尔排序,快速排序,归并排序,基数排序(桶排序)

希尔排序是插入排序的改进,因为插入排序比方说是2,3,4,5,6,这时你再插入1,就要依次与前面5个元素比较,很是麻烦,希尔排序相当于把数组分成很多组,第一轮每组的大小是数组的长度/2,第二轮在此基础上继续/2,直到/2后每组长度为0,每轮对每组中的元素从右到左到每个元素进行插入排序. public static void shellSort(int[] arr) { int i,gap; //gap这里表示总共要进行几次分组 for(gap=arr

2020-08-23 20:26:42 259

原创 数据结构七 冒泡排序改进和插入排序

1.冒泡排序由于最后倒数第一个元素没有必要再往后比较了,所以第一个循环i是进行到了length-1,第二个循环当中,假设是从小到大排序,那么第一趟排序,就一定会把最大的元素放到最右边,第二趟排序会把第二大的元素放到倒数第二个位置,那么第二趟排序就无需再与最右边的元素进行比较,而第三趟排序就无需再与最右边的两个元素进行比较,所以第二个循环j是循环到length-1-i2.优化:当冒泡排序中有一趟没有发生任何交换,那么就说明已经排序好了可以提前终止排序:public static void bubbleS

2020-08-20 12:27:13 179

原创 String的intern()方法及面试题

intern()的使用intern是一个native方法,调用的是底层C的方法字符串池最初是空的,由String类私有地维护。在调用intern方法时,如果池中已经包含了由equals(object)方法确定的与该字符串对象相等的字符串,则返回池中的字符串。否则,该字符串对象将被添加到池中,并返回对该字符串对象的引用。如果不是用双引号声明的string对象,可以使用string提供的intern方法:intern方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当 前字符串放入常量池中。比

2020-08-19 19:15:14 434

原创 八皇后问题和迷宫回溯问题

递归-八皇后问题(回溯算法)八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即: 任意两个皇后都不能处于同一行 、同一列或同一斜线上,问有多少种摆法(92)。八皇后问题算法思路分析第一个皇后先放第一行第一列第二个皇后放在第二行第一列、然后判断是否 OK, 如果不 OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适继续第三个皇后,还是第一列、第二列……直到

2020-08-19 15:50:05 258

原创 数据结构六 双向链表

1.双向链表在单向链表的基础上,增加了一个pre,用于记录一个节点前一个节点的信息。2.双向链表既可以正向移动,又可以反向移动,因此做删除和增加元素时,不需要通过一个节点的上一个节点辅助,就可以进行class StudentNode{ int no; String name; //存储上一个节点的信息; StudentNode pre; //存储下一个节点的信息 StudentNode next; public StudentNode(int n

2020-08-17 13:53:58 105

原创 数据结构五 链表

链表是以节点的方式来存储, 是链式存储每个节点包含 data 域, next 域:指向下一个节点.如图:发现 链表的各个节点不一定是连续存储.链表分 带头节点的链表和 没有头节点的链表,根据实际的需求来确定单向链表增删改查代码块class StudentNode{ int no; String name; //存储下一个节点的信息 StudentNode next; public StudentNode(int no, String name) { .

2020-08-16 22:57:55 132

原创 数据结构四 循环队列

1.在之前的队列中,因为是通过rear==maxsize-1判断队列是否满了,而如果出队后,front依次往后移动,这就会导致front前面的空间白白浪费掉,整个数组空间其实并没有满,所以这里就有了循环队列2.循环队列这里设置front为第一个元素,而rear为最后一个元素的下一个元素,之所以这样设置,是因为入队时,rear+1,尾指针追赶头指针,而出队时则是front+1,头指针追赶头指针,如果front就指向第一个元素,rear指向最后一个元素,当两者相等时,你根本无法判断是front+1后到达了re

2020-08-15 16:27:55 298

原创 数据结构三 队列

队列介绍队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出注意:这里队列的front是指第一个元素的前一个元素,而rear则是直接指向最后一个元素实现代码:public class Test1 { public static void main(String[] args) { MyQueue myQueue=new MyQueue(4); myQueue.addQueue(1); myQueue.

2020-08-15 14:58:36 154

原创 数据结构二 稀疏数组

在我们经常下的五子棋当中,通常在程序代码的实现当中,使用二维数组记录黑子和白子的位置,但是问题来了,一般在棋盘中有大量位置,没有被白子和黑子占用,这时使用二维数组来存储,必然会有大量位置没有使用,这样就会白白浪费很多空间,这时就可以使用稀疏数组稀疏数据的描述二维数组转化为稀疏数组的方法1.之前已经说过,稀疏数组需要记录二维数组有多少个有效数据,所以第一步需要遍历原二维数组,计算有效数据的位数2.根据有效数据的位数就可以创建稀疏数组了3.再重新遍历二维数组,有效数据存储到稀疏数组当中代码实现

2020-08-14 13:29:44 101

原创 数据结构一 线性结构和非线性结构

暑假到来,由于自己之前确实数据结构学的一般,因此决定重新学习一下数据结构,一是加深理解,二是对算法使用java进行测验,增强实践能力,主要是通过尚硅谷的视频进行学习,写上去的笔记,有些是尚硅谷的内容,但多数会是自己的理解线性结构和非线性结构1.数组结构主要分为线性结构和非线性结构2.线性结构就是指数据元素之间存在一对一的关系,比如说一般的链表,其前驱和后继元素都是一个,这就是线性结构,而树一个节点可能有多个子节点,这就属于非线性结构3.常见的线性结构有数组,队列,链表和栈4.非线性结构包括二维数组

2020-08-14 12:43:11 1649

原创 解决win10 jdk8配置问题

尝试看过很多篇博客,自己也试过很多篇的方法,最终配置仍然不生效,万般苦恼之下,干脆来个釜底抽薪,直接搜了个jdk自动配置工具,重启后,直接解决了问题jdk自动配置工具下载地址

2020-07-23 20:45:14 148

原创 菜鸟的理解

协议:在两台电脑用户,进行通信的时候,为了能够使通信能够有效的进行,必须要有一种统一的通信方法。任意一方表达的内容能够被各个计算机所识别,这就称为网络协议,正如同两个人要相互交流,必须使用一种统一的语言,网络协议正是起着这样的作用。它主要有三要素语法、语义、时序,正如同英语,它能表达意思为语义,有很多语法,时序则是为了表达做事的顺序。最常用的协议有TCP/IP协议。 如同语言中有汉语和英语。而互...

2018-12-04 19:38:27 116

空空如也

空空如也

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

TA关注的人

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