![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法习题
数据结构与算法的练习题
星光不问赶路人º
道路越是煎熬,就越坦然面对微笑;风浪刮得越高,就要越心高气傲
展开
-
八皇后问题
八皇后问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即: 任意两个皇后都不能处于同一行 、同一列或同一斜线上,问有多少种摆法?答案是(92)种。思路分析第一个皇后先放第一行第一列。第二个皇后放在第二行第一列、然后判断是否 OK, 如果不 OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适的。继续第三个皇后,还是第一列、第二列……直到第 8 个皇后也能放转载 2020-09-14 23:18:30 · 270 阅读 · 0 评论 -
迷宫问题
设置 找路策略 (上下左右)的相关顺序,使用递归、回溯的方法。让小球可以找到一条走出迷宫的通路。代码实现public class MaZeTest { public static void main(String[] args) { // 初始化 int[][] map = initArray(); // 输出地图 System.out.println("地图初始化为:"); for (int i = 0; i &转载 2020-09-14 23:14:57 · 158 阅读 · 0 评论 -
逆波兰计算器
逆波兰表达式又叫做后缀表达式,逆波兰表达式把运算量写在前面,把算符写在后面。我们平时书写的表达式都是中缀表达式,这个表达式更加方便我们进行计算。但是相对于计算机而言,逆波兰表达式运算更加方便。只需要入栈和出栈两种操作就可以搞定所有运算,遇到操作数就入栈,遇到运算符就出栈,然后将栈顶的两个操作数进行相应运算。所以,要想用代码实现计算器的首要步骤,就是将 中缀表达式 转为 后缀表达式。中缀表达式转后缀表达式步骤如下:初始化两个栈:运算符栈 s1 和储存中间结果的栈 s2;从左至右扫描中缀.转载 2020-08-30 14:24:14 · 237 阅读 · 0 评论 -
链表—约瑟夫问题
单向环形链表应用场景约瑟夫问题:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来处理 约瑟夫 问题:先构成一个有 n 个结点的单循环链表,然后由 k 结点起从 1 开始计数,计到 m 时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从 1 开始计数,直到最后转载 2020-08-30 13:57:10 · 217 阅读 · 0 评论 -
链表—从尾到头打印单链表
为了不改变链表原本的顺序,这里使用 栈 的“先进后出”的特点,完成单链表的逆序打印。 public static void reversePrint(HeroNode head) { if (head.next == null) { return; } HeroNode temp = head.next; // 创建一个栈 Stack<HeroNode> stack = new Sta原创 2020-08-08 17:44:49 · 206 阅读 · 0 评论 -
链表—将单链表反转
/** * TODO 将单链表反转 * 1.先定义一个结点 * 2.从头到尾遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表的最前端 * * @param head */ public static void reverse(HeroNode head) { // 如果当前链表为空,或者只有一个结点,无需反转,直接返回 if (head.next == null || head.next.n...原创 2020-08-08 17:43:55 · 149 阅读 · 0 评论 -
链表—查找单链表中倒数第k个结点
要想获取链表中的倒数第k个结点,需要经过下面的几个步骤:①. 接收head结点,接收 index②. index 表示倒数第 index个结点③. 先把链表从头到尾遍历,得到链表的总长度: getLength():获取单链表中结点的个数④. 得到size后,从链表的第一个开始遍历(size - index)个⑤. 如果找到,则返回 此 结点,否则返回 null /** * @param head 头结点 * @param index 第 index 个结点原创 2020-08-08 17:42:58 · 284 阅读 · 0 评论 -
链表—获取单链表中结点的个数
如果是带头结点的链表,不统计头结点。 public static int getLength(HeroNode head) { // 判断链表是否为空 if (head.next == null) { return 0; } int length = 0; // 不统计头结点 HeroNode currentNode = head.next; while (curr原创 2020-08-08 17:41:26 · 1224 阅读 · 0 评论