用栈实现队列(JS)

用栈实现队列

题目

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

说明:

  • 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
  • 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

示例 1:

输入:
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 1, 1, false]解释:
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false

思路

双栈实现队列核心是利用两个栈分别存入入栈数据列,出栈数据列。

  1. 设计入队数据,即将push进入队列的数据存入储存栈(inStack)。
  2. 当读取到pop出队命令时,将储存栈数据一一pop并存入读取站(outStack),这样在读取栈最后的数据就是储存栈中最开始的数据,这时候pop读取栈的数据,这个数据也就是最开始存入的数据,这样我们就到达了先进先出的效果。
  3. 在读取过程中又一次存入数据,这时候我们也不用管,一直到读取栈的数据全部被读取完毕,为空时,我们再一次将存储栈中的数据倒置入读取栈即可。

复杂度

  • 时间复杂度:

push和empty为 O ( 1 ) O(1) O(1)pop和peek为均摊 O ( 1 ) O(1) O(1)。对于每个元素,至多入栈和出栈各两次,故均摊复杂度为 O ( 1 ) O(1) O(1)

  • 空间复杂度:

O ( n ) O(n) O(n)

代码


var MyQueue = function() {this.inStack=[],this.outStack=[]
};/** * @param {number} x* @return {void}*/
//<!-- 向队列存入数据,即向储存栈最后端存入数据 -->
MyQueue.prototype.push = function(x) {this.inStack.push(x);
};/*** @return {number}*/
//<!-- 删除队列第一个元素,即删除最先入栈的元素,即若读取栈为空,则该数据在储存栈最低端,我们需要先把储存栈中元素全部移入读取栈,然后读取栈顶元素即最后的那一个元素 -->
MyQueue.prototype.pop = function() {if(this.outStack.length!==0) return this.outStack.pop();else {this.move();return this.outStack.pop();}
};/*** @return {number}*/
//<!--读取队列第一个元素,也就是读取读取栈的最后端(顶端)的元素  -->
MyQueue.prototype.peek = function() {if(this.outStack.length!==0) return this.outStack[this.outStack.length-1];else {this.move();// console.log(this.outStack.length-1)return this.outStack[this.outStack.length-1];}
};/*** @return {boolean}*/
//<!-- 队列判空只有当储存栈和读取站两个栈同时位空时,队列才算为空 -->
MyQueue.prototype.empty = function() {if(this.inStack.length===0&&this.outStack.length===0) return true;else return false;
};MyQueue.prototype.move = function(){//将储存栈中的数据倒置入读取栈while(this.inStack.length!==0){let x = this.inStack.pop();this.outStack.push(x);}
}
/*** Your MyQueue object will be instantiated and called as such:* var obj = new MyQueue()* obj.push(x)* var param_2 = obj.pop()* var param_3 = obj.peek()* var param_4 = obj.empty()*/

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

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

相关文章

ELK日志分析系统概述及部署

ELK 平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kibana 三个开源工具配合使用&#xff0c;完成更强大的用户对日志的查询、排序、统计需求。 一、ELK概述 1、组件说明 ①ElasticSearch ElasticSearch是基于Lucene&#xff08;一个全文…

.net core 中间件

先说一下 管道 这个概念&#xff1a; 在ASP.NET Core中&#xff0c;管道&#xff08;Pipeline&#xff09;是一个由多个中间件组成的处理请求和生成响应的机制。请求从第一个中间件开始&#xff0c;经过一系列中间件的处理&#xff0c;然后生成最终的响应。 每个中间件都会处…

Spring Cloud Gateway

一 什么是Spring Cloud Gateway 网关作为流量的入口&#xff0c;常用的功能包括路由转发&#xff0c;权限校验&#xff0c;限流等。 Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架&#xff0c;定位于取代 Netflix Zuul。相比 Zuul 来说&#xff0c;Spring Clo…

vue项目实战-脑图编辑管理系统kitymind百度脑图

前言 项目为前端vue项目&#xff0c;把kitymind百度脑图整合到前端vue项目中&#xff0c;显示了脑图的绘制&#xff0c;编辑&#xff0c;到处为json&#xff0c;png&#xff0c;text等格式的功能 文章末尾有相关的代码链接&#xff0c;代码只包含前端项目&#xff0c;在原始的…

Tailwind css优于Bootstrap 7个原因

在某些情况下&#xff0c;Tailwind css 比 Bootstrap 更好&#xff0c;因为它是一个低级 CSS 框架&#xff0c;可让您根据需要构建自己的自定义组件。如果使用得当&#xff0c;它非常注重性能&#xff0c;可以显着减少 CSS 负载并确保更快的渲染。如果 Web 性能和自定义是您的首…

一百四十六、Xmanager——Xmanager5连接Xshell7并控制服务器桌面

一、目的 由于kettle安装在Linux上&#xff0c;Xshell启动后需要Xmanager。而Xmanager7版本受限、没有免费版&#xff0c;所以就用Xmanager5去连接Xshell7 二、Xmanager5安装包来源 &#xff08;一&#xff09;注册码 注册码&#xff1a;101210-450789-147200 &#xff08…

车载软件架构 —— 闲聊几句AUTOSAR OS(十)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标…

HTML <section> 标签

实例 文档中的区段&#xff0c;解释了 PRC&#xff1a; <section><h1>PRC</h1><p>The Peoples Republic of China was born in 1949...</p> </section>定义和用法 <section> 标签定义文档中的节&#xff08;section、区段&#x…

【枚举+trie+dfs】CF514 C

Problem - 514C - Codeforces 题意&#xff1a; 思路&#xff1a; 其实是trie上dfs的板题 先把字符串插入到字典树中 对于每次询问&#xff0c;都去字典树上dfs 注意到字符集只有3&#xff0c;因此如果发现有不同的字符&#xff0c;去枚举新的字符 Code&#xff1a; #in…

Excel功能总结

1&#xff09;每一张表格上都打印表头 “页面布局”-->“打印标题”-->页面设置“工作表”页-->打印标题“顶端标题行” 如&#xff1a;固定第1~2行&#xff0c;设置成“$1:$2” 2&#xff09;将页面内容打印在一页【缩印】 1.选好需要打印的区域&#xff0c;“页面布…

AOSP开发——APN配置文件路径

Android1~9&#xff0c;APN配置文件路径&#xff1a; vendor/sprd/telephony-res/apn/apns-conf_8.xml Android10~12&#xff0c;APN配置文件路径&#xff1a; /vendor/sprd/telephony-res/apn/apns-conf_8_v2.xml Android13&#xff0c;APN配置文件路径&#xff1a; /vendor/…

GitHub的基本使用教程

GitHub是一个基于web的版本控制和协作平台。它允许开发人员将他们的代码存储库存储在云中&#xff0c;并与其他人一起进行工作。GitHub还提供了各种工具和功能来帮助开发人员管理和组织他们的代码项目&#xff0c;包括拉出请求、问题跟踪、代码评论等等。此外&#xff0c;它托管…

Android安卓实战项目(8)---自行车fitting计算软件(源码在文末)

Android安卓实战项目&#xff08;8&#xff09;—自行车fitting计算软件&#xff08;源码在文末&#x1f415;&#x1f415;&#x1f415;&#xff09; 【bilibili演示地址】 https://www.bilibili.com/video/BV1eu4y1B7yA/?share_sourcecopy_web&vd_sourceb2e9b9ed746ac…

0101docker mysql8镜像主从复制-运维-mysql

1 概述 主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器&#xff0c;然后在从库上对这些日志重新执行&#xff08;也叫重做&#xff09;&#xff0c;从而使得从库和主库的数据保持同步。 Mysql支持一台主库同时向多台从库进行复制&#xff0c;从库同时可以…

ubuntu调整路由顺序

Ubuntu系统跳转路由顺序 1、安装ifmetric sudo apt install ifmetric2、查看路由 route -n3、把Iface下面的eth1调到第一位 sudo ifmetric eth1 0命令中eth1是网卡的名称&#xff0c;更改网卡eth1的跃点数&#xff08;metric值&#xff09;为0&#xff08;数值越小&#xf…

读发布!设计与部署稳定的分布式系统(第2版)笔记29_控制层下

1. 配置服务 1.1. 配置服务本身就是分布式数据库 1.1.1. 像ZooKeeper和etcd这样的配置服务 1.1.2. 受CAP定理和亚光速通信的限制 1.1.3. 可实现容量扩展&#xff0c;但不具备资源可伸缩性 1.1.4. 也会遭受相同的网络创伤 1.2. 信息并不仅仅从服务流向客户端实例&#xff…

mysql统计近7天数据量,,按时间戳分组

可以使用以下 SQL 语句来统计近7天的数据量&#xff0c;并按时间戳分组。如果某一天没有数据&#xff0c;则将其填充为0。 SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp), %Y-%m-%d) AS date,COUNT(*) AS count FROM table_name WHERE timestamp > UNIX_TIMESTAMP(DATE_SUB…

JVM技术之旅-有几种情况对象直接进入Old区

推荐资源汇总 自由只存在于束缚之中&#xff0c;没有堤岸&#xff0c;哪里来江河&#xff1f; —— 金斯伯格 JVM的堆内存中分为年轻代与老年代&#xff0c;年轻代又分为Eden区与Survivor区。新对象的创建会分配在年轻代&#xff0c;对象何时进入老年代呢?又有什么样的对象适合…

心电信号时域特征分析与Python实现

目录 1 引言 2 心电信号时域特征的含义 3 Python实现心电信号时域特征提取 4 结论 1 引言 心电信号是由心脏电活动引起的电信号

python调用pytorch的clip模型时报错

使用python调用pytorch中的clip模型时报错&#xff1a;AttributeError: partially initialized module ‘clip’ has no attribute ‘load’ (most likely due to a circular import) 目录 现象解决方案一、查看项目中是否有为clip名的文件二、查看clip是否安装成功 现象 clip…