开始做法

# coding:utf-8# !/usr/bin/env python# Time: 2018/6/6 9:32# Author: sty# File: stack_queue.pyclass Solution():def __init__(self):self.stack1 = []self.stack2 = []def push(self, data):self.stack1.append(data)def pop(self):if len(self.stack1) == 0 and len(self.stack2) == 0:return []elif len(self.stack2) == 0:while len(self.stack1) != 0:self.stack2.append(self.stack1.pop())return self.stack2.pop()

优化做法

减少了一次stack2的入栈和出栈操作

class Solution():def __init__(self):self.stack1 = []self.stack2 = []def push(self, data):self.stack1.append(data)def pop(self):if len(self.stack1) == 0 and len(self.stack2) == 0:return []elif len(self.stack2) == 0:while len(self.stack1) != 1:self.stack2.append(self.stack1.pop())# 减少了一次stack2的入栈和出栈操作return self.stack1.pop()return self.stack2.pop()

全部操作合集

class MyQueue:def __init__(self):"""Initialize your data structure here."""self.stack1 = []self.stack2 = []def push(self, x):"""Push element x to the back of queue.:type x: int:rtype: void"""self.stack1.append(x)def pop(self):"""Removes the element from in front of queue and returns that element.:rtype: int"""if len(self.stack1) == 0 and len(self.stack2) == 0:return Noneelse:if len(self.stack2) == 0:while len(self.stack1) != 1:self.stack2.append(self.stack1.pop())return self.stack1.pop()else:return self.stack2.pop()def peek(self):"""Get the front element.:rtype: int"""if len(self.stack2) == 0 and len(self.stack1) == 0:return Noneelse:if len(self.stack2) == 0:return self.stack1[0]else:return self.stack2[-1]def empty(self):"""Returns whether the queue is empty.:rtype: bool"""if len(self.stack1) == 0 and len(self.stack2) == 0:return Trueelse:return False

参考文档

https://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html
https://blog.csdn.net/slibra_L/article/details/78098683
https://leetcode.com/problems/implement-queue-using-stacks/description/

python 通过双栈实现队列相关推荐

  1. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  2. CLRS10.1-6练习 - 用双栈实现队列

    双栈实现队列算法: 分别考虑队列两种操作入队和出队,我们假设使用栈s1 s2, s1用来模拟入队,s2用来模拟出队 入队: 入队操作直接执行s1.push即可 出队: 代码实现 1 package h ...

  3. python数据结构-栈和队列的实现

    1.栈(后进先出(last in first out,LIFO)) 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种后入先出(LIFO,last-in-first-o ...

  4. 数据结构之—栈和队列

    目录 引言 一.栈(stack) 1.栈的应用 2.栈的实现 二.队列 1.基础队列的实现 2.循环队列 ​编辑 1)概念 2)如何判断环形队列为空⭐ 总结:环形队列是否已满条件:(tail+1)%d ...

  5. python 栈和队列_python 栈和队列的基本实现

    python中的列表结构可以用来实现栈和队列. [栈]: 栈是一种数据结构,具有先入后出的特点,并且栈的所有操作只能在某一端进行,能进行操作的一端的第一个元素称为栈顶,另一端的第一个元素称为栈底 栈的 ...

  6. Python数据结构与算法(二)栈和队列

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

  7. [转载] Python的双端队列deque

    参考链接: Python中的双端队列DeQue Python的强大并不在于它的语法,而在于它的库,当你对各种数据结构感到苦恼时,Python提供了各种开箱即用的数据结构. 数据结构中最常讲授的数据结构 ...

  8. Java数据结构(1.1):数据结构入门+线性表、算法时间复杂度与空间复杂度、线性表、顺序表、单双链表实现、Java线性表、栈、队列、Java栈与队列。

    数据结构与算法入门 问题1:为什么要学习数据结构          如果说学习语文的最终目的是写小说的话,那么能不能在识字.组词.造句后就直接写小说了,肯定是不行的, 中间还有一个必经的阶段:就是写作 ...

  9. 数据结构与算法(Python版) | (6) 线性结构---队列、双端队列和列表

    本专栏主要基于北大的数据结构与算法教程(Python版)进行整理,包括课程笔记和OJ作业. 课程链接 1. 队列抽象数据类型及Python实现 什么是队列? 队列是一种有次序的数据集合,其特征是: 1 ...

最新文章

  1. Ubuntu左边启动器移到底部及自动隐藏
  2. 转:Android之 MTP框架和流程分析
  3. mysql三个层次_数据库的基本结构三个层次
  4. 古老的SSM企业级应用
  5. 望岳物业APP开发过程
  6. python填写excel-python读写Excel
  7. conda重命名环境env
  8. vim编辑器之按键说明
  9. 通过BizTalk WCF适配器实现异构数据库/系统间的数据同步
  10. linux查看电脑硬件信息,Linux下查看电脑硬件配置【转】
  11. 杭电4510为什么时光不能倒流
  12. 在一家公司产生倦怠感,如何化解?
  13. 开发微信小程序 中遇到的坑 及解决方法
  14. C++基础语言知识大汇总(不断更新!!!)
  15. 《Google Android开发入门与实战》
  16. C++,获取当前工作路径
  17. 京东联盟的开放平台的Python客户端封装
  18. 【ESAPI】WEB安全ESAPI使用
  19. 5种最热门编程语言的优缺点
  20. git恢复误删代码或文件

热门文章

  1. 简单两步,spring aop上手即用即会
  2. 2022-2028年中国锂电材料产业投资分析及前景预测报告
  3. java写游戏的聊天怎么写_怎么用JAVA编写一个打字游戏
  4. Go 知识点(08) — 对未初始化的 channel 进行读写操作
  5. LeetCode简单题之“气球” 的最大数量
  6. Babel 快速入门
  7. Yolov3 的 OneFlow 实现
  8. VTA:深度学习加速器堆栈
  9. startActivity(xx,xx.class) 传递数据
  10. android sdk安装