编程题目: 两个队列实现栈(Python)
感觉两个队列实现栈 比 两个栈实现队列 麻烦
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)的更多相关文章
- 用两个栈实现队列与用两个队列实现栈(Python实现)
用两个栈实现队列: class QueueWithTwoStacks(object): def __init__(self): self._stack1 = [] self._stack2 = [] ...
- 剑指offer 面试题9.1:用两个队列实现栈
题目描述 使用队列实现栈的下列操作:push(x) -- 元素 x 入栈:pop() -- 移除栈顶元素:top() -- 获取栈顶元素:empty() -- 返回栈是否为空: 编程思想 利用双队列实 ...
- 两个队列实现栈&两个栈实现队列(JAVA)
1,两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:栈的特点时先进后出,队列的特点是先进先出. 若此时有两个队列stack1,st ...
- 剑指offer第二版面试题9:用两个队列实现栈(JAVA版)
题目:用两个队列实现栈. 分析:通过一系列的栈的压入和弹出操作来分析用队列模拟一个栈的过程,如图所示,我们先往栈内压入一个元素a.由于两个队列现在都是空,我们可以选择把a插入两个队列中的任一个.我们不 ...
- 两个栈实现队列+两个队列实现栈----java
两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出s ...
- Algorithm --> 两个栈实现队列和两个队列实现栈
两个栈实现队列和两个队列实现栈 队列(queue)先进先出的线性表:栈(stack)先进后出的线性表. 两个栈实现队列 法一思路: s1是入栈的,s2是出栈的. 入队列:直接压入s1即可: 出队列:如 ...
- Leetcode 225 两个队列实现栈
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- 剑指offer-用两个栈来实现一个队列-队列与栈-python
用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:使用两个栈,stackA 用来接收node stackB 用来接收 stackA 的出栈 # -*- cod ...
- LeetCode-239-剑指offer-滑动窗口的最大值-队列与栈-python
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6, ...
随机推荐
- jsp include参数传送接收与应用
先看一个简单的应用,在a.jsp中写如下代码 <html> <head></head> <body> <div> <jsp:inclu ...
- 修改Linux的默认编码
Windows的默认编码为GBK,Linux的默认编码为UTF-8.在Windows下编辑的中文,在Linux下显示为乱码.为了解决此问题,修改Linux的默认编码为GBK.方法如下: 方法1: vi ...
- UIKeyWindow的设置
新建一个纯代码iOS项目,需要对AppDelegate文件和项目的Info.plist文件做一番配置. 第一步:将Info.plist中的下面两项的value删除掉(保留空字符串),如下图 第二步:在 ...
- 【转载】 NVIDIA Tesla/Quadro和GeForce GPU比较
原文地址: https://blog.csdn.net/m0_37462765/article/details/74394932 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议 ...
- mapreduce程序执行过程
1.客户端程序,设置作业相关的配置和计算输入分片信息,向RM获取一个JOBID,提交作业信息(分片)到以作业ID为目录下,通知APP——MASTER 2.APP——MASTER,读取指定目录下的作业信 ...
- 小程序云开发使用where查询遇到的问题
想用小程序云开发的where查询,结果不论输入什么都是不报错,开始没注意,后来发现输入数据库中有的数据时,给打印出来查询成功,输入数据库中没有的数据时,也会得到一个集合,只不过这个集合的长度为0而已. ...
- 【转载】CentOS和Ubuntu的区别
CentOS(Community ENTerprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代 ...
- tensorflow中的图(02-1)
由于tensorflow版本迭代较快且不同版本的接口会有差距,我这里使用的是1.14.0的版本 安装指定版本的方法:pip install tensorflow==1.14.0 如果你之前安 ...
- 关于Android Studio中点9图的编译错误问题
Android中的点9图想必大家都非常熟悉了,能够指定背景图片的缩放区域和文本内容的显示区域,常见如QQ聊天界面的背景气泡这种文本内容不固定并需要适配的应用场景. 这里也给大家准备了一张图,详细介绍了 ...
- 多用块枚举,少用for循环
本文概要: 1.首先列举了四种可用于遍历的方式:标准的C语言for循环.Objective-C 1.0出现的NSEnumerator.Objective-C 1.0出现的for in快速遍历.块遍历. ...