Java常见数据结构

数组

  • 数组的特性
  • 存储空间是连续的
  • 长度是不可变的
  • 只能存储 相同的类型(不严谨)
  • 可以通过下标访问数组的内容 a[10] 复杂度是O1
  • 每个元素的默认是为'零'值 0 null false -> 一个对象的基本的数据域的初始化也是这样的
    • Student 类中的username属性 默认值

链表

  • 查找麻烦

  • 插入和删除简单

  • 可以定点删除和插入

  • 非连续的

  • 无限定长度

  • 节点 类 结构体

  • 删除是用指针指向其他的节点

  • 线程不安全

  • 查询效率不好 On

       先进后出

队列

        先进先出

两个队列实现栈

import java.util.LinkedList;
import java.util.Queue;public class MyStack {Queue<Integer> queue1 = new LinkedList<>();Queue<Integer> queue2 = new LinkedList<>();public MyStack() {}public void push(int x) {queue2.add(x);while (!queue1.isEmpty()) {queue2.add(queue1.remove());}// 交换队列引用Queue<Integer> temp = queue2;queue2 = queue1;queue1 = temp;}public int pop() {return queue1.remove();}public int top() {if (queue1.isEmpty()){return 0;}return queue1.peek();}public boolean empty() {return queue1.isEmpty();}public static void main(String[] args) {MyStack myStack = new MyStack();myStack.push(1);myStack.push(2);myStack.push(3);System.out.println(myStack.pop());System.out.println(myStack.pop());System.out.println(myStack.pop());}}

两个栈实现队列

import java.util.Stack;public class MyQueue {Stack<Integer> stack1 = new Stack<>();Stack<Integer> stack2 = new Stack<>();public MyQueue() {}public void push(int x) {stack1.push(x);}public int pop() {if (stack2.isEmpty()){inOut();}return stack2.pop();}public int peek() {if (stack2.isEmpty()){inOut();}return stack2.peek();}public boolean empty() {return stack1.isEmpty() && stack2.isEmpty();}public void inOut(){while (!stack1.isEmpty()){stack2.push(stack1.pop());}}public static void main(String[] args) {MyQueue myQueue = new MyQueue();myQueue.push(2);myQueue.push(9);myQueue.push(8);int result =  myQueue.pop();int result2 = myQueue.peek();System.out.println(result);System.out.println(result2);}
}

list

hashmap

多叉树

二叉树

  • 每个节点最多拥有两个子节点
  • 每个节点最多有一个父节点
  • 只有一个根节点
  • 遍历
    • 前序遍历
    • 中序遍历
    • 后序遍历
    • 层次遍历

搜索二叉树

  • 左边比根小
  • 右边比根大
  • 查找时间 最优 Ologn ~ On 不太稳定
class TreeQueue<F> {private F[] arr = (F[]) new Object[10];private int addindex = 0;private int getindex = 0;public void add(F x) {if(addindex - getindex == arr.length) {//判断是否满了F[] arr2 =  (F[]) new Object[arr.length * 2];for(int i = getindex; i < addindex; i++) {arr2[ i % arr2.length ] = arr[i% arr.length ];}arr = arr2;}arr[addindex%arr.length] = x;addindex++;}public F get() {if(addindex == getindex) {//判断是否满了return null;}else {F x = arr[getindex%arr.length];getindex++;return x;}}
}public class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int x) {val = x;}public String toString() {return  " 树的节点是:"+val;}public static void add(TreeNode x,int val) {if(val>x.val) {if(x.right == null) {TreeNode temp = new TreeNode(val);x.right = temp;}else {add(x.right,val);}}else {if(x.left == null) {TreeNode temp = new TreeNode(val);x.left = temp;}else {add(x.left,val);}}}public static void zhongxuprint(TreeNode x) {if(x.left!=null) {qianxuprint(x.left);}System.out.print(x.val+" ");if(x.right!=null) {qianxuprint(x.right);}}public static void qianxuprint(TreeNode x) {System.out.print(x.val+" ");if(x.left!=null) {qianxuprint(x.left);}if(x.right!=null) {qianxuprint(x.right);}}public static void houxuprint(TreeNode x) {if(x.left!=null) {qianxuprint(x.left);}if(x.right!=null) {qianxuprint(x.right);}System.out.print(x.val+" ");}public static void cengxuprint(TreeNode root) {TreeQueue<TreeNode> que = new TreeQueue<>();que.add(root);while(true) {TreeNode x = que.get();if(x!=null) {System.out.print(x.val+" ");if(x.left!=null) {que.add(x.left);}if(x.right!=null) {que.add(x.right);}}else {break;}}}public static void search(TreeNode root,int x) {if(x == root.val) {System.out.println("找到了"+root.val);return;}if(x > root.val) {if(root.right==null) {System.out.println("木有这个值");}else {search(root.right,x);}}else {if(root.left==null) {System.out.println("木有这个值");}else {search(root.left,x);}}}
}

平衡二叉树

  • 旋转 如何旋转 如何平衡
  • 最小不平衡子树
  • LL型
  • LR型
  • 任何一个节点 左右子树高度差不超过1
  • RR型
  • RL型自己画一下

栈和队列

红黑树

  • 近似的平衡二叉查找树
  • 要么是红的要么是黑的
  • 叶子节点nil节点是黑的
  • 根节点是黑的 心是一个黑心呀
  • 节点会变色
  • 红色节点的子节点一定是黑的 不能两个连续的红色节点
  • 任意一个节点 到任何一个叶子的路径 是具有相同数目的黑色节点的

image-20200727173500570

 关于红黑树(R-B tree)原理,看这篇如何 - 工匠初心 - 博客园

b-树

image-20200727175514447

image-20200727175514447

b+树

image-20200727175531655

  • mysql的底层实现 存储结构
  • 索引
  • image-20200727175531655

b*树

  • image-20200727175544600

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

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

相关文章

logback日志导入使用

1导入配置 <!-- 日志 &#xff0c; 会自动传递slf4j门面--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version> </dependency>2 引入配置 Logback要求…

开源实时数仓的构建

设计计思路 基本思路 开源数据平台的设计思路是通过 Flink SQL Batch、StartRocks SQL 、StartRocks物化视图 的能力实现一个离线任务的开发&#xff1b;使用 DolphinScheduler 进行离线工作流编排和调度&#xff1b;通过 Flink CDC 和 Flink SQL 实现流处理能力&#xff0c;进…

HarmonyOS 相对布局(RelativeContainer)

1. HarmonyOS 相对布局&#xff08;RelativeContainer&#xff09; 文档中心:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-layout-development-relative-layout-V5   RelativeContainer为采用相对布局的容器&#xff0c;支持容器内部的子元素设…

【C++】—— 模板进阶

【C】—— 模板进阶 1 非类型模板参数1.1 什么是非类型模板参数1.2 非类型模板参数对比宏的优势1.3 array 简单了解 2 模板的特化2.1 引子2.2 函数模板特化2.3 函数模板特化的坑2.4 类模板的特化2.4.1 全特化2.4.2 偏特化&#xff08;半特化&#xff09;2.4.3 选择2.4.4 偏特化…

英伟达GPU算力【自用】

GPU&#xff08;图形处理单元&#xff09;算力的提升是驱动当代科技革命的核心力量之一&#xff0c;尤其在人工智能、深度学习、科学计算和超级计算机领域展现出了前所未有的影响力。2024年的GPU技术发展&#xff0c;不仅体现在游戏和图形处理的传统优势上&#xff0c;更在跨行…

unity项目导出安卓工程后,在AndroidStudio打包报错:unityLibrary:BuildIl2CppTask‘.

下面这个是我在unity开发者社区提问后&#xff0c;他们回答得&#xff1a; 解决方案&#xff1a;我这边按照这几个方案检查了下&#xff0c;NDK和JDK都没问题&#xff0c;最后重启电脑才解决的&#xff0c;应该是文件被锁定了&#xff0c;我用的windows系统的。 验证&#xff…

书生第四期作业:L0G1000 任务作业

永不止步&#xff0c;空杯心态&#xff0c;从零开始&#xff0c;复习一下&#xff0c;争取完成全部任务 SSH登录 PowerShell命令行登录成功 VScode SSH登录成功 进入root文件夹 闯关任务&#xff1a;映射运行hello_world.py 可选任务1&#xff1a;linux命令行基本命令过一边 …

【WPF】中Dispatcher的DispatcherPriority参数使用

在 WPF 中&#xff0c;DispatcherPriority 参数用于指定通过 Dispatcher 调度的操作的执行优先级。加入 DispatcherPriority 参数的情况通常取决于你希望操作何时以及如何被执行。 1.Dispatcher的DispatcherPriority参数使用 以下是几种情况和示例说明&#xff1a; 1.1 需要…

C++——String类讲解

一. 为什么学习string类&#xff1f; C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列 的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需…

【C语言刷力扣】1768.交替合并字符串

题目&#xff1a; 解题思路&#xff1a; 将 word1 和 word2 元素依次添加至 ans 的后面。 时间复杂度&#xff1a; &#xff0c; n是word1的长度 m是word2的长度 空间复杂度&#xff1a; char* mergeAlternately(char* word1, char* word2) {int len1 strlen(word1);in…

009:屏幕录制软件FastStoneCapture9.5安装教程

摘要&#xff1a;本文详细介绍屏幕录制软件FastStoneCapture9.5的安装流程。 一、软件介绍 FastStone Capture是一款集屏幕捕获、编辑、注释与分享于一体的高性能工具&#xff0c;支持多种截图方式、高质量的图像输出以及便捷的录屏功能&#xff0c;适用于教育培训、工作辅助和…

代码随想录算法训练营第46期Day37,38,39,41

这几天晚上看比赛&#xff0c;就把刷题耽误了。还好是开新章节&#xff0c;前面的题都比较简单。 然后周天做完了又忘记发了 动态规划 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数 Day37前两道题太简单…

ThinkPad T480拆机屏幕改装:便携式显示器DIY指南

ThinkPad T480拆机屏幕改装&#xff1a;便携式显示器DIY指南 本文记录了将旧笔记本电脑 T480 拆机屏幕改装为便携式显示器的全过程。作者在决定升级设备后&#xff0c;选择通过 DIY 方式利用原有的屏幕资源。文章详细介绍了屏幕驱动板的安装、螺丝孔的剪裁、排线连接及固定的步…

vue面试题+wx-open-launch-app开放标签唤醒app方法

vue面试题 核心原理部分 mvc mvvm和mvp的区别&#xff1f; MVVM 就是 Model-View-ViewModel 的缩写&#xff0c;MVVM 将视图和业务逻辑分开。 View&#xff1a;视图层&#xff0c;Model 数据模型&#xff0c;而 ViewModel 是把两者建立通信的桥梁。 在 MVVM 框架下&#…

基于Spring Boot的装饰工程管理系统源码(springboot)

项目简介 基于Spring Boot的装饰工程管理系统实现了以下功能&#xff1a; 系统可以实现合同信息管理&#xff0c;合同报价管理&#xff0c;客户管理&#xff0c;立项项目管理&#xff0c;公告信息管理&#xff0c;员工管理&#xff0c;预算报价管理&#xff0c;装饰材料总计划…

react18中的合成事件与浏览器中的原生事件

React 通过将事件 normalize 以让他们在不同浏览器中拥有一致的属性。 合成事件 SyntheticEvent 实例将被传递给你的事件处理函数&#xff0c;它是浏览器的原生事件的跨浏览器包装器。除兼容所有浏览器外&#xff0c;它还拥有和浏览器原生事件相同的接口&#xff0c;包括 stopP…

Postgresql 配置数据库表添加主键自增id

#1024程序员节&#xff5c;征文# 在 PostgreSQL 数据库中&#xff0c;如果你想创建一个自增的 ID 字段&#xff0c;通常会使用序列&#xff08;sequence&#xff09;配合默认值或者使用带有自动递增特性的 SERIAL 类型。以下是两种常见的方法来实现自增 ID&#xff1a; 使用 …

type C 引脚定义

type C 引脚定义 11 22 Type-C接口封装 Type-C接口封装包括&#xff1a;24Pin Type-C、16Pin Type-C、12Pin Type-C、6Pin Type-C Type-C引脚功能

数据结构与算法-21算法专项(中文分词)(END)

中文分词 搜索引擎是如何理解我们的搜索语句的&#xff1f; mysql中使用 【like “%中国%”】&#xff0c;这样的使用方案 缺点1&#xff1a;mysql索引会失效缺点2&#xff1a;不能模糊&#xff0c;比如我搜湖南省 就搜不到湖南相关的 1 trie树 Trie树&#xff0c;又称前缀树…

群控系统服务端开发模式-应用开发-业务架构逻辑开发API准备工作

安装与仓库已经调整完毕&#xff0c;现在开发业务架构逻辑&#xff0c;其次再开发功能逻辑。业务架构逻辑开发与功能逻辑开发不是一回事&#xff0c;一定要明白。业务架构指的是做某一件事或是某一种类型的事的逻辑&#xff0c;在互联网web应用中通常指一套系统的外在逻辑&…