那很好了,时间来到了第九天,


理论基础

了解一下 栈与队列的内部实现机制,文中是以C++为例讲解的。

文章讲解:https://programmercarl.com/栈与队列理论基础.html


232.用栈实现队列

大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。

题目链接/文章讲解/视频讲解:https://programmercarl.com/0232.用栈实现队列.html

题目感想:

1.这里只要求实现四种方法:判空,获取队列首个,移除队列首个,往队尾加入元素;这里使用两个栈来实现,一个输入栈,一个输出栈,具体实现可以看以下代码,值得考虑的是,如果让输出队列中的全部元素该怎么做,我想的是先输出输出栈中的,然后再将输入栈中的元素按要求输出;

点击查看代码
class MyQueue {

    Stack<Integer> stackIn;
Stack<Integer> stackOut; /** Initialize your data structure here. */
public MyQueue() {
stackIn = new Stack<>(); // 负责进栈
stackOut = new Stack<>(); // 负责出栈
} /** Push element x to the back of queue. */
public void push(int x) {
stackIn.push(x);
} /** Removes the element from in front of queue and returns that element. */
public int pop() {
dumpstackIn();
return stackOut.pop();
} /** Get the front element. */
public int peek() {
dumpstackIn();
return stackOut.peek();
} /** Returns whether the queue is empty. */
public boolean empty() {
return stackIn.isEmpty() && stackOut.isEmpty();
} // 如果stackOut为空,那么将stackIn中的元素全部放到stackOut中
private void dumpstackIn(){
if (!stackOut.isEmpty()) return;
while (!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}

  1. 用队列实现栈

    可能大家惯性思维,以为还要两个队列来模拟栈,其实只用一个队列就可以模拟栈了。

    建议大家掌握一个队列的方法,更简单一些,可以先看视频讲解

    题目链接/文章讲解/视频讲解:https://programmercarl.com/0225.用队列实现栈.html

    题目感想:

    1.可以使用两个队列或者一个队列,如果是两个队列,一个主队列进行输入输出,另外一个负责备份,这里指的是每次输入的时候将队伍里面的元素全部转移到备份队伍,然后将新输入的元素排到队首,再将之前的旧元素排入;

    2.如果使用一个队列的话,输入了新的元素后,将前面的元素依次排到新元素后面去,也可以实现;

  1. 有效的括号

    讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。

    大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。

    题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.有效的括号.html

    题目感想:

    1.首先是思考有哪些不能匹配到的场景,首先是左括号匹配不到右括号,也就是遍历完字符串之后栈不为空,字符串为空了;然后是右括号多了匹配不到,最后是左右括号的数量相等,不匹配;

    2.入栈时可以先将这个的对应的另外一半入栈,遇到相等的就消去;

    3.也可以一匹配就消去;

  1. 删除字符串中的所有相邻重复项

    栈的经典应用。

    要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。

    题目链接/文章讲解/视频讲解:https://programmercarl.com/1047.删除字符串中的所有相邻重复项.html

    题目感想:

    1.可以使用字符串直接作为栈;

    2.也可以使用双指针进行操作;

代码随想录第九天 | 栈与队列part01的更多相关文章

  1. 剑指offer第二版面试题8:用两个栈实现队列(JAVA版)

    题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能. 分析: 我们通过一个具体的例子来分析 ...

  2. 代码随想录算法训练营day10 | leetcode 232.用栈实现队列 225. 用队列实现栈

    基础知识 使用ArrayDeque 实现栈和队列 stack push pop peek isEmpty() size() queue offer poll peek isEmpty() size() ...

  3. 《剑指offer》第九题(用两个栈实现队列)

    // 面试题:用两个栈实现队列 // 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的 ...

  4. 《数据结构》C++代码 栈与队列

    线性表中,先进先出的叫队列,先进后出的叫栈.队列常用于BFS,而在函数递归层数过高时,需要手动实现递归过程,这时候便需要写一个“手动栈”. 有时候,我们会有大量数据频繁出入队列,但同时存在其内的元素却 ...

  5. 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

    第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ...

  6. 【LeetCode】232.使用栈模拟队列

    使用栈模拟队列 ​ 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列支持的所有操作(push.pop.peek.empty):实现 MyQueue 类: void push(int x) 将元素 ...

  7. 学习javascript数据结构(一)——栈和队列

    前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...

  8. [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)

    再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...

  9. 剑指Offer面试题:6.用两个栈实现队列

    一.题目:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 原文是使用 ...

  10. C实现栈和队列

    这两天再学习了数据结构的栈和队列,思想很简单,可能是学习PHP那会没有直接使用栈和队列,写的太少,所以用具体代码实现的时候出现了各种错误,感觉还是C语言功底不行.栈和队列不论在面试中还是笔试中都很重要 ...

随机推荐

  1. leaflet生成地图封装成jquery插件使用

    公司业务里一直都有使用leaflet地图插件来做地图展示.绘图等操作.公司有个项目已经有好几年了,由于项目原因一直在使用,今年由于google 地图 api过期,导致已经使用的地图无法加载.我作为现在 ...

  2. node几个类之间的关系

    B/S 架构的应用程序,包含两个部分,客户端和服务端,在每一个http请求至响应的完成,产生了这多姿多彩的网页世界,所以,与B/S 架构的一切相关技术问题,都可以认为是一个http请求过程的详细解释: ...

  3. fs的proxy_media模式失效

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 在fs的使用过程中,某些场景只需要对rtp媒体做透传,又不需要任何处理. 在fs1.6的版本中,我们可以使用proxy_media来 ...

  4. golang gin框架使用swagger生成接口文档

    前言 一份清晰明了的接口文档能够极大地提高前后端双方的沟通效率和开发效率. 本文将介绍如何使用swagger生成接口文档. swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RE ...

  5. Thinkphp8多语言模式,语言包变量占位符实现方法。

    主要实现原理是sprintf()函数,更多占位符写法可以参考sprintf()的介绍. zh-cn.php ...... // 变量用 s% 作为占位符 'sold_books' => 'Sol ...

  6. Oracle体系结构和用户管理

    本篇博客将对Oracle的体系结构.存储结构.内存结构和进程结构进行初步介绍,从而从宏观上把握它的物理组成.文件组成和各种进程,对于进一步的了解可以起到很好地作用 一.Oralce体系结构 1.概述 ...

  7. 一文彻底拿下HarmonyOS NEXT开发实战调试技巧

    > 程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java.嵌入式.鸿蒙.人工智能等,专注于程序员成长那点儿事,希望在成长的路上有你相伴!君志所向,一往无前! --- # 1. ...

  8. static修饰成员方法、static修饰成员的特点总结、浅聊主方法-java se进阶 day01

    1.工具类的介绍 工具类不是用于描述事物的类,而是帮我们完成事情的类(打工) 如图 当我们编写完这个类后,我们会发现一件事,这个类自己本身并没有意义,这个类完全是给用户进行调用方法的 既然是专门给用户 ...

  9. 一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行

    一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行 摘要: 本文主要讲述了 Python 如何实现定时任务,主要有四种方式:通过 threading.Timer 类.通过 ...

  10. python 入门专辑资料整理学习

    Python 是一门开源免费.通用型的脚本编程语言,它上手简单,功能强大,坚持极简主义. Python 类库(模块)极其丰富,这使得 Python 几乎无所不能,不管是传统的 Web 开发.PC 软件 ...