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

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. Spring Boot 项目本地运行无异常,部署到 Linux 服务器运行报错:java.lang.ClassNotFoundException

    一 背景 最近在用 Springboot 开发项目 A,引了小伙伴开发的模块 B,本地起服务,运行的好好的,等部署到服务器上,一运行就报错:Caused by: java.lang.ClassNotF ...

  2. Web基础了解版09-Cookie-Session

    Cookie Cookie 是一种服务器发送给浏览器以键值对形式存储小量信息的技术. 当浏览器首次请求服务器时,服务器会将一条信息封装成一个Cookie发送给浏览器,浏览器收到Cookie,会将它保存 ...

  3. Git fork后如何同步源仓库更新

    1. 设置源仓库的远程地址 >> git remote add [新地址名称] [源仓库远程地址] >> git remote add upstream https://git ...

  4. word2vec词向量处理中文语料

    word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间 ...

  5. 「学习笔记」FFT 之优化——NTT

    目录 「学习笔记」FFT 之优化--NTT 前言 引入 快速数论变换--NTT 一些引申问题及解决方法 三模数 NTT 拆系数 FFT (MTT) 「学习笔记」FFT 之优化--NTT 前言 \(NT ...

  6. Vue学习笔记:计算属性

    使用函数的缺点 如果我们想要将数据经过转化后再显示,或者多个数据结合起来进行显示,一般可以直接在数据渲染或者数据绑定的时候书写表达式 如果表达式过于复杂,或者逻辑太多的时候,我们可以将其封装在函数里, ...

  7. python面试题手动总结答案锦集

    数据类型 字符串 1.列举python中的基本数据类型 数字:int 布尔值:bool 字符串:str 列表:list 元组:tuple 字典:dict 集合:set 然后我们需要了解一些运算符,应为 ...

  8. 算法-leetcode-65-Valid Number

    算法-leetcode-65-Valid Number 上代码: # coding:utf-8 __author__ = "sn" """Valida ...

  9. nginx日志模块与HTTP过滤模块与sub模块修改返回内容

    日志格式使用指令 指令介绍 Syntax: log_format name [escape=default|json|none] string ...; Default: log_format com ...

  10. nginx 的 content阶段的root指令与alias指令

    root 与alias指令 Syntax: alias path; Default: — Context: location Syntax: root path; Default: root html ...