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

embedded/2024/9/25 0:30:01/

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

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

 

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

 

分析:我们需要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.ppmy.cn/embedded/35038.html

相关文章

深度学习简介

什么是深度学习 机器学习是实现人工智能的一种途径 深度学习是机器学习的一个子集,也就是说深度学习是实现机器学习的一种方法。 传统机器学习算术依赖人工设计特征,并进行特征提取,而深度学习方法不需要人工,而是依赖算法自动提…

什么是X电容和Y电容?

先补充个知识: 一、什么是差模信号和共模信号 差模信号:大小相等,方向相反的交流信号;双端输入时,两个信号的相位相差180度 共模信号:大小相等。方向相同。双端输入时,两个信号相同。 二、安规…

【图像特征点匹配】

图像特征点匹配 图像特征点匹配是计算机视觉中的一项关键技术,它涉及在两个或多个图像之间寻找并匹配具有独特属性的点,这些点被称为特征点。 立体视觉:通过匹配同一场景的不同视角图像中的特征点,可以重建场景的三维结构。物体识别:通过匹配物体表面的特征点,可以识别和…

Linux Mint 21.3 “Virginia“ 简介

Linux Mint 21.3 "Virginia" 是Linux Mint项目发布的最新版本,这个版本基于Ubuntu 22.04 LTS(Jammy Jellyfish),并提供了三个主要的桌面环境:Cinnamon、MATE和Xfce。每个桌面环境都有其独特的特点和优势&…

深度学习中的归一化:BN,LN,IN,GN的优缺点

目录 深度学习中归一化的作用常见归一化的优缺点 深度学习中归一化的作用 加速训练过程 归一化可以加速深度学习模型的训练过程。通过调整输入数据的尺度,归一化有助于改善优化算法的收敛速度。这是因为归一化后的数据具有相似的尺度,使得梯度下降等优化…

JavaScript中Math函数与舍入

立方根 console.log(Math.sqrt(25)); //数学方式25平方根 console.log(25 ** (1 / 2)); //25的0.5次方 console.log(8 ** (1 / 3)); //8的1/3次方计算最大最小值 console.log(Math.max(1, 5, 88, 22, 132)); //返回最大值 console.log(Math.max(1, 5, 88, 22, 132)); //…

【企业动态】爱尔兰客户到访东胜物联,共拓能源管理等解决方案

近日,来自爱尔兰的房屋数据监测客户莅临东胜物联(杭州黄龙国际中心)进行参观考察,双方就未来的广泛合作进行了深入的沟通交流。 来访期间,东胜物联CEO支江峰先生热情接待了客户,并陪同他们参观了产品展厅&…

[激光原理与应用-92]:振镜的光路图原理

目录 一、振镜的光路 二、振镜的工作原理 2.1 概述 2.2 焊接头 2.3 准直聚焦头-直吹头 2.4 准直聚焦头分类——按应用分 2.4.1 准直聚焦头分类——功能分类 2.4.2 准直聚焦头镜片 2.4.3 振镜焊接头 2.4.4 振镜分类: 2.4.5 动态聚焦系统演示(素…