![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
海也是风
岁月平添了我的愁
展开
-
图的广度优先算法分析及实现
思路分析package com.ran;import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;public class Hello { private ArrayList<String> dingdian; //存储顶点集合 private int[][] juzhen; //存储邻接矩阵 private int bianshu; // 表示边的数目原创 2020-09-15 08:34:20 · 226 阅读 · 0 评论 -
图的深度优先算法分析及实现
思路分析package com.shujujiegou;import java.util.ArrayList;import java.util.Arrays;public class Hello { private ArrayList<String> dingdian; //存储顶点集合 private int[][] juzhen; //存储邻接矩阵 private int bianshu; // 表示边的数目 //定义给数组boolean【】原创 2020-09-15 08:34:04 · 330 阅读 · 0 评论 -
平衡二叉树的双旋转分析及实现
思路分析当符合右旋转条件时:如果她的左子树的右子树高度大于右子树高度:先对当前节点的左节点进行左旋转再对当前节点进行右旋转当符合左旋转条件时:如果它的右子树的左子树高度大于右子树:先对当前节点的右节点进行右旋转再对当前节点进行左旋转package com.shujujiegou;public class ran { public static void main(String[] args) {// int []arr={4,3,6,5,7,8};原创 2020-09-15 08:33:48 · 347 阅读 · 0 评论 -
平衡二叉树的右旋转分析及实现
思路分析package com.shujujiegou;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;public class ran { public static void main(String[] args) {// int []arr={4,3,6,5,7,8}; int []ar原创 2020-09-14 22:18:32 · 114 阅读 · 0 评论 -
平衡二叉树的左旋转分析及实现
思路分析package com.ran;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;public class hello { public static void main(String[] args) { int []arr={4,3,6,5,7,8}; erchapaixushu er原创 2020-09-14 22:16:21 · 426 阅读 · 0 评论 -
二叉排序树的删除节点分析及实现
思路分析删除叶子结点:需要找到删除的节点node找到node的父节点确定node是左子节点还是右子节点根据前面的情况来对应删除 左:parent.left=null 右:parent.right=null删除只有一颗子树的节点需要找到删除的节点node找到node的父节点确定node的子节点是左还是右确定node是左还是右node是左,若子节点是左:parent.left=node.left 若子节点是右:parent.left=node.rightno原创 2020-09-14 22:12:58 · 435 阅读 · 0 评论 -
二叉排序树的创建和遍历实现
思路分析package com.shujujiegou;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;public class ran { public static void main(String[] args) { int []arr={7,3,10,12,5,1,9}; erchap原创 2020-09-14 22:06:38 · 115 阅读 · 0 评论 -
霍夫曼树(带权路径长度最短树)的解析和实现
思路分析package com.ran;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;public class hello { public static void main(String[] args) { int arr[]={13,7,8,3,29,6,1}; HeroNode her原创 2020-09-14 22:04:49 · 610 阅读 · 0 评论 -
基于java的二叉树堆排序的实现
思路分析package com.shujujiegou;import java.util.Arrays;public class ran { public static void main(String[] args) { //要求升序排列 int arr[]={4,6,8,5,9}; duipaixu(arr); } //编写一个堆排序的方法 public static void duipaixu(in原创 2020-09-14 21:59:16 · 135 阅读 · 0 评论 -
遍历中序线索化二叉树的实现
思路分析package com.ran;public class hello { public static void main(String[] args) { HeroNode root = new HeroNode(1, "qqq"); HeroNode root2 = new HeroNode(3, "www"); HeroNode root3 = new HeroNode(6, "eee"); HeroNode原创 2020-09-14 21:49:59 · 168 阅读 · 0 评论 -
中序线索化二叉树的实现
思路分析:在这里只做中序线索化二叉树:package com.ran;public class hello { public static void main(String[] args) { HeroNode root = new HeroNode(1, "qqq"); HeroNode root2 = new HeroNode(3, "www"); HeroNode root3 = new HeroNode(6, "eee");原创 2020-09-14 21:42:33 · 617 阅读 · 0 评论 -
顺序存储二叉树的实现
题目:给你一个数组{1,2,3,4,5,6,7},要求以二叉树前序遍历的方式进行遍历,前序遍历的结果应该为1,2,3,4,5,6,7。思路分析:package com.shujujiegou;import sun.plugin2.util.ParameterNames;public class ran { public static void main(String[] args) { int[] arr={1,2,3,4,5,6,7}; //创建原创 2020-09-14 13:33:18 · 259 阅读 · 0 评论 -
二叉树的删除节点
思路分析首先考虑如果这个树是空树的话,只有一个root节点,是没有办法删除的因为二叉树是单向的,所以我们只能判断当前节点的子节点是否需要被删除如果当前节点的左子节点不为空,并且左子节点就是要删除的节点,那么this.zuo=null;并且返回如果当前节点的右子节点不为空,并且右子节点就是要删除的节点,那么thisyou=null;并且返回如果前面两步都没有完成,那么我们就要向左、右子树进行递归删除package com.ran;public class hello原创 2020-09-14 13:28:11 · 130 阅读 · 0 评论 -
单链表的无次序添加
单链表的无编号次序添加及遍历package com.ran;import java.util.Scanner;public class hello { public static void main(String[] args) { //测试 //先创建几个节点 HeroNode hero1 = new HeroNode(1, "ran", "boss"); HeroNode hero2 = new HeroNode(2,原创 2020-08-30 22:59:33 · 97 阅读 · 0 评论 -
单链表的按编号次序添加及遍历
思路分析:首先通过辅助变量temp找到新添加的节点的位置,通过遍历来搞定新的节点的next = temp.next将temp.next=新的节点package com.ran;import java.util.Scanner;public class hello { public static void main(String[] args) { HeroNode hero1=new HeroNode(1,"ran","qwe"); HeroN原创 2020-08-31 21:28:27 · 225 阅读 · 0 评论 -
单链表的元素删除
删除元素思路:寻找的应该是被删除元素B的前一个元素A利用A的next直接指向C来进行删除B的操作package com.ran;public class hello { public static void main(String[] args) { HeroNode hero1=new HeroNode(1,"ran","qwe"); HeroNode hero2=new HeroNode(2,"rasd","asd"); HeroNo原创 2020-09-01 21:51:25 · 187 阅读 · 0 评论 -
单链表的元素修改
思路分析找到修改节点的位置进行传参的修改即可package com.ran;import java.util.Scanner;public class hello { public static void main(String[] args) { HeroNode hero1=new HeroNode(1,"ran","qwe"); HeroNode hero2=new HeroNode(2,"rasd","asd"); Hero原创 2020-09-03 09:07:27 · 1316 阅读 · 0 评论 -
单链表的有效节点个数
思路分析:有效节点个数即单链表的长度在遍历的时候定义一个length,每遍历一个节点,length++,最后返回sum即可package com.ran;import java.util.Scanner;public class hello { public static void main(String[] args) { HeroNode hero1=new HeroNode(1,"ran","qwe"); HeroNode hero2=ne原创 2020-09-03 21:07:13 · 639 阅读 · 0 评论 -
单链表的倒数第k个节点
思路分析需要首先得到单链表的长度length从链表的第一个开始遍历,第length-k就是我们要寻找的节点package com.ran;import java.util.Scanner;public class hello { public static void main(String[] args) { HeroNode hero1=new HeroNode(1,"ran","qwe"); HeroNode hero2=new HeroNo原创 2020-09-03 22:22:35 · 128 阅读 · 0 评论 -
单向环形链表的创建和遍历
思路分析构建一个单向环形链表的思路:先创建第一个节点,让first指向该节点,并形成环状后面当我们每创建一个新的节点,就把该节点加入到已有的环形链表中即可遍历环形链表的思路:设置一个辅助变量currentboy,指向first节点通过while循环遍历该链表即可 currBoy.next=firstpackage com.ran;public class hello { public static void main(String[] args) {原创 2020-09-04 22:26:53 · 557 阅读 · 0 评论 -
单向环形链表的元素删除(约瑟夫问题)
思路分析:需要创建一个辅助指针temp,事先应该指向环形链表的最后报数之前,应该将first和temp移动k-1次当报数时,first和temp同时移动,移动m-1次(m为报数次数)这时就可以将first指的出圈,原来first指向的节点就没有任何引用了,就"出圈"了first=first.nexttemp.next=firstpackage com.ran;public class hello { public static void main(String[] a原创 2020-09-06 15:04:08 · 387 阅读 · 0 评论 -
双向链表的增删改查分析及实现
思路分析:遍历方式和单链表一样,可以向前也可以向后查找添加(默认添加到双向链表最后) :先找到双向链表最后这个节点temp.next=newHeroNodenew HeroNode.pre=temp;修改思路和原来的单向链表思路一样删除双向链表,因此我们可以实现自我删除直接找到要删除的节点,比如temptemp.pre.next=temp.nexttemp.next.pre=temp.pre下面的代码和老师的思路不太一样,不是默认添加删除末尾元素,而是任意一个位置元素原创 2020-09-06 22:02:40 · 102 阅读 · 0 评论 -
基于java的单链表实现栈
实现了简单的入栈出战和遍历,判断空满没做,懒的搞package com.ran;import java.util.Scanner;public class hello { public static void main(String[] args) { //先创建一个栈对象 ArrayStack stack = new ArrayStack(); String key = ""; boolean loop = true;/原创 2020-09-07 12:08:22 · 292 阅读 · 0 评论 -
基于栈的综合计算器的实现
思路分析通过一个index值来遍历我们的表达式如果我们发现是数字,就直接入数栈如果是符号,就分如下情况:如果发现当前符号栈为空,就直接入栈如果符号栈有操作符,就进行比较,如果当前的操作符的优先级<=栈中的操作符,就需要从数栈中pop出两个数,再从符号栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈如果当前的符号栈优先级大于栈中的优先级,就直接入符号栈当表达式扫描完毕,就顺序的从数栈和符号栈中pop出对应的数字和符号进行运算最后在数栈中只有一个数字原创 2020-09-08 21:11:16 · 99 阅读 · 0 评论 -
中缀表达式遍历为中缀list
思路分析将符号和数字遍历放入list中在遍历数字的时候要考虑到多位数的问题,进行多位数的拼接package com.ran;import java.util.ArrayList;import java.util.List;import java.util.Stack;public class hello { public static void main(String[] args) { //完成中缀表达式转后缀表达式 //1. 1+((原创 2020-09-09 21:45:33 · 196 阅读 · 0 评论 -
中缀表达式(list)转后缀表达式(list)
思路分析两个栈,s1存运算符,s2存中间结果从左到右扫描:遇到数,压s2遇到运算符:若s1为空,或者s1栈顶为(,则直接压入若优先级比栈顶的高,也压入否则将s1栈顶的弹出,压到s2,再次与新栈顶比较遇到括号左括号,直接压入有括号,弹出s1栈顶,压入s2,直到遇到(为止,此时左右括号废弃将s1剩余的依次压入s2依次弹出s2,s2的逆序就是后缀表达式!但是,一般在实际操作中,并不是将s2设置为栈,因为栈的先进后出的存储数据原则,导致取逆序太麻烦,因此将s2设置为L原创 2020-09-09 21:54:53 · 1111 阅读 · 0 评论 -
后缀表达式的逆波兰计算器计算
思路分析先将biaodashi装入一个Arraylist中将Arraylist传递给一个方法,遍历Arraylist 配合栈完成计算package com.ran;import java.util.ArrayList;import java.util.List;import java.util.Stack;public class hello { public static void main(String[] args) { //(3+4)*5-6 =&g原创 2020-09-09 21:58:48 · 103 阅读 · 0 评论 -
完整版逆波兰计算器
思路分析结合前三篇文章的内容所得先将中缀表达式转中缀list再将中缀list转后缀list最后计算后缀listpackage com.ran;import java.util.ArrayList;import java.util.List;import java.util.Scanner;import java.util.Stack;public class Hello { public static void main(String[] args) {原创 2020-09-09 22:06:43 · 162 阅读 · 0 评论 -
基于java的哈希表的实现
思路分析底层是链表+数组的结构通过传入key值取余定到具体的链表上进行操作package com.ran;import java.util.ArrayList;import java.util.List;import java.util.Scanner;import java.util.Stack;public class Hello { public static void main(String[] args) { //创建哈希表 Has原创 2020-09-10 20:22:58 · 116 阅读 · 0 评论 -
二叉树前中后序遍历分析及实现
思路分析前序遍历先输出当前节点(初始的时候是根节点),如果左子节点不为空,则递归继续前序遍历如果它的右子节点不为空,则递归继续前序遍历中序遍历如果当前节点的左子节点不为空,则递归中序遍历先输出当前节点如果当前节点的右子节点不为空,则递归中序遍历后序遍历如果当前节点的左子节点不为空,则递归后序遍历如果当前节点的右子节点不为空,则递归后序遍历输入当前节点package com.ran;public class ran { public sta原创 2020-09-12 20:19:30 · 201 阅读 · 0 评论 -
二叉树前中后序查找的实现
思路分析前序查找的思想先判断当前节点的no是否等于要查找的如果是相等,则返回当前节点如果不等,则判断当前节点的左子节点是否为空,如果不为空,则递归左子节点前序查找如果当前节点的左子树递归查找,找到节点就返回,否则继续判断,当前节点的右子节点是否为空,如果不为空,则右子树递归查找中序查找思想先判断当前节点的左子节点是否为空,如果不为空,则递归中序查找如果找到,就返回,如果没有找到,就和当前节点比较,如果是则返回当前节点,否则继续进行右递归中序查找如果右递归中序查找,找到就返回,原创 2020-09-13 19:27:39 · 117 阅读 · 0 评论