12.11_黑马数据结构与算法笔记Java

news2024/11/20 20:31:29

目录

070 栈 链表实现

概念理清:什么时候是指针的指向,什么时候是元素本身?

071 栈 数组实现

072 栈 e01 有效的括号

072 栈 e02 后缀表达式求值

072 栈 e03 中缀表达式转后缀1

072 栈 e03 中缀表达式转后缀2

072 栈 e03 中缀表达式转后缀3

072 栈 e04 双栈模拟队列

thinking:迭代器?

thinking:接口规范?

072 栈 e05 单队列模拟栈

073 双端队列 链表实现 1

074 双端队列 链表实现 2

075 双端队列 数组实现 1

076 双端队列 数组实现 2

077 双端队列 数组实现 3

078 双端队列 e01 二叉树Z字层序遍历


---------------------------------------------------------------------------------------------------------------------------------

070 栈 链表实现

---------------------------------------------------------------------------------------------------------------------------------

不同处: 针对数组和链表,我们可以在这条线上的任意一个位置进行操作,针对队列,我们只可以在头部删除,尾部添加,针对栈,我们只能在一端进行添加和删除,另一端是不可以动的。

相同处:都是线性的,就像一条线一样。

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

new Node<>(value ,head.next) :这里new出来的是2

head.next : head的指针指向谁呢?

=:head的指针指向new出来的2这个元素。

---------------------------------------------------------------------------------------------------------------------------------

 1:head.next 这里是2

2:

first.next: first指针的指向,也就是2指向1

head.next: head指针的指向

=:head指针的指向也是first指针的指向,也就是head指向了1

---------------------------------------------------------------------------------------------------------------------------------

概念理清:什么时候是指针的指向,什么时候是元素本身?

eg:1->2->3

什么时候是指针的指向,什么时候是元素本身,要看等号左右两边的意思。如果左右两边都在说指针,那就是这个指针的指向等于那个指针的指向,也就是说1指向了3 ,有一种跳过了2元素的感觉

如果左右两边讲的不是同一个东西,左边是元素,右边是讲指针,或者是左边是指针,右边是元素,那就是不跳过,1->2,等于号的意思就是指向右边的元素。我12.9有写过。

12.9_黑马数据结构与算法笔记Java-CSDN博客

-------------------------------------------------------------------------------------------------------------------------------- 

-------------------------------------------------------------------------------------------------------------------------------- 

071 栈 数组实现

---------------------------------------------------------------------------------------------------------------------------------

t也就是栈顶指针,永远在栈顶元素的右边一个位置。 

---------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------- 

array[--p]:先--再赋值给array。因为top是是栈顶指针,永远在栈顶元素的右边一个位置,你只有先减1,才是最后一个元素真正的位置。

---------------------------------------------------------------------------------------------------------------------------------

072 栈 e01 有效的括号

---------------------------------------------------------------------------------------------------------------------------------

 如何判断所有的括号都配上对呢?检查队列里面还有没有元素,如果有说明没有配上,如果没有,说明全部配对成功。因为,你出现多少个左括号,就会放进去多少个右括号

而且要加上 !stack.isEmpty 因为,如果一开始进来的就是右括号的话,就会直接进入最后一个外围的else,然后与c进行==的比较,这时候就会出现空指针异常,因此,要确保stack也就是队列里面有元素才去比较,如果stack队列里面没有元素,就直接false返回即可。

---------------------------------------------------------------------------------------------------------------------------------

072 栈 e02 后缀表达式求值

---------------------------------------------------------------------------------------------------------------------------------

具体操作:遇到数字,压入栈,遇到符号,将前两位数字拿出栈进行计算,然后再把结果压入栈 

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

072 栈 e03 中缀表达式转后缀1

---------------------------------------------------------------------------------------------------------------------------------

java帮我们把中缀表达式转换为后缀表达式,方便计算机进行运算。

---------------------------------------------------------------------------------------------------------------------------------

用自己的话复述一遍:

遇到非运算符的,直接拼起来

如果栈里面的元素遇到优先级比较高的,直接入栈

如果栈里面的元素遇到优先级比较低的,要先让栈里面的出栈,再把想入栈的符号入栈

如果栈里面的元素遇到平级的(平级遵守靠左的运算符先执行,靠右的运算符后执行),要先让栈里面的出栈,再把想入栈的符号入栈

---------------------------------------------------------------------------------------------------------------------------------

072 栈 e03 中缀表达式转后缀2

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

072 栈 e03 中缀表达式转后缀3

---------------------------------------------------------------------------------------------------------------------------------

以上,补充的内容 。 

---------------------------------------------------------------------------------------------------------------------------------

072 栈 e04 双栈模拟队列

---------------------------------------------------------------------------------------------------------------------------------

 

正常情况下,队列中只有一头可以做进和出的操作,那现在想要实现两头,在队列头移除,在队列尾添加,就要整两个队列,如图。队列尾添加,实际就是向右边的队列的顶部逐一添加。队列头移除,就需要将右边的所有元素移动到左边的队列当中去,再进行元素移除。 

---------------------------------------------------------------------------------------------------------------------------------

向队列头移除的步骤,以上。

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

thinking:迭代器?

Java迭代器详解,看这一篇就够了-CSDN博客 

---------------------------------------------------------------------------------------------------------------------------------

thinking:接口规范?

 java中为啥要使用接口_java为什么用接口-CSDN博客

为什么要用接口?接口到底有什么好处?_、请用自己的语言解释为什么要使用接口-CSDN博客

---------------------------------------------------------------------------------------------------------------------------------

072 栈 e05 单队列模拟栈

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

073 双端队列 链表实现 1

---------------------------------------------------------------------------------------------------------------------------------

双向和双端:

双向:既有pre指针也有next指针。

双端吧:头和尾都可以实现删除,移除,添加的操作。 

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

074 双端队列 链表实现 2

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

075 双端队列 数组实现 1

---------------------------------------------------------------------------------------------------------------------------------

offerLast: 先添加元素,再t+1。

---------------------------------------------------------------------------------------------------------------------------------

offerFirst:将h(指针)向左移动一位,因为是环形数组,因此用除法得到h(指针)该移动到的位置,再将元素添加到这个位置。

---------------------------------------------------------------------------------------------------------------------------------

如果不用size的话,仅仅用两个指针去判断空or满,就得浪费一个位置。 

---------------------------------------------------------------------------------------------------------------------------------

因为head指向的就是要移除的值,因此要先获取这个值再移动head(指针)。

因为tail指向的是要移除的值的后一位,因为要先让tail减减,才能获取到想要获取的值。

---------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------- 

没有用除法来防止索引越界问题,而是用循环的方式来杜绝。当下一次就要索引越界的时候,就返回0,让指针回到最初的位置,如果没有发生索引越界问题,就正常的加一

---------------------------------------------------------------------------------------------------------------------------------

没有用除法来防止索引越界问题,而是用循环的方式来杜绝。当下一次就要索引越界的时候,就返回数组长度-1的索引,也就是最后一个索引,让指针回到尾部,如果没有发生索引越界问题,就正常的减一 

---------------------------------------------------------------------------------------------------------------------------------

076 双端队列 数组实现 2

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

077 双端队列 数组实现 3

---------------------------------------------------------------------------------------------------------------------------------

基本类型:因为删除前100占用4个字节,删除后,0也是占用4个字节,因此删不删都无所谓。

---------------------------------------------------------------------------------------------------------------------------------

引用类型:如果没有人引用它的话,他就会在垃圾回收的时候释放内存,但是如果有人一直引用它的话,就无法释放内存。虽然说head向前走了一位,但是r1一直在引用E1,因此无法释放E1所占用的内存。因此,要将r1设置为null,也就意味着没有人引用E1了,就可以在垃圾回收的时候,把E1占用的内存给回收掉。

---------------------------------------------------------------------------------------------------------------------------------

 

---------------------------------------------------------------------------------------------------------------------------------

078 双端队列 e01 二叉树Z字层序遍历

---------------------------------------------------------------------------------------------------------------------------------

使用双端队列方便很多,因为可以从头部插入或者尾部插入。现在只要找到哪一行是偶数,哪一行是奇数就可以了。 

---------------------------------------------------------------------------------------------------------------------------------

以上。

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

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

相关文章

大文件传输软件和传统软件的优缺点

在当前信息时代&#xff0c;文件和数据的传输已成为我们工作和生活中不可或缺的一环。无论是向同事发送报告还是与朋友分享电影&#xff0c;我们都需要依赖软件完成这些操作。然而&#xff0c;随着文件和数据容量的增大&#xff0c;传统的文件传输软件如FTP、HTTP、SMB、NFS等已…

操作系统内部机制学习

切换线程时需要保存什么 函数需要保存吗&#xff1f;函数在Flash上&#xff0c;不会被破坏&#xff0c;无需保存。函数执行到了哪里&#xff1f;需要保存吗&#xff1f;需要保存。全局变量需要保存吗&#xff1f;全局变量在内存上&#xff0c;无需保存。局部变量需要保存吗&am…

【腾讯云 HAI域探秘】借助高性能服务HAI快速学会Stable Diffusion生成AIGC图片——必会技能【微调】

目录 Stable Diffusion基本使用方法 学术加速测试 配置中文插件 Prompt与Negative prompt 采样器说明 人像生成 水光效果 微调的使用 图像生成种子/seed使用 附加/Extra 微调实例测试 图生图微调 ​编辑 使用蒙版微调 Stable Diffusion基本使用方法 环境配置&am…

2023年【G1工业锅炉司炉】考试及G1工业锅炉司炉作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 G1工业锅炉司炉考试参考答案及G1工业锅炉司炉考试试题解析是安全生产模拟考试一点通题库老师及G1工业锅炉司炉操作证已考过的学员汇总&#xff0c;相对有效帮助G1工业锅炉司炉作业考试题库学员顺利通过考试。 1、【多…

揭秘AI魔法绘画:Stable Diffusion引领无限创意新纪元

文章目录 1. 无限的创意空间2. 高效的创作过程3. 个性化的艺术表达4. 跨界合作的可能性5. 艺术教育的革新6. 艺术市场的拓展 《AI魔法绘画&#xff1a;用Stable Diffusion挑战无限可能》编辑推荐内容简介作者简介精彩书评目录前言/序言本书读者对象学习建议获取方式 随着科技的…

移动端原生实现列表列固定横向滚动功能

功能介绍&#xff1a; 在移动端开发中&#xff0c;会用到列表作为信息展示方式&#xff0c;一般希望上下滚动时&#xff0c;可以固定表头&#xff0c;左右滚动时&#xff0c;可以固定最左列。 需求&#xff1a; 1、列表可以使用数组循环遍历&#xff1b; 2、上下滚动时&…

MISRA C++ 2023:C和C++测试解决方案实现静态分析

自动化软件测试解决方案的全球领导者Parasoft今天宣布&#xff0c;随着Parasoft C/Ctest 2023.2即将发布&#xff0c;全面支持MISRA C 2023。Parasoft针对C和C软件开发的完全集成测试解决方案计划于2023年12月发布&#xff0c;可以帮助团队实现自动化静态分析和编码标准合规性&…

Redis滚动分页的使用

Feed流 关注推送也叫Feed流。通过无限下拉刷新获取新的信息。 Feed流产品常见有两种模式&#xff1a; Timeline: 不做内容筛选&#xff0c;简单的按照内容发布时间排序&#xff0c;常用于好友或关注。例如朋友圈 优点&#xff1a;信息全面&#xff0c;不会有缺失。并且实现也…

JVM 运行时参数

面试题 JVM的参数&#xff0c;你知道的说一下 (百度) 说说你知道的几种主要的JVM参数&#xff08;京东&#xff09; JVM调优调的哪些参数&#xff1f;在哪里写这些参数&#xff1f; &#xff08;亚信&#xff09; 内存调优参数都有什么&#xff1f;&am…

【日常总结】root ssh第一天远程正常,次日无法访问,修正 PermitRootLogin yes 后 ,ssh root 还是不能访问

一、环境 二、场景 三、原因 四、解决方案 1. 客户设置账号过期时间 2. 修正 PermitRootLogin yes 后 &#xff0c;ssh root 还是不能访问 一、环境 客户项目&#xff1a;独立外网IP 服务器&#xff1a;Ubuntu 22.04.3 LTS ssh&#xff1a;外网映射到服务器22端口 二、…

我从来不理解JavaScript闭包,但我用了它好多年

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热衷分享有趣实用的文章&#xff0c;希望大家多多支持&#xff0c;一起进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 你是否学习了很久JavaScript但还没有搞懂闭包呢&#xff1f;今天就来聊一下…

精准捕捉异常时刻——从写好事件标题与内容开始

写在前面 在讨论如何写好监控器配置时的事件通知内容之前&#xff0c;需要明确这样一个逻辑&#xff1a; 当监控器检测规则生效后&#xff0c;它会针对系统业务数据进行一系列聚合数据处理并以事件的形式留存。这些事件记录可以理解为当前监控器检测对象发出的异常信号的承载…

WPS Office JS宏实现Excel转换为JSON格式数据

通过Excel JS宏&#xff0c;将表格中的数据以”列“形式导出为JSON数据格式。 我们在整理文档时&#xff0c;产品会通过Excel将功能点和功能描述分层级整理出来&#xff0c;有时需要将此数据导入到系统中&#xff0c;Web端对Json这类数据比较友好&#xff0c;所以这里试着使用E…

实现加盐加密方法以及MappedByteBuffer,RandomAccess

目录 自己实现 Spring Security MappedByteBuffer RandomAccess 加盐加密的实现 自己实现 传统MD5可通过彩虹表暴力破解&#xff0c; 加盐加密算法是一种常用的密码保护方法&#xff0c;它将一个随机字符串&#xff08;盐&#xff09;添加到原始密码中&#xff0c;然后再进…

Java面试题(每天10题)-------连载(46)

目录 Dubbo篇 1、Dubbo的默认集群容错方案 2、Dubbo支持哪些序列化方式&#xff1f; 3、Dubbo超时时间怎样设置&#xff1f; 4、服务调用超时问题怎么解决&#xff1f; 5、Dubbo在安全机制方面是如何解决的&#xff1f; 6、Dubbo和Dubbox之间的区别 7、Dubbo和Spring C…

java--正则表达式用于查找信息、用于搜索替换、分割内容

1.案例&#xff1a;使用正则表达式查找一段文本中的内容 需求&#xff1a;请把下面文本中的电话&#xff0c;邮箱&#xff0c;座机号码&#xff0c;热线都爬取出来。 2.正则表达式用于搜索替换、分割内容&#xff0c;需要结合String提供的如下方法完成

MySQL使用教程

数据构成了我们日益数字化的社会基础。想象一下&#xff0c;从移动应用和银行系统到搜索引擎&#xff0c;再到如 ChatGPT 这样的先进人工智能聊天机器人&#xff0c;这些工具若没有数据支撑&#xff0c;将寸步难行。你有没有好奇过这些海量数据都存放在哪里呢&#xff1f;答案正…

Java程序编写(下)

Scanner对象 通过java.util.Scanner来获得Scanner类 基本语法&#xff1a; Scanner s new Scanner(System.in)通过next()和nextLine()方法获取输入的字符串。 通过hasNext()和hasNextLine()判断是否还有输入的数据。 next(): 1、一定要读取到有效字符后才可以结束输入 2、…

uniapp移动端悬浮按钮(吸附边缘)

Uniapp移动端悬浮按钮可以通过CSS实现吸附边缘的效果。具体实现步骤如下&#xff1a; html&#xff1a; <movable-area class"movable-area"><movable-view class"movable-view" :position"position" :x"x" :y"y"…

列出最佳Aspera替代方案,给你执掌数据传输的权

Aspera是一种高速文件传输技术&#xff0c;广泛应用于科学研究、医疗保健、媒体和娱乐等领域。然而&#xff0c;由于Aspera的高昂价格&#xff0c;很多人不得不寻找替代方案。本文将列举最佳Aspera替代方案&#xff0c;以便执掌数据传输的权利。 1、FileZilla FileZilla是一款…