题目描述

  • 用两个栈来实现一个队列
  • 完成队列的Push和Pop操作
  • 队列中的元素为int类型

理解

  • 关于栈

    • 什么是栈
    • 栈的抽象数据类型
    • Python实现栈
  • 关于队列
    • 什么是队列
    • 队列抽象数据类型
    • Python实现队列

解题思路

思路1

  • 栈是有序的 LIFO,也就是后进先出。
  • 队列是有序的FIFO,也就是先进先出。

当然无论是栈还是队列,在Python中一般都是用列表实现的,所以我们用列表表示能后进先出的栈。
那么现在问题是怎么用两个栈构造队列,我们知道队列是先进先出,题目中给了队列两个方法:

  • push:将元素放进队尾
  • pop: 将队顶的元素删除,并返回

为了实现这个两个函数,我们用两个栈分别存储队列中元素按从尾到头和从头到尾的两种排列形式。记:

  • stack1 表示队列中元素从尾到头的排列形式
  • stack2 表示队列中元素从头到尾的排列形式

stack1 列表(栈)的append操作即表示在队列尾部添加元素
stack2 列表(栈)的pop操作即表示在队顶删除元素,并返回结果

class Solution:def __init__(self):self.stack1=[]self.stack2=[]def push(self, node):if self.stack1:self.stack1.append(node)else:while self.stack2:self.stack1.append(self.stack2.pop())self.stack1.append(node)def pop(self):if self.stack2:return self.stack2.pop()elif self.stack1:while self.stack1:self.stack2.append(self.stack1.pop())return self.stack2.pop()else:return None

当然上述逻辑可以再精简一点实现,如下:

class Solution:def __init__(self):self.stack1=[]self.stack2=[]def push(self, node):if self.stack2:while self.stack2:self.stack1.append(self.stack2.pop())self.stack1.append(node)def pop(self):if self.stack1:while self.stack1:self.stack2.append(self.stack1.pop())return self.stack2.pop()

剑指offer_第5题_用两个栈实现队列相关推荐

  1. 剑指offer_第16题_合并两个排序的链表_Python

    题目描述 输入两个单调递增的链表 输出两个链表合成后的链表 合成后的链表满足单调不减规则 解题思路 思路1 递归 def Merge(self, pHead1, pHead2):merge = Non ...

  2. 《剑指offer》第九题(用两个栈实现队列)

    // 面试题:用两个栈实现队列 // 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的 ...

  3. 剑指offer——面试题7:用两个栈实现队列

    剑指offer--面试题7:用两个栈实现队列 Solution1: 注意栈的基本操作与vector略有不同~ class Solution { public:void push(int node) { ...

  4. 剑指offer_第14题_链表中倒数第k个结点_Python

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 理解 链表详解 python数据结构之链表 解题思路 思路1 确定链表种结点个数lenth 倒数第k个结点就是第length-k+1个结点 需要考 ...

  5. 剑指offer_第11题_二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数. 其中负数用补码表示. 理解 整数怎么转换为二进制 >>> bin(25) '0b11001' >>> bin ...

  6. 剑指offer_第7题_斐波那契数列

    题目描述 现在要求输入一个整数n 输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 理解 斐波那契数列 因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子 ...

  7. 剑指offer_第20题_包含min函数的栈_Python

    题目描述 定义栈的数据结构 并在该类型中实现一个能够得到栈中所含最小元素的min函数.时间复杂度应为O(1) 理解 什么是栈 算法复杂度 解题思路 思路1 class Solution:def __i ...

  8. 剑指offer_第19题_顺时针打印矩阵_Python

    题目描述 输入一个矩阵 按照从外向里以顺时针的顺序依次打印出每一个数字 例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  9. 剑指offer_第18题_二叉树的镜像_Python

    题目描述 将给定的二叉树,变换为其镜像 解题思路 思路1 递归 class Solution:# 返回镜像树的根节点def Mirror(self, root):if root:root.left,r ...

最新文章

  1. Bootstrap 基本模板
  2. BCH应用发展报告——Member正在成为趋势
  3. 部署微软lync uc服务器,lync server xxxx企业版前端服务器部署资料.docx
  4. 每个前端开发者必会的二十个JavaScript面试题
  5. HDU2604 Queuing
  6. C++中的空指针和void * 指针
  7. 【最详细】数据结构(C语言版 第2版)第七章课后习题答案 严蔚敏 等 编著
  8. SAP Spartacus B2B User list页面的数据加载逻辑
  9. python多版本控制操作方法
  10. django-正向查询与反向查询演练-查询集的三种状态
  11. CentOS7配置默认网关
  12. java识别手写文字_Java 实现OCR 识别图像文字(手写中文)----tess4j
  13. java 代码控制键盘_Java Robot实现控制鼠标和键盘的代码实例
  14. 分享好用的日常记账软件
  15. blender 51个必须熟练记住的基础操作
  16. 七牛云存储使用经历到底怎么样
  17. JAVA后台,对上传资源限定大小
  18. 东师21秋《HTML5开发基础与应用》离线作业1
  19. 复数fft的时间复杂度,如何复数捕获阶段,振幅和频率的FFT的结果?
  20. 实验吧隐写术WP(二)

热门文章

  1. 使用Application.GetResourceStream从XAP安装包加载任意资源
  2. 【青少年编程竞赛交流】11月份微信图文索引
  3. 题目 1470:【蓝桥杯】【入门题】【基础练习VIP】时间转换
  4. 【怎样写代码】实现对象的复用 -- 享元模式(一):问题案例
  5. postfilter中文什么意思_Filterpost请求中文字符编码的过滤器 --学习笔记
  6. WebDriver 识别反爬虫的原理和破解方法~
  7. 升级版APDrawing,人脸照秒变线条肖像画,细节呈现惊人
  8. 大脑芯片公司Neuralink计划在人脑内植入芯片,他们到底想干什么?
  9. 2019最新进展 | Transformer在深度推荐系统中的应用
  10. 超阿里、大华,澎思科技行人再识别(ReID)技术刷新三大数据集记录