| 两个栈实现队列

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 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 用两个栈实现一个队列相关推荐

  1. python ——两个队列实现一个栈两个栈实现一个队列

    1.两个队列实现一个栈 进栈:元素入队列A 出栈:判断如果队列A只有一个元素,则直接出队.否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队.为了下一次继续操作,互换队A和队B. p ...

  2. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  3. 【剑指offer】用两个栈实现一个队列

    题目:两个栈实现一个队列. 栈的特点:先进后出,队列的特点是先进先出 思路:stack1放入数据:pop时,先判断stack2是否为空,如果不为空,直接pop,如果空,则push(stack1.pop ...

  4. 剑指offer五:两个栈实现一个队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. package com.jianzhioffer;import java.util.Stack;publ ...

  5. 两个栈实现一个队列,两个队列实现一个栈

    题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...

  6. java实现-两个栈实现一个队列和两个队列实现一个栈

    1.两个栈实现一个队列 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出:为空则将stack1中的元素取出压入 stack2中再弹出. 代码: import ...

  7. 两个栈实现一个队列与两个队列实现一个栈

    http://blog.csdn.net/z84616995z/article/details/19204529 两个栈实现一个队列: 原理方法:用一个栈为主栈,一个栈为辅助栈存放临时元素. 入队:将 ...

  8. 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)

    http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一: 我们设定s1是入栈的,s2是出栈的. 入队列,直 ...

  9. 两个栈实现一个队列/两个队列实现一个栈

    http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...

最新文章

  1. 全国计算机一级知识题及答案解析,计算机一级考试真题及答案
  2. cstring判断是否包含子串_最长子串-滑动窗口
  3. Python切片各种情况详解
  4. java右移位_java 、移位操作方法
  5. 关于微信内置浏览器,打开图片上传功能,调用的问题
  6. strus2中配置jqgrid入门
  7. c语言数组移动k,如何将一个数组的元素循环左移?
  8. JSF技术的相关网站和BBS
  9. C#中IQueryable和IEnumberable的区别
  10. Wpf解决TextBox文件拖入问题、拖放问题
  11. python的基础网络编程是下列_python基础 - 网络编程
  12. 电动汽车动力系统整车仿真,具有双向DCDC变换器实现能量反馈,可带异步电机
  13. xrd连续扫描和步进扫描_深度解析XRD
  14. Xshell上传文件到linux服务器
  15. Burp Suite CA证书下载及导入教程
  16. 圆和长方形周长相等谁的面积大_周长相等的长方形正方形和圆谁面积最大,谁面...
  17. 数据结构算法-学习体系-持续更新
  18. MeteoInfoLab脚本示例:站点填图
  19. 多开分身苹果版_【苹果/安卓】影分身,我们每个人都会!
  20. QImage 图像格式小结,QImage::Format

热门文章

  1. 146. Leetcode 51. N 皇后 (回溯算法-棋盘问题)
  2. 地图自定义编码CSV转换成ini文件
  3. 特征选择常用算法综述
  4. Python--判断一个字符串是否包含某子串的几种方法
  5. LeetCode-剑指 Offer 10- I. 斐波那契数列
  6. 内存学习――为什么需要虚拟内存
  7. crontab用法疑云
  8. KINDLE TOUCH修复板砖过程
  9. 中文文本情感分析-python包SnowNLP入门
  10. 微信公众号文章质量评分算法详解