![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java数据结构
清风_1998
这个作者很懒,什么都没留下…
展开
-
递归和回溯解决八皇后问题
一、题目八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。二、思路使用递归和回溯解决该问题,并将结果保存到长度为8的一维数组中。比如:[7, 3, 0, 2, 5, 1, 6, 4],意思是在8*8的棋盘上,第一行的棋子放在第7列,第二行的棋子放在第3列,第三行的棋子放在第2列以此类推。三、源代码package r原创 2020-06-28 20:39:34 · 317 阅读 · 0 评论 -
递归实现走迷宫
一、题目题目很简单,在迷宫内,给定起始点和终点,根据一定的行走策略,使用递归操作,找出一条可以行走的路径。二、源代码package recursion;import java.util.Stack;public class Maze { public static void main(String[] args) { int width = 8, height = 8; int startX = 1, startY = 1,endX = 6, endY = 6; //按照数组索引来书原创 2020-06-28 16:14:09 · 932 阅读 · 0 评论 -
完整版的逆波兰计算器,可实现小数点和括号的计算
一、简介根据中缀表达式转后缀表达式的,实现了完整版的逆波兰计算器。可进行加减乘除和括号以及小数点的计算。实现原理如下:以1+((2+3)*4)-5为例:二、源代码package stack;import java.util.ArrayList;import java.util.List;import java.util.Stack;import java.util.regex.Pattern;// 逆波兰表达式完整版(可以匹配小数点)public class PolandNot原创 2020-06-27 23:31:21 · 881 阅读 · 1 评论 -
逆波兰表达式计算
一、简介前缀表达式、中缀表达式、后缀表达式都是四则运算的表达方式,用以四则运算表达式求值,即数学表达式的求值。中缀表达式就是常见的运算表达式,如(3+4)×5-6前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前,比如:- × + 3 4 5 6后缀表达式又称逆波兰表达式,与前缀表达式相似,只是运算符位于操作数之后,比如:3 4 + 5 × 6 -其中,中缀表达式转为前缀和后缀表达式的方法如下。假设中缀表达式:a+b*c-(d+e)第一步:按照运算符的优先级对所有的运算单位加括号原创 2020-06-27 10:37:25 · 1551 阅读 · 0 评论 -
数组栈模拟简单计算器加减乘除
一、说明根据前一篇文章数组模拟的栈为基础,来实现简单计算器的加减乘除功能。二、原理将输入的字符串(假设为7*2-5+36/9+3-4)等式拆分成数字和符号两部分,分别存储到下面的数字栈和符号栈里。原理很简单是不是,在这里有两个注意的点。一个是注意符号优先级问题,另一个是要倒序的问题。首先,第一个是符号优先级问题。假设我要往符号栈里面塞数据,我要看前面是否已经有数据,如果已经有了,看看是不是 “乘号” 或者 “除号”。如果是的话,要先对其进行乘法或除法运算,再加进栈里!比如将36/9运算之后再放进原创 2020-06-21 19:00:18 · 657 阅读 · 0 评论 -
数组模拟栈结构
一、介绍使用数组模拟栈,实现pop,push和显示功能。效果图如下:二、源代码package stack;import java.util.regex.Pattern;public class Calculator { public static void main(String[] args) { // step1.初始化操作 String opr = "20/6+90*50-40-30"; String oprFormated = opr.replaceAll("\\s*原创 2020-06-21 18:06:22 · 175 阅读 · 0 评论 -
约瑟夫问题
一、约瑟夫问题N个人围成一圈,从约定编号为K的人开始报数,第M个将被杀掉,依次类推,最后剩下一个,其余人都将被杀掉。实现思路:用单向循环链表来表示圈,将人杀死后修改链表上的节点即可。二、java源代码package linkedList;// 约瑟夫问题:环形链public class Josepfu { public static void main(String[] args) { // 初始化数据 int wholeNum = 6, startNum = 6,原创 2020-06-18 15:30:02 · 137 阅读 · 0 评论 -
对双链表进行增删改查
一、源代码双链表和单链表不同的地方在于每一个节点都多了一个pre,指向前一个节点。package linkedList;public class DoubleLinkedListDemo { public static void main(String[] arc) { // 初始化数据 HeroNode2 hero1 = new HeroNode2(1, "宋江", "及时雨"); HeroNode2 hero2 = new HeroNode2(2, "李逵", "黑旋风");原创 2020-06-17 10:23:52 · 154 阅读 · 0 评论 -
反向打印单链表的结果
一、设计思路一种方式就是将单链表进行反转,然后打印出来,但是这种方式会破坏其结构!如果突然要求正向打印,那么就很麻烦,还要再反转回去;另外一种方式就是使用栈的方式实现。二、代码package linkedList;import java.util.Stack;/* * 题目要求: 使用带head头的单向链表实现 –水浒英雄排行榜管理 完成对英雄人物的增删改查操作, 注: 删除和修改,查找可以考虑学员独立完成,也可带学员完成 第一种方法在添加英雄时,直接添加到链表的尾部 第二种方式在添原创 2020-06-16 23:57:03 · 269 阅读 · 0 评论 -
对单链表进行反转
一、设计思路初始的单链表headNode(不显示)->node1->node2->node3构建一个头结点newHeadNode(不显示),遍历初始单链表,移到新的头结点后面newHeadNode(不显示)->node1newHeadNode(不显示)->node2->node1newHeadNode(不显示)->node3->node2->node1然后再把newHeadNode后面的节点移回去。headNode->-&原创 2020-06-16 23:29:51 · 149 阅读 · 0 评论 -
往队列中加数据,pop数据,show数据
一、最终的效果图二、源程序package queue;import java.util.Scanner;// 队列可通过“循环队列”和“数据搬移”实现队列全部节点的使用public class queue { public static void main(String[] args) { ArrayQueue arrayQueue = new ArrayQueue(4); //初始化长度为3的队列 boolean loop = true; Scanner input = n原创 2020-06-16 22:35:59 · 915 阅读 · 1 评论 -
以棋盘为例,用稀疏数组表示二维数组
一、题目// 要求:将棋盘的黑子和白子用1和2来代替。将下面二维数组以稀疏数组形式表示// 0 0 0 0 0 0 0 0 0 0 0// 0 0 1 0 0 0 0 0 0 0 0// 0 0 0 0 2 0 0 0 0 0 0// 0 0 0 0 0 0 0 0 0 0 0// 0 0 0 0 0 0 0 0 0 0 0// 0 0 0 0 0 0 0 0 0 0 0// 0 0 0 0 0 0 0 0 0 0 0// 0 0 0 0 0 0 0 0 0 0 0//原创 2020-06-16 22:29:15 · 251 阅读 · 0 评论