python 用两个栈实现一个队列
| 两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:
输入:
[“CQueue”,“deleteHead”,“appendTail”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
|题解
解题思路:
- 栈无法实现队列功能: 栈底元素(对应队首元素)无法直接删除,需要将上方所有元素出栈。
- 双栈可实现列表倒序: 设有含三个元素的栈 A = [1,2,3]A=[1,2,3] 和空栈 B = []B=[]。若循环执行 AA 元素出栈并添加入栈 BB ,直到栈 AA 为空,则 A = []A=[] , B = [3,2,1]B=[3,2,1] ,即 栈 BB 元素实现栈 AA 元素倒序 。
- 利用栈 BB 删除队首元素: 倒序后,BB 执行出栈则相当于删除了 AA 的栈底元素,即对应队首元素。
class CQueue:def __init__(self):# self.stack1 为主栈 self.temp_stack 为辅助栈self.stack1 = list()self.temp_stack = list()def appendTail(self, value: int) -> None:# 先判断辅助栈中是否有数据 如果存在数据 按照栈的出栈规则把数据从临时栈中倒腾到主栈中# 接着再把新的数据追加到主栈中while self.temp_stack:self.stack1.append(self.temp_stack.pop())return self.stack1.append(value)def deleteHead(self) -> int:# 删除元素时 先把主栈的元素 倒腾到辅助栈中 删除辅助栈中的栈顶元素while self.stack1:self.temp_stack.append(self.stack1.pop())if self.temp_stack: return self.temp_stack.pop()else:return -1# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()
python 用两个栈实现一个队列相关推荐
- python ——两个队列实现一个栈两个栈实现一个队列
1.两个队列实现一个栈 进栈:元素入队列A 出栈:判断如果队列A只有一个元素,则直接出队.否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队.为了下一次继续操作,互换队A和队B. p ...
- 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...
多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...
- 【剑指offer】用两个栈实现一个队列
题目:两个栈实现一个队列. 栈的特点:先进后出,队列的特点是先进先出 思路:stack1放入数据:pop时,先判断stack2是否为空,如果不为空,直接pop,如果空,则push(stack1.pop ...
- 剑指offer五:两个栈实现一个队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. package com.jianzhioffer;import java.util.Stack;publ ...
- 两个栈实现一个队列,两个队列实现一个栈
题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...
- java实现-两个栈实现一个队列和两个队列实现一个栈
1.两个栈实现一个队列 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出:为空则将stack1中的元素取出压入 stack2中再弹出. 代码: import ...
- 两个栈实现一个队列与两个队列实现一个栈
http://blog.csdn.net/z84616995z/article/details/19204529 两个栈实现一个队列: 原理方法:用一个栈为主栈,一个栈为辅助栈存放临时元素. 入队:将 ...
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一: 我们设定s1是入栈的,s2是出栈的. 入队列,直 ...
- 两个栈实现一个队列/两个队列实现一个栈
http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...
最新文章
- 全国计算机一级知识题及答案解析,计算机一级考试真题及答案
- cstring判断是否包含子串_最长子串-滑动窗口
- Python切片各种情况详解
- java右移位_java 、移位操作方法
- 关于微信内置浏览器,打开图片上传功能,调用的问题
- strus2中配置jqgrid入门
- c语言数组移动k,如何将一个数组的元素循环左移?
- JSF技术的相关网站和BBS
- C#中IQueryable和IEnumberable的区别
- Wpf解决TextBox文件拖入问题、拖放问题
- python的基础网络编程是下列_python基础 - 网络编程
- 电动汽车动力系统整车仿真,具有双向DCDC变换器实现能量反馈,可带异步电机
- xrd连续扫描和步进扫描_深度解析XRD
- Xshell上传文件到linux服务器
- Burp Suite CA证书下载及导入教程
- 圆和长方形周长相等谁的面积大_周长相等的长方形正方形和圆谁面积最大,谁面...
- 数据结构算法-学习体系-持续更新
- MeteoInfoLab脚本示例:站点填图
- 多开分身苹果版_【苹果/安卓】影分身,我们每个人都会!
- QImage 图像格式小结,QImage::Format