数组结构与算法

文章目录

  • 数据结构与算法
    • 稀疏数组sparse
    • 队列
    • 单向链表
    • 双向链表
    • 单向环形列表:CircleSingleLinkedList
    • 递归
    • 排序算法
      • 快速排序思路
      • 赫夫曼树 (HuffmanTree)
      • 二叉排序树(Binary sort tree)
        • 构建二叉树
        • 遍历二叉树
      • 平衡二叉树(AVL树)
      • 多路查找树
  • 算法
    • 二分查找算法
    • 动态规划
    • KMP
    • 贪心算法
    • 普利姆算法
    • 克鲁斯卡尔算法
    • 迪杰斯特拉算法
    • 弗洛伊德算法
    • 马踏棋盘

数据结构与算法

稀疏数组sparse

  • 二维数据转稀疏数组(chessToSparse)
  • 稀疏数组转二维数组(sparseToChess)
  • IO存盘

队列

  • 使用数组模拟循环队列(ArrayCircleQueue)
    元素个数:rear + maxsize + front % maxsize
    判断队列是否为空:
  • 使用链表模拟队列

单向链表

  • 链表新增
  • 链表删除
  • 链表修改
  • 链表反转

双向链表

  • 链表新增
  • 链表删除
  • 链表修改

单向环形列表:CircleSingleLinkedList

  • 约瑟夫问题

  • 实现计算器计算【722-5+1-5+3-4=?】的结果
  • 前缀表达式
  • 中缀表达式
  • 后缀表达式
  • 中缀转后缀
    在这里插入图片描述

递归

  • 打印阶乘
  • 找出口:最优路径方法:列出所有策略的方法,找出最短路径
  • 八皇后问题

排序算法

在这里插入图片描述

快速排序思路

在这里插入图片描述

赫夫曼树 (HuffmanTree)

  • 数组构建赫夫曼树
  • 赫夫曼编解码

二叉排序树(Binary sort tree)

  • 构建二叉排序树
  • 中序遍历
  • 删除指定节点值
构建二叉树
遍历二叉树
package com.semanteme.demo.tree;import java.util.*;public class TreeBase {public static void main(String[] args) {Node root = new Node(7);Node node2 = new Node(5);root.setLeft(node2);Node node1 = new Node(11);root.setRight(node1);Node node3 = new Node(6);node2.setRight(node3);Node node4 = new Node(2);node2.setLeft(node4);Node node5 = new Node(3);node4.setRight(node5);Node node6 = new Node(1);node4.setLeft(node6);Node node7 = new Node(13);node1.setRight(node7);Node node8 = new Node(9);node1.setLeft(node8);Node node9 = new Node(14);node7.setRight(node9);Node node10 = new Node(12);node7.setLeft(node10);NodeUtil nodeUtil = new NodeUtil();nodeUtil.preOrder(root);System.out.println("====================");nodeUtil.inOrder(root);System.out.println("====================");nodeUtil.sufOrder(root);System.out.println("====================");List<Node> list = new ArrayList<>();list.add(root);nodeUtil.levelOrder(list);nodeUtil.levelOrderTraversal(root);}}class NodeUtil{/*** 前序遍历* @param node*/public void preOrder(Node node) {System.out.print(node.getValue() + " ");if(node.getLeft() != null){preOrder(node.getLeft());}if(node.getRight() != null){preOrder(node.getRight());}}/*** 中序遍历* @param node*/public void inOrder(Node node) {if(node.getLeft() != null){inOrder(node.getLeft());}System.out.print(node.getValue() + " ");if(node.getRight() != null){inOrder(node.getRight());}}/*** 后续遍历* @param node*/public void sufOrder(Node node){if(node.getLeft() != null){sufOrder(node.getLeft());}if(node.getRight() != null){sufOrder(node.getRight());}System.out.print(node.getValue() + " ");}/*** 层级遍历** @param list*/public void levelOrder(List<Node> list){ArrayList<Node> nextList = new ArrayList<>();for (Node node : list) {System.out.print(node.getValue() + " ");if(node.getLeft() != null){nextList.add(node.getLeft());}if(node.getRight() != null){nextList.add(node.getRight());}}System.out.println("====================");if(!nextList.isEmpty()){levelOrder(nextList);}}public void levelOrderTraversal(Node node){Queue<Node> queue = new LinkedList<>();queue.add(node);while (!queue.isEmpty()){Node poll = queue.poll();System.out.print(poll.getValue() + " ");if(poll.getLeft() != null){queue.add(poll.getLeft());}if(poll.getRight() != null){queue.add(poll.getRight());}}}
}class Node{private int value;private Node root;private Node left;private Node right;public Node() {}public Node(int value) {this.value = value;}public Node(int value, Node left, Node right) {this.value = value;this.left = left;this.right = right;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}public Node getLeft() {return left;}public void setLeft(Node left) {this.left = left;}public Node getRight() {return right;}public void setRight(Node right) {this.right = right;}public Node getRoot() {return root;}public void setRoot(Node root) {this.root = root;}@Overridepublic String toString() {return "Node{" +"value=" + value +'}';}
}

平衡二叉树(AVL树)

  • 左旋
  • 右旋

多路查找树

  • 图的表示
  • 深度优先遍历(DFS)
  • 广度优先遍历(BFS)

算法

二分查找算法

  • 递归写法
  • 非递归写法
  • 汉诺塔游戏算法

动态规划

  • 背包

KMP

贪心算法

普利姆算法

  • 修路最短

克鲁斯卡尔算法

迪杰斯特拉算法

弗洛伊德算法

在这里插入图片描述

马踏棋盘

在这里插入图片描述

package com.semanteme.demo.dst;import java.util.ArrayList;
import java.util.List;public class HorseChessBoard  {public static void main(String[] args) {int X = 8;int Y = 8;ChessBoard chessBoard = new ChessBoard(X, Y);System.out.println("周游前===========");chessBoard.show();long startTime = System.currentTimeMillis();chessBoard.travel(3, 2, 1);System.out.println("周游后===========;总共耗时:" + (System.currentTimeMillis() - startTime));chessBoard.show();}}class ChessBoard {private int X;private int Y;private int[][] chessBoard;private boolean[] visitChess;private boolean isFinished;public ChessBoard(int X, int Y){this.X = X;this.Y = Y;this.chessBoard = new int[X][Y];this.visitChess = new boolean[X * Y];}public void travel(int row, int col, int step){chessBoard[row][col] = step;visitChess[row * Y + col] = true;List<Coordinate> next = next(new Coordinate(row, col));sort(next);while (!next.isEmpty()){Coordinate remove = next.remove(0);// 未被访问过if(!visitChess[remove.getRow() * Y + remove.getCol()]){travel(remove.getRow(), remove.getCol(), step+1);}}if(step < X * Y && !isFinished){chessBoard[row][col] = 0;visitChess[row * Y + col] = false;}else {isFinished = true;}}private void sort(List<Coordinate> list){list.sort((o1, o2) -> {List<Coordinate> next1 = next(o1);List<Coordinate> next2 = next(o2);return next1.size() - next2.size();});}private List<Coordinate> next(Coordinate p){List<Coordinate> nextPoints = new ArrayList<>(8);// 添加0位置if(p.getRow() - 1 >= 0 && p.getCol() + 2 < Y){Coordinate point = new Coordinate(p.getRow() - 1, p.getCol() + 2);nextPoints.add(point);}// 添加1位置if(p.getRow() + 1 < X && p.getCol() + 2 < Y){Coordinate point = new Coordinate(p.getRow() + 1, p.getCol() + 2);nextPoints.add(point);}// 添加2位置if(p.getRow() + 2 < X && p.getCol() + 1 < Y){Coordinate point = new Coordinate(p.getRow() + 2, p.getCol() + 1);nextPoints.add(point);}// 添加3位置if(p.getRow() + 2 < X && p.getCol() - 1 >= 0){Coordinate point = new Coordinate(p.getRow() + 2, p.getCol() - 1);nextPoints.add(point);}// 添加4位置if(p.getRow() + 1 < X && p.getCol() - 2 >= 0){Coordinate point = new Coordinate(p.getRow() + 1, p.getCol() - 2);nextPoints.add(point);}// 添加5位置if(p.getRow() - 1 > 0 && p.getCol() - 2 >= 0){Coordinate point = new Coordinate(p.getRow() - 1, p.getCol() - 2);nextPoints.add(point);}// 添加6位置if(p.getRow() - 2 >= 0 && p.getCol() - 1 >= 0){Coordinate point = new Coordinate(p.getRow() - 2, p.getCol() - 1);nextPoints.add(point);}// 添加7位置if(p.getRow() - 2 >= 0 && p.getCol() + 1 < Y){Coordinate point = new Coordinate(p.getRow() - 2, p.getCol() + 1);nextPoints.add(point);}return nextPoints;}public void show() {for (int[] chess : chessBoard) {for (int i : chess) {System.out.print(i + " ");}System.out.println();}}
}/*** 坐标*/
class Coordinate{public int row;public int col;public Coordinate(int row, int col) {this.row = row;this.col = col;}public int getRow() {return row;}public void setRow(int row) {this.row = row;}public int getCol() {return col;}public void setCol(int col) {this.col = col;}@Overridepublic String toString() {return "Coordinate{" +"row=" + row +", col=" + col +'}';}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/148369.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式架构篇

1、微服务 微服务架构风格&#xff0c;就像是把一个单独的应用程序开发为一套小服务&#xff0c;每个服务运行在自己的进程中&#xff0c;并使用轻量级机制通信&#xff0c;通常是 HTTP API。这些服务围绕业务能力来构建&#xff0c;并通过完全自动化部署机制来独立部署。这些…

【3】c++设计模式——>UML表示类之间的关联关系

关联关系 关联&#xff08;Assocition&#xff09;关系是类与类之间最常见的一种关系&#xff0c;它是一种结构化的关系&#xff0c;表示一个对象与另一个对象之间有联系&#xff0c;如汽车和轮胎、师傅和徒弟、班级和学生等。在UML类图中&#xff0c;用&#xff08;带接头或不…

列表的增删改查和遍历

任务概念 什么是任务 任务是一个参数为指针&#xff0c;无法返回的函数&#xff0c;函数体为死循环不能返回任务的实现过程 每个任务是独立的&#xff0c;需要为任务分别分配栈称为任务栈&#xff0c;通常是预定义的全局数组&#xff0c;也可以是动态分配的一段内存空间&#…

华为云云耀云服务器L实例评测|部署在线影音媒体系统 Jellyfin

华为云云耀云服务器L实例评测&#xff5c;部署在线影音媒体系统 Jellyfin 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品规格1.3 应用场景1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Jellyfin3.1 Jellyfin 介绍3.2 Docke…

全志ARM926 Melis2.0系统的开发指引④

全志ARM926 Melis2.0系统的开发指引④ 编写目的7. 固件打包脚本7.1.概要描述7.2.术语定义7.2.1. makefile7.2.2. image.bat 7.3.工具介绍7.4.打包步骤7.4.1. makefile 部分7.4.2. image.bat 部分 7.5.问题与解决方案7.5.1. 固件由那些文件构成7.5.2. melis100.fex 文件包含什么…

十天学完基础数据结构-第五天(栈(Stack)和队列(Queue))

栈的定义和特点 栈是一种线性数据结构&#xff0c;它遵循后进先出&#xff08;LIFO&#xff09;原则。栈具有以下基本概念和特点&#xff1a; 栈顶&#xff1a;栈的顶部元素&#xff0c;是唯一可访问的元素。 入栈&#xff1a;将元素添加到栈顶。 出栈&#xff1a;从栈顶移除…

CUDA C编程权威指南:1.1-CUDA基础知识点梳理

主要整理了N多年前&#xff08;2013年&#xff09;学习CUDA的时候开始总结的知识点&#xff0c;好长时间不写CUDA代码了&#xff0c;现在LLM推理需要重新学习CUDA编程&#xff0c;看来出来混迟早要还的。 1.CUDA 解析&#xff1a;2007年&#xff0c;NVIDIA推出CUDA&#xff08…

微信小程序button按钮去除边框去除背景色

button边框 去除button边框 在button上添加plain“true”在css中添加button.avatar-wrapper {background: none}用于去除button背景色在css中添加button.avatar-wrapper[plain]{ border:0 }用于去除button边框

SpringMVC(二)@RequestMapping注解

我们先新建一个Module。 我们的依赖如下所示&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaL…

NXP公司K60N512+PWM控制BLDC电机

本篇文章介绍了使用NXP公司提供的塔式快速原型系统来驱动控制带霍尔传感器的无刷直流电机。文章涉及的塔式快速原型系统主要包括以下四个独立板卡&#xff1a;1.塔式系统支撑模块&#xff08;TWR-Elevator&#xff09;&#xff0c;用以连接微控制器以及周边模块&#xff1b;2.低…

Android开源 Skeleton 骨架屏 V1.3.0

目录 一、简介 二、效果图 三、引用 Skeleton 添加jitpack 仓库 添加依赖: 四、新增 “块”骨架屏 1、bind方法更改和变化&#xff1a; 2、load方法更改和变化&#xff1a; 五、关于上一个版本 一、简介 骨架屏的作用是在网络请求较慢时&#xff0c;提供基础占位&…

LabVIEW开发带式谱感测技术

LabVIEW开发带式谱感测技术 如今&#xff0c;通过无线网络传输的数据量正在迅速增加&#xff0c;并导致频谱稀缺。超过数十亿的无线设备将被连接起来&#xff0c;并需要互联网接入。因此&#xff0c;无线电频谱管理方案的效率不足以授予对所有设备的访问权限。在频谱分配中&am…

开源白板工具 Excalidraw 架构解读

本文讲解开源白板工具 Excalidraw 的架构设计。 版本 0.16.1 技术栈 Vite React TypeScript Yarn Husky。 脚手架原来是用的是 Create React App&#xff0c;但这个脚手架已经不维护了&#xff0c;一年多没发布新版本了。 目前市面上比较流行的 React 脚手架是 Vite&…

CSS学习小结

css的两种使用方式&#xff1a; ①内嵌样式表 ②导入外部样式表&#xff08;实际开发常用&#xff09;<link href"...." rel"stylesheet"/> 选择器&#xff1a; ①标签选择器&#xff1a;通过标签种类决定 ②类选择器&#xff1a;class"..…

SSRF+redis未授权漏洞复现

1.SSRF漏洞简介 SSRF&#xff08;Server-Side Request Forgery&#xff09;即服务器端请求伪造&#xff0c;是一种由攻击者构造攻击链传给服务器&#xff0c;服务器执行并发起请求造成安全问题的漏洞&#xff0c;一般用来在外网探测或攻击内网服务。当网站需要调用指定URL地址…

nodejs+vue养老人员活体鉴权服务系统elementui

系统 统计数据&#xff1a;统计报表、人员台账、机构数据、上报数据、核验报表等&#xff0c;养老人员活体鉴权服务是目前国家养老人员管理的重要环节&#xff0c;主要为以养老机构中养老人员信息为基础&#xff0c;每月进行活体鉴权识别并统计数据为养老补助等管理。前端功能&…

雷达编程实战之提高探测速度

有效帧频率作为雷达一个非常核心的指标&#xff0c;它代表了雷达探测识别的速度&#xff0c;速度越快&#xff0c;后级各项智能驾驶功能就能得到更快、更有效的判断。本篇文章首先从硬件的角度&#xff0c;提供了一种合理利用片上资源提高探测识别速度的常用方法&#xff0c;然…

vertx的学习总结6

Beyond the event bus 一、章节覆盖&#xff1a; 如何在事件总线之上公开服务 verticles和事件总线服务的异步测试 动态代理&#xff1a; MyService 接口 package porxy.test;import io.vertx.codegen.annotations.ProxyGen;ProxyGen public interface MyService {void he…

Neo4j最新安装教程(图文版)

目录 一、软件介绍 二、下载软件 1、官方下载 2、云盘下载 三、安装教程 1、首先配置Neo4j的环境变量 2、启动neo4j服务器 3、访问界面 一、软件介绍 官网地址&#xff1a;https://neo4j.com/ Neo4j是一个高性能、可扩展的图数据库管理系统。它专注于存储、查询和处理大…

1.6 计算机网络的性能

思维导图&#xff1a; 1.6.1 计算机网络的性能指标 前言&#xff1a; 我的理解&#xff1a; 这段前言主要介绍了关于计算机网络性能的两个方面的讨论。首先&#xff0c;计算机网络的性能可以通过一些重要的性能指标来衡量。但除了这些指标之外&#xff0c;还有一些非性能特征…