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

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. java窗口程序字符串时间转成时间戳

    pom.xml 文件: ?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  2. win10 安装"pip install orange3" 出现LINK : fatal error LNK1158: cannot run 'rc.exe' 错误的解决办法

    解决办法: 从(本例使用的是64位的python3.6 注意:如果python的版本是32位,则使用x86:如果是64位,则使用x64;) 复制一下两个文件 rc.exe rcdll.dll 到

  3. asp.net mvc Bundle

    在使用ASP.NET MVC4中使用BundleConfig 将 js css文件 合并压缩使用,但是文件名含有min及特殊字符的将不引用 ,也不提示其他信息.

  4. 操作系统OS - Zip Bomb

    42.zip - A 42 kb zip file that contains 4.5 Petabytes of uncompressed data.

  5. Mybatis笔记一

    课程安排: mybatis和springmvc通过订单商品 案例驱动 第一天:基础知识(重点,内容量多) 对原生态jdbc程序(单独使用jdbc开发)问题总结 mybatis框架原理 (掌握) myb ...

  6. 【转载】Eclipse vs IDEA快捷键对比大全(win系统)

    花了几天时间熟悉IDEA的各种操作,将各种快捷键都试了一下,感觉很是不错! 以下为我整理了一下开发过程中经常用的一些Eclipse快捷键与IDEA的对比,方便像我一样使用Eclipse多年但想尝试些改 ...

  7. TensorFlow基础三(Scope)

    用到变量名了,就涉及到了名字域的概念.通过不同的域来区别变量名,毕竟给所有变量都直接取不同名字还是有点辛苦的. 主要是name_scope和variable_scope,name_scope 作用于操 ...

  8. java 实现图片上传功能

    1:jsp 页面上传图片按钮在这里我就写相关的代码 <div class="control-group"> <label class="control- ...

  9. 随机游走模型(Random Walk)

    给定了一个时间顺序向量\(z_1,...,z_T\),rw模型是由次序r来定义的,\(z_t\)仅取决于前\(t-r\)个元素.当r = 1时为最简单的RW模型. 给定了向量的其他元素,\(z_t\) ...

  10. python人脸对比

    import sys  import ssl  from urllib import request,parse    # client_id 为官网获取的AK, client_secret 为官网获 ...