感觉两个队列实现栈 比 两个栈实现队列 麻烦

1.栈为空:当两个队列都为空的时候,栈为空

2.入栈操作:当队列2为空的时候,将元素入队到队列1;当队列1位空的时候,将元素入队到队列2;

  如果队列1 和 队列2 都为空的时候,那就选择入队到队列1.

3.出队操作:当两个队列都为空的时候,引发错误“栈为空”;

      当队列2位空的时候,如果队列1中只有一个元素,则直接将队列1中的元素出队;

      如果队列1不止一个元素的时候,就将队列1的元素出队然后入队到队列2,知道队列1中只有一个元素,然后将队列1中的元素出队即可。

      当队列1位空的时候,如果队列2中只有一个元素,则直接将队列2中的元素出队;

      如果队列2不止一个元素的时候,就将队列2的元素出队然后入队到队列1,知道队列2中只有一个元素,然后将队列2中的元素出队即可。

代码如下:

 #!/usr/bin/env python3
# -*- coding: utf-8 -*- class Stack(object):
def __init__(self):
self.q1 = Queue()
self.q2 = Queue() def is_empty(self):
result = self.q1.is_empty() and self.q2.is_empty()
return result def push(self, elem):
if self.q2.is_empty():
self.q1.enqueue(elem)
elif self.q1.is_empty():
self.q2.enqueue(elem)
else:
self.q1.enqueue(elem) def pop(self):
if self.q1.is_empty() and self.q2.is_empty():
raise ValueError("Stack is Empty")
if self.q2.is_empty():
if self.q1.head.next is None:
return self.q1.dequeue()
while not self.q1.head.next is None:
self.q2.enqueue(self.q1.dequeue())
return self.q1.dequeue()
if self.q1.is_empty():
if self.q2.head.next is None:
return self.q2.dequeue()
while not self.q2.head.next is None:
self.q1.enqueue(self.q2.dequeue())
return self.q2.dequeue() class Node(object):
def __init__(self, elem, next_=None):
self.elem = elem
self.next = next_ class Queue(object):
def __init__(self):
self.head = None
self.rear = None def is_empty(self):
return self.head is None def enqueue(self, elem):
if self.is_empty():
self.head = Node(elem)
self.rear = self.head
else:
self.rear.next = Node(elem)
self.rear = self.rear.next def dequeue(self):
if self.is_empty():
raise ValueError("Queue is Empty")
if self.head.next is None:
e = self.head.elem
self.head = None
self.rear = None
return e
else:
e = self.head.elem
self.head = self.head.next
return e def peek(self):
if self.is_empty():
raise ValueError("Queue is Empty")
return self.head.elem def bianli(self):
p = self.head
li = []
while p:
li.append(p.elem)
p = p.next
return li if __name__ == "__main__":
s = Stack()
for i in range(5):
s.push(i)
while not s.is_empty():
print(s.pop())

编程题目: 两个队列实现栈(Python)的更多相关文章

  1. 用两个栈实现队列与用两个队列实现栈(Python实现)

    用两个栈实现队列: class QueueWithTwoStacks(object): def __init__(self): self._stack1 = [] self._stack2 = [] ...

  2. 剑指offer 面试题9.1:用两个队列实现栈

    题目描述 使用队列实现栈的下列操作:push(x) -- 元素 x 入栈:pop() -- 移除栈顶元素:top() -- 获取栈顶元素:empty() -- 返回栈是否为空: 编程思想 利用双队列实 ...

  3. 两个队列实现栈&两个栈实现队列(JAVA)

    1,两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:栈的特点时先进后出,队列的特点是先进先出. 若此时有两个队列stack1,st ...

  4. 剑指offer第二版面试题9:用两个队列实现栈(JAVA版)

    题目:用两个队列实现栈. 分析:通过一系列的栈的压入和弹出操作来分析用队列模拟一个栈的过程,如图所示,我们先往栈内压入一个元素a.由于两个队列现在都是空,我们可以选择把a插入两个队列中的任一个.我们不 ...

  5. 两个栈实现队列+两个队列实现栈----java

                                               两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出s ...

  6. Algorithm --> 两个栈实现队列和两个队列实现栈

    两个栈实现队列和两个队列实现栈 队列(queue)先进先出的线性表:栈(stack)先进后出的线性表. 两个栈实现队列 法一思路: s1是入栈的,s2是出栈的. 入队列:直接压入s1即可: 出队列:如 ...

  7. Leetcode 225 两个队列实现栈

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  8. 剑指offer-用两个栈来实现一个队列-队列与栈-python

    用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:使用两个栈,stackA 用来接收node stackB 用来接收 stackA 的出栈 # -*- cod ...

  9. LeetCode-239-剑指offer-滑动窗口的最大值-队列与栈-python

    给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6, ...

随机推荐

  1. ES查询不重复的数据

    GET ana-apk/_search #查询不重复的mac地址{  "size": 10,  "aggs": {    "MAC": {  ...

  2. 前端学习 之 JavaScript DOM 与 BOM

    一. DOM介绍 1. 什么是DOM? DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构. 目的其实就是为了能让js操作html元素而制定的一个规范. DOM就 ...

  3. 你是否还在写try-catch-finally?来使用try-with-resources优雅地关闭流吧

    前言 开发中,我们常常需要在最后进行一些资源的关闭.比如读写文件流等,常见的,我们会在最后的finally里进行资源的关闭.但是这种写法是很不简洁的.其实,早在JDK1.7就已经引入了try-with ...

  4. 两台W7系统的电脑,A电脑可以ping通B电脑,B电脑ping不通A电脑。

    https://zhidao.baidu.com/question/1946500242424659908.html 打开控制面板-系统和安全-防火墙-允许程序-文件和打印机共享(勾选) 局域网共享是 ...

  5. Python将数据保存为txt文件的方法

    f = open('name.txt',mode='w') #打开文件,若文件不存在系统自动创建. #参数name 文件名,mode 模式. #w 只能操作写入 r 只能读取 a 向文件追加 #w+ ...

  6. c++ 读取、保存单张图片

    转载:https://www.jb51.net/article/147896.htm 实际上就是以二进制形式打开文件,将数据保存到内存,在以二进制形式输出到指定文件.因此对于有图片的文件,也可以用这种 ...

  7. JS事件委托或者事件代理原理以及实现

    事件委托(事件代理)原理:简单的说就是将事件交由别人来执行,就是将子元素的事件通过冒泡的形式交由父元素来执行. 为什么要用时间委托? 在JavaScript中,添加到页面上的事件处理程序数量将直接关系 ...

  8. 笔记||Python3进阶之读取和写入yaml配置文件

    yaml是专门用来写配置文件的语言,简洁强大,远比JSON格式方便,yaml在python语言中有PyYAML安装包. - 首先需要pip安装:pip install pyyaml - yaml基本语 ...

  9. Scrapy 框架结构及工作原理

    1.下图为 Scrapy 框架的组成结构,并从数据流的角度揭示 Scrapy 的工作原理 2.首先.简单了解一下 Scrapy 框架中的各个组件 组       件 描      述 类   型 EN ...

  10. thinkPHP5.0中使用header跳转没作用

    我在controller中的方法中这样写: header("Location:".$url); 但是一直没动静,不会跳转,最后还是官方文档解决了 https://www.kancl ...