面试中算法(使用栈实现队列)

使用栈来模拟一个队列,要求实现队列的两个基本操作:入队、出队。

栈的特点:先入后出,出入元素都是在同一端(栈顶)。

 

队列的特点:先入先出,出入元素是在两端(队头和队尾)。 

 

分析:我们需要A,B两个栈,A栈为队列入口,负责插入新元素,B栈为队列出口,负责移除老元素。 

 

图解所示:

(1)元素3入队

 (2)元素5入队

 (3)元素1入队 

 

    让栈A中的所有元素按顺序出栈,再按照出栈顺序压入栈B。这样一来,元素从栈A弹出并压入栈B的顺序是1、5、3,和当初进入栈A的顺序3、5、1是相反的。

 (4) 元素3出队 

(5) 元素5出队  

  (6)元素4入队  

 (7) 元素1出队  

 (8)  元素4出队  

class StackToQueue:def __init__(self):self.sak_A=[]self.sak_B=[]#入队def in_queue(self,element):self.sak_A.append(element)#栈A出队的压入栈Bdef to_trans(self):#循环栈A大于0,则添加到栈B中的是(栈A出队的元素)while len(self.sak_A)>0:self.sak_B.append(self.sak_A.pop())#出队def de_queue(self):if len(self.sak_B)==0:if len(self.sak_A)==0:raise Exception('栈已空了!')self.to_trans() #调用方法return self.sak_B.pop()  #栈B出队if __name__ == '__main__':sq=StackToQueue()sq.in_queue(3)sq.in_queue(5)sq.in_queue(1)#出队print(sq.de_queue())  #3print(sq.de_queue())  #5print("&"*20)#入队sq.in_queue(4)# 出队print(sq.de_queue())  #1print(sq.de_queue())  #4# print(sq.de_queue())  # 发生异常

     总之:入队操作的时间复杂度显然是O (1)。至于出队操作,如果涉及栈A和栈B的元 素迁移,那么一次出队的时间复杂度是o (n)﹔如果不用迁移,时间复杂度是O(1)。所以把时间均摊到每一次出队操作上面,其时间复杂度是O (1)

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

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

相关文章

蓝桥杯 算法提高 ADV-1170 阶乘测试 python AC

找规律题,遍历i中有几个m就加几,和m的多少次数有关 第一版👇 try:while True:n, m map(int, input().split())ll [i for i in range(1, n 1) if i % m 0]ans len(ll)M mwhile ll:lll []M * mfor i in ll:if i % M 0:lll.append(i)a…

OKHTTP 3.12.0 以后版本 headers 中不可携带中文

今天遇到的报错: java.lang.llegalArgumentException: Unexpected char 0x957f at 0 in x-brand value: 电视堆栈 okhttp3.Headers.checkValue(Headers.java:272) okhttp3.Headers$Builder.add(Headers.java:312) okhttp3.Request$Builder.addHeader(Request.iava:…

linux如何查看websocket的连接

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

MySQL数据库——基础事务操作-BEGIN-COMMIT-ROLLBACK

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

随便写点东西

1 react的高阶组件 1.1 操纵组件的props、对组件的props进行增删; 1.2 复用组件逻辑 服用的组件逻辑,互不影响;比如高阶组件中复用了input框,输入内容是互不影响的; 1.3 可以通过配置装饰器来实现高阶组件&#xff08…

内存卡不小心格式化了怎么办?3个方法解决数据丢失问题!

“很奇怪,我的内存卡不小心中病毒了,刚刚在清理病毒时不小心把内存卡格式化了。我保存了很多重要的数据在里面,还有方法可以恢复这些数据吗?” 在数字设备日益普及的今天,内存卡已成为我们存储和传输数据的重要工具。但…

界面控件开发包DevExpress v23.2.6全新发布|附高速下载

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。 屡获大奖的软件开发平台DevExpress 近期重要版本v23.2已正式发布,该版本拥有众多新…

笨方法自学python(五)

字符串和文本 在这章习题中我们将使用复杂的字符串来建立一系列的变量,从中你将学到它们的用途。首先我们解释一下字符串是什么 东西。 字符串通常是指你想要展示给别人的、或者是你想要从程序里“导出”的一小段字符。Python 可以通过文本里的双引号 " 或者单…

单片机如何扩展 I/O 接口

单片机可以通过以下几种方式扩展I/O接口: 1. 并行扩展:使用并行接口芯片,例如74HC595、74HC164等,将单片机的少量I/O引脚扩展成多个I/O引脚。这些并行接口芯片具有串行输入和并行输出的功能,通过单片机的少量引脚来控…

linux服务器中通过pm2启动通过koa框架托管的vue项目命令总结

vue项目部署到linux服务器,一般来说,我们可以通过koa框架来托管打包后的vue项目,那么如何何启动,关闭呢: 今天我们来总结一下: 1、安装 PM2:如果你还没有安装 PM2,请使用以下命令进行安装&…

成为一名算法工程师需要掌握哪些技术栈

成为算法工程师需要学习的编程技能主要包括以下几个方面: Python:Python是算法工程师最常使用的编程语言之一。它拥有简洁易读的语法和丰富的库,如NumPy、Pandas、SciPy、Matplotlib等,这些库为数据处理、科学计算和可视化提供了…

【刷题】代码随想录算法训练营第三十五天|435、无重叠区间,763、划分字母区间 ,56、合并区间

目录 435、无重叠区间763、划分字母区间56、合并区间 435、无重叠区间 讲解:https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0%E5%8C%BA%E9%97%B4.html 左边界和有边界排序,注意sort的排序规则函数编写。 class Solution { public:// 按照…

C#开发的网络速度计 - 开源研究系列文章 - 个人小作品

上次发布了一个获取网络速度的例子( https://www.cnblogs.com/lzhdim/p/18167854 ),就是为了这次这个例子。用于在托盘里显示网络速度的图标,并且能够显示网络速度。下面就介绍一下这个小应用的源码。 1、 项目目录; 2、 源码介绍&#xff1b…

100个3D模型免费下载

老子云平台📢周5⃣福利日 | 划重点!高质量3D模型资源包免费领🛒✅涵盖全行业资源🆕✅100个高质量3D模型❗✅关注下方公众号即可免费下载 老子云https://www.laozicloud.com/

代码审计-PHP模型开发篇动态调试反序列化变量覆盖TP框架原生POP链

知识点 1、PHP审计-动态调试-变量覆盖 2、PHP审计-动态调试-原生反序列化 3、PHP审计-动态调试-框架反序列化PHP常见漏洞关键字 SQL注入: select insert update delete mysql_query mysqli等 文件上传: $_FILES,type"file"&…

QMetaObject 是 Qt 框架中的一个重要类,用于在运行时处理对象的元对象信息

QMetaObject 是 Qt 框架中的一个重要类,用于在运行时处理对象的元对象信息。每个继承自 QObject 的类在 Qt 中都有一个对应的 QMetaObject,用于存储该类的元对象信息,包括类名、父类、信号和槽等。 以下是 QMetaObject 类的一些主要功能和用…

linux搭建solr,使用java进行索引增删改查

在linux系统上搭建solr,并且使用ik分词,添加数据导入,使用java代码实现增删改查相关功能。 1.solr下载 下载solr的tar包:https://archive.apache.org/dist/lucene/solr,根据所需下载具体的版本呢 下载IK分词jar包&a…

Jupyter配置远程访问的密码

安装 下载Anaconda的.sh文件后,上传到服务器,然后进行安装: chmod x anaconda.sh ./anaconda.sh创建虚拟环境 可以指定Python版本创建虚拟环境: conda create --name langchain python3.11.7 conda activate langchain conda …

【Web前端】JavaScript交互编程

1.与html控件交互 使用document.getElementById(id名)获取控件使用document.getElementById(id名).value 获取控件值使用document.getElementById(id名).value给定值 设置控件值 2.使用js改变css 通过document.getElementById(id值).style.css属性名值 改变css 通过 document.g…

ArcGIS如何计算地级市间的距离

一、数据准备 加载配套实验数据包中的地级市和行政区划矢量数据(订阅专栏后,从私信查收数据),如下图所示: 二、计算距离 1. 计算邻近表 ArcGIS提供了计算点和另外点之间距离的工具:分析工具→邻域分析→生成临近表。 计算一个或多个要素类或图层中的要素间距离和其他邻…