数据结构和算法基础

巩固基础,砥砺前行 。
只有不断重复,才能做到超越自己。
能坚持把简单的事情做到极致,也是不容易的。

java程序员要学习那些技能 : 作为一名Java程序员,要学习以下技能:

  1. Java编程语言:掌握Java编程语言的语法和基本概念,如数据类型、控制流、面向对象编程等。
  2. 数据库:了解数据库的基本概念和SQL语言,掌握至少一种数据库管理系统(如MySQL、Oracle、PostgreSQL等)的使用。
  3. Web开发:掌握Web开发技术,如HTML、CSS、JavaScript、Servlet、JSP等。
  4. 框架:掌握至少一种主流的Java框架,如Spring、Hibernate、Struts等,能够使用框架快速开发Web应用。
  5. 版本控制:了解版本控制工具(如Git、SVN等)的基本使用。
  6. 设计模式:了解常用的设计模式,如工厂模式、单例模式、观察者模式等,能够应用到实际开发中。
  7. 网络编程:掌握Java网络编程技术,如Socket、TCP/IP协议等。
  8. 多线程编程:了解多线程编程的基本概念和技术,能够使用Java多线程编程。
  9. 数据结构和算法:了解基本的数据结构和算法,如栈、队列、排序、查找等,能够应用到实际开发中。
  10. Linux操作系统:了解Linux操作系统的基本概念和命令行操作,能够在Linux环境下进行Java开发。

数据结构和算法

程序= 数据结构+算法
数据结构是算法的基础

Java常用算法有哪些 : Java常用算法包括:

  1. 排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序等;2. 查找算法:顺序查找、二分查找、哈希查找等;
  2. 图算法:广度优先搜索、深度优先搜索、最短路径算法、最小生成树算法等;
  3. 字符串算法:KMP算法、BM算法、Sunday算法等;
  4. 动态规划算法:背包问题、最长公共子序列问题、最短路径问题等;
  5. 贪心算法:活动安排问题、背包问题等;
  6. 分治算法:归并排序、快速排序等;
  7. 回溯算法:八皇后问题、迷宫问题等。

Java常用的数据结构都有哪些 : Java常用的数据结构包括:

  1. 数组(Array):一组相同类型的数据元素的集合,可以通过下标访问元素。
  2. 链表(Linked List):由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
  3. 栈(Stack):一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。
  4. 队列(Queue):一种先进先出(FIFO)的数据结构,允许在队尾进行插入操作,在队头进行删除操作。
  5. 堆(Heap):一种特殊的树形数据结构,满足堆序性质,可以用来实现优先队列等数据结构。
  6. 树(Tree):一种非线性的数据结构,由节点和边组成,每个节点可以有多个子节点。
  7. 图(Graph):一种非线性的数据结构,由节点和边组成,可以表示各种复杂的关系。
  8. 散列表(Hash Table):一种利用哈希函数将元素映射到下标的数据结构,可以实现快速的查找和插入操作。
  9. 哈希集合(HashSet):基于散列表实现的集合,可以快速地进行元素的查找和插入操作。
  10. 哈希映射(HashMap):基于散列表实现的映射,可以快速地进行键值对的查找和插入操作。

问题1:字符串匹配问题。str1 是否完全包含 str2

1)暴力匹配
2)KMP算法

问题2:汉诺塔游戏

问题3:8皇后问题

问题4:骑士周游

问题5:写出单链表表示的字符串类以及字符串节点类的定义,并依次实现他的构造函数、以及计算字符串的长度、串赋值、判断两串相等、求子串、两串拼接、求子串在串中的位置等成员函数

问题6:使用二维数组保存棋盘上的数据,如何判断输赢?完成存盘退出和继续上局的功能

棋盘 二维数组->稀疏数组->写入文件
读取文件->稀疏数组->棋盘

问题7:约瑟夫问题(丢手帕),编号为 1,2,3,4……n的人围成一圈,约定编号为K(1<=K<=n)的人从1开始报数,数到m的那个人出列,然后从m的下一位又开始报数,数到m的那个人又出列,依次类推,直到所有人都出列为止,由此产生的一个出队的编号的序列

问题8:修路问题

问题9:最短路劲

稀疏数组和队列

将棋盘上的数据存储下来,可以使用二维数组来存储,没有棋子的可以使用默认的0,因此记录了很多没有意义的数据
–>优化:可以使用稀疏数组来存储

稀疏数组
记录数组有多少行 多少列;
把具体的有数据的行列以及数据记录下来,缩小程序的规模

棋盘数据存储和恢复:
使用稀疏数组来保留二维数组中有效的数据;
将稀疏数组存盘,同时将稀疏数组恢复为二维数组;

代码实现

package com.ttzz.a3;public class SparseArray {// 这是一个10*10的棋盘private static final int ROW_COL = 10;private static final int BLACK = 1;private static final int WHITE = 2;public static void main(String[] args) {int[][] aa = new int[ROW_COL][ROW_COL];
//		 System.out.println("棋盘:");
//		 printArray(aa);// 棋盘填充数据aa[3][4] = BLACK;aa[7][5] = BLACK;aa[3][2] = BLACK;aa[5][1] = BLACK;aa[6][6] = WHITE;aa[8][3] = WHITE;aa[1][1] = WHITE;aa[4][0] = WHITE;
//		 printArray(aa);int size = 0;// 有效数据for (int i = 0; i < ROW_COL; i++) {for (int j = 0; j < ROW_COL; j++) {if(aa[i][j]!=0) {size++;
//					System.out.println(aa[i][j]);}}}
//		System.out.println("size="+size);int bb[][] = new int[size+1][3];bb[0][0] = ROW_COL;bb[0][1] = ROW_COL;bb[0][2] = size;int count = 0;for (int i = 0; i < ROW_COL; i++) {for (int j = 0; j < ROW_COL; j++) {if(aa[i][j]!=0) {count++;
//					System.out.println(count+","+i+","+j+","+aa[i][j]);bb[count][0] = i;bb[count][1] = j;bb[count][2] = aa[i][j];}}}
//		printArray(bb);//将稀疏数组转为数组int cc[][] = new int[bb[0][0]][bb[0][1]];
//		printArray(cc);for (int i = 1; i < bb.length; i++) {for (int j = 0; j < bb[i].length; j++) {System.out.println(i+","+j+","+bb[i][j]); cc[bb[i][0]][bb[i][1]] = bb[i][2];}}printArray(cc);}public static void printArray(int[][] item) {for (int i = 0; i < item.length; i++) {for (int j = 0; j < item[i].length; j++) {System.out.printf("%d\t", item[i][j]);}System.out.println();}}}

数据结构和算法-(排序算法-冒泡排序)

1.概念:什么是稳定排序和非稳定性排序?

相同元素排序中之后,顺序和之前的顺序一样,则为稳定排序,否则为非稳定性排序。道听途说,不足为惧。都是抄的,天下文章一大抄,先抄了再说。

2. 冒泡排序代码实现

2.1 普通版本

​public static void sort1(int arr[]) {for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr.length-i-1; j++) {int item = 0;if(arr[j]>arr[j+1]) {item = arr[j];arr[j] = arr[j+1];arr[j+1] = item;}}}}​

2.2 优化版本 某一步之后,后面的代码有序了,后面的代码就不排序了。

​
public static void sort2(int arr[]) {for (int i = 0; i < arr.length; i++) {boolean iscontinue = true; for (int j = 0; j < arr.length-i-1; j++) {int item = 0;if(arr[j]>arr[j+1]) {item = arr[j];arr[j] = arr[j+1];arr[j+1] = item;iscontinue = false;}}if(iscontinue) {break;}}}​

2.3 优化版2

​
public static void sort3(int arr[]) {int sortborder = arr.length-1;//表示比较的边界int lastcomindex = 0; //最后一次比较的位置for (int i = 0; i < arr.length; i++) {boolean iscontinue = true; for (int j = 0; j < sortborder; j++) {int item = 0;if(arr[j]>arr[j+1]) {item = arr[j];arr[j] = arr[j+1];arr[j+1] = item;iscontinue = false;lastcomindex = j;}}sortborder = lastcomindex;if(iscontinue) {break;}}}​

使用Java实现的栈

package aa.datastructure;import java.util.Arrays;/***  栈*/
public class MyStack<E> {private Object[] data = null;private int length = 0; // 栈的容量private int top = -1; // 栈顶的指针MyStack() {}MyStack(int initSize){if(initSize>=0) {this.length = initSize;data = new Object[initSize];top = -1;}else {throw new RuntimeException("初始容量不能小于0"+initSize);}}public boolean push(E e) {if(top == length-1) {throw new RuntimeException("栈已经达到最大值");}else {data[++top] = e;return true;}}public E pop() {if(top == -1) {throw new RuntimeException("空栈");}else {return (E) data[top--];}}public E peek() {if(top == -1) {throw new RuntimeException("空栈");}else {return (E) data[top];}}public static void main(String[] args) {MyStack sm = new MyStack(3);for (int i = 0; i < 3; i++) {sm.push(i);}System.out.println(Arrays.toString(sm.data));for (int i = 0; i < 3; i++) {System.out.println(sm.peek());}for (int i = 0; i < 3; i++) {System.out.println(sm.pop());}}}

使用Java实现的队列

package aa.datastructure;import java.util.Arrays;/** 队列*/
public class MyQueue<E> {private int length;//容量private Object[] data;private int front;//头private int rear;MyQueue(){}MyQueue(int initSize){if(initSize>=0) {length = initSize;data = new Object[initSize];front = rear = 0;}else {throw new RuntimeException("队列初始化大小不能小于0");}}public boolean add(E e) {if(rear == length) {throw new RuntimeException("队列满了");}else {data[rear++] = e;return true;}}public E pool() {if(front == rear) {throw new RuntimeException("空队列");}else {E value = (E) data[front];data[front++] = null;return value;}}public E peek() {if(front == rear) {throw new RuntimeException("空队列");}else {E value = (E) data[front];return value;}}public static void main(String[] args) {MyQueue mq = new MyQueue(10);for (int i = 0; i < 5; i++) {mq.add(i);}System.out.println(Arrays.toString(mq.data));for(int i = 0; i < 5; i++) {System.out.println(mq.pool());}for(int i = 0; i < 5; i++) {System.out.println(mq.peek());}}}

【临渊羡鱼不如退而结网】

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

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

相关文章

虚拟现实与增强现实技术的商业应用

章节一&#xff1a;引言 随着科技的不断发展&#xff0c;虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;与增强现实&#xff08;Augmented Reality&#xff0c;简称AR&#xff09;技术正日益成为商业领域中的重要创新力量。这两种技术为企业带来了前所未…

Oracle将与Kubernetes合作推出DevOps解决方案!

导读Oracle想成为云计算领域的巨头&#xff0c;但它不是推出自己品牌的云DevOps软件&#xff0c;而是将与CoreOS在Kubernetes端展开合作。七年前&#xff0c;Oracle想要成为Linux领域的一家重量级公司。于是&#xff0c;Oracle主席拉里埃利森&#xff08;Larry Ellison&#xf…

阿里云Windows服务器怎么安装多个网站?

本文阿里云百科介绍如何在Windows Server 2012 R2 64位系统的ECS实例上使用IIS服务器搭建多个Web站点。本教程适用于熟悉Windows操作系统&#xff0c;希望合理利用资源、统一管理站点以提高运维效率的用户。比如&#xff0c;您可以在一台云服务器上配置多个不同分类的博客平台或…

wps设置一键标题字体和大小

参考 wps设置一键标题字体和大小&#xff1a;https://www.kafan.cn/A/7v5le1op3g.html 统一一键设置

docsify gitee 搭建个人博客

docsify & gitee 搭建个人博客 文章目录 docsify & gitee 搭建个人博客1.npm 安装1.1 在Windows上安装npm&#xff1a;1.2 在macOS上安装npm&#xff1a;1.3 linux 安装npm 2. docsify2.1 安装docsify2.2 自定义配置2.2.1 通过修改index.html&#xff0c;定制化开发页面…

24届近5年东南大学自动化考研院校分析

今天给大家带来的是东南大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、东南大学 学校简介 东南大学是我国最早建立的高等学府之一&#xff0c;素有“学府圣地”和“东南学府第一流”之美誉。东南大学前身是创建于1902年的三江师范学堂。1921年经近代著名教育家…

数据结构-栈的实现(C语言版)

前言 栈是一种特殊的线性表&#xff0c;只允许在固定的一端进行插入和删除的操作&#xff0c;进行数据插入和删除的一端叫做栈顶&#xff0c;另一端叫做栈底。 栈中的数据元素遵循后进先出的的原则。 目录 1.压栈和出栈 2. 栈的实现 3.测试代码 1.压栈和出栈 压栈&#xff…

C语言学习之函数的返回值

函数的返回值&#xff1a;所有函数的返回值都是通过return关键字返回的&#xff1b;返回一个基本类型的值&#xff1a;案例&#xff1a; int my_mod(int x,int y){return x % y;}返回一个地址&#xff1a;案例&#xff1a; int *func(int *p){return p;}返回全局变量的地址&a…

k8s 滚动更新控制(一)

在传统的应用升级时&#xff0c;通常采用的方式是先停止服务&#xff0c;然后升级部署&#xff0c;最后将新应用启动。这个过程面临一个问题&#xff0c;就是在某段时间内&#xff0c;服务是不可用的&#xff0c;对于用户来说是非常不友好的。而kubernetes滚动更新&#xff0c;…

数据库的相关

ACID 事务的四大特性主要是&#xff1a;原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;、持久性&#xff08;Durability&#xff09;。 原子性&#xff08;Atomicity&#xff09; 原子性是…

【数据结构】二叉树篇| 纲领思路01+刷题

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 所谓自由&#xff0c;不是随心所欲&#xff0c;而是自我主宰。——康德 目录 一、二叉树刷题纲领二、刷题1、104. 二叉树的最大深度2、 二叉…

react进阶

react-virtualized的高阶组件&#xff0c;Autosize可以使屏幕适配。使用render-props模式来获取到AutoSizer组件暴露的width和height属性。JSON.parse(JSON.stringify())不适用于有undefined的数据。 深拷贝的使用&#xff0c;不能使用在有undefined的数据中。有直接过滤undefi…

jacoco功能测试-代码覆盖率

1、下载 jacoco 官网地址&#xff1a;EclEmma - JaCoCo Java Code Coverage Library 2、拷贝 jar 包 下载好后&#xff0c;找到这两个文件&#xff0c;然后找到被测项目 3、启动 jacocoagent&#xff0c;监控被测项目 java -javaagent:jacocoagent.jarincludes*,outputtcp…

【Java】异常处理 之 使用Log4j

使用 Log4j 前面介绍了Commons Logging&#xff0c;可以作为“日志接口”来使用。而真正的“日志实现”可以使用Log4j。 Log4j是一种非常流行的日志框架&#xff0c;最新版本是2.x。 Log4j是一个组件化设计的日志系统&#xff0c;它的架构大致如下&#xff1a; log.info(&q…

linux0.95(VFS重点)源码通俗解读(施工中)

文件系统在磁盘中的体现 下面是磁盘的内容&#xff0c;其中i节点就是一个inode数组&#xff0c;逻辑块就是数据块可用于存放数据 操作系统通过将磁盘数据读入到内存中指定的缓冲区块来与磁盘交互&#xff0c;对内存中的缓冲区块修改后写回磁盘。 进程(task_struct * task[N…

Mysql中如果建立了索引,索引所占的空间随着数据量增长而变大,这样无论写入还是查询,性能都会有所下降,怎么处理?

索引所占空间的增长确实会对MySQL数据库的写入性能和查询性能造成影响&#xff0c;这主要是由于索引数据过多时会导致磁盘I/O操作变得非常频繁&#xff0c;从而使性能下降。为此&#xff0c;可以采取以下几种方式来减缓这种影响&#xff1a; 1. 限制索引的大小&#xff1a;可以…

Netty框架技术文档-基本概念

Netty: Home https://github.com/netty/netty 基本概念 NIO&#xff08;Non-blocking I/O&#xff0c;非阻塞I/O&#xff09;&#xff1a;NIO是一种Java平台的I/O模型&#xff0c;它使用Channel和Buffer来进行数据传输&#xff0c;而不是传统的Stream。NIO模型可以处理大量并…

TCP除了3次握手,其他的这些你知道吗?

文章首发地址 MSS&#xff1a; MSS&#xff08;Maximum Segment Size&#xff09;表示TCP报文段的最大长度&#xff0c;通常是MSSMTU-TCP头部长度。由于数据链路层协议的MTU可能不同&#xff0c;因此TCP连接建立时会通过MSS选项告知对方报文段的最大长度。MTU&#xff1a; MTU…

【探索SpringCloud】服务发现-Nacos使用

前言 在聊服务注册中心时&#xff0c;便提到了Nacos。这次便来认识一下。当然&#xff0c;这自然没有官方介绍那般详尽&#xff0c;权当是学习了解Nacos原理的一个过程吧。 Nacos简介 Nacos&#xff0c;全名&#xff1a;dynamic Naming And Configuration Service. 而这个名…

Java JDBC,轻松构建数据库连接:代码教程详解

JDBC的概述 Java Database Connectivity&#xff08;JDBC&#xff09;是 Java 中用于与数据库进行通信的 API。它提供了一套标准的 API&#xff0c;并允许 Java 应用程序连接到各种关系型数据库&#xff0c;如 MySQL、Oracle、PostgreSQL 等&#xff0c;从而可以执行 SQL 查询…