两个栈实现队列 Python实现
# coding=utf-8 MAX_LENGTH = 100 SUCCESS = 1
FAIL = 0
ERROR = -1 class Queue(object): stack_fir = None
stack_sec = None
queue_len = 0 def __init__(self):
self.stack_fir = Stack()
self.stack_sec = Stack()
self.queue_len = 0 # 队列push方法
def push(self, item):
if self.queue_len == MAX_LENGTH:
return Result(FAIL, None)
elif self.queue_len > MAX_LENGTH:
return Result(ERROR, None) self.queue_len += 1
result = self.stack_fir.push(item)
if result.get_code() == SUCCESS:
return Result(SUCCESS, None)
else:
return Result(FAIL, None) # 队列pop方法
def pop(self):
if self.queue_len == 0:
return Result(FAIL, None)
elif self.queue_len < 0:
return Result(ERROR, None) self.queue_len -= 1 # 将装有数据的栈拷贝到空栈中
while self.stack_fir.has_next():
pop_result = self.stack_fir.pop()
if pop_result.get_code() == SUCCESS:
self.stack_sec.push(pop_result.get_value()) result = self.stack_sec.pop().get_value() # 将装有数据的栈拷贝到空栈中
while self.stack_sec.has_next():
pop_result = self.stack_sec.pop()
if pop_result.get_code() == SUCCESS:
self.stack_fir.push(pop_result.get_value()) return Result(SUCCESS, result) # 队列是否有下一个元素
def has_next(self):
return self.queue_len > 0 class Stack(object): stack_len = 0
item_list = [] def __init__(self):
self.stack_len = 0
self.item_list = [] # 栈push方法
def push(self, item):
if self.stack_len == MAX_LENGTH:
return Result(FAIL, None)
elif self.stack_len > MAX_LENGTH:
return Result(ERROR, None) self.stack_len += 1
self.item_list.append(item)
return Result(SUCCESS, None) # 栈pop方法
def pop(self):
if self.stack_len == 0:
return Result(FAIL, None)
elif self.stack_len < 0:
return Result(ERROR, None) self.stack_len -= 1
item = self.item_list[self.stack_len]
del self.item_list[self.stack_len]
return Result(SUCCESS, item) # 栈是否有下一个元素
def has_next(self):
return self.stack_len > 0 class Result(object):
code = 0
value = None def __init__(self, code, value):
self.code = code
self.value = value def get_code(self):
return self.code def get_value(self):
return self.value if __name__ == '__main__':
queue = Queue()
queue.push(1)
queue.push(2)
queue.push(5)
queue.push(4)
queue.push(3) while queue.has_next():
print queue.pop().get_value()
两个栈实现队列 Python实现的更多相关文章
- 用两个栈实现队列(python)
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. # -*- coding:utf-8 -*- class Solution: def __init__( ...
- 两个栈实现队列 牛客网 程序员面试金典 C++ Python
两个栈实现队列 牛客网 程序员面试金典 C++ Python 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. C++ //run:5ms memeory ...
- 用两个栈实现队列与用两个队列实现栈(Python实现)
用两个栈实现队列: class QueueWithTwoStacks(object): def __init__(self): self._stack1 = [] self._stack2 = [] ...
- 《剑指offer》用两个栈实现队列
本题来自<剑指offer> 用两个栈实现队列 题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 队列定义:先进先出 栈定义:先进后出 要 ...
- 剑指Offer面试题:6.用两个栈实现队列
一.题目:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 原文是使用 ...
- 剑指OFFER之用两个栈实现队列(九度OJ1512)
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入文件包含一个测试样例.对于每个测试样例,第一行输入一个n(1<=n<=100 ...
- 九度OJ 1512 用两个栈实现队列 【数据结构】
题目地址:http://ac.jobdu.com/problem.php?pid=1512 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 输入: 每 ...
- 两个栈实现队列+两个队列实现栈----java
两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出s ...
- Algorithm --> 两个栈实现队列和两个队列实现栈
两个栈实现队列和两个队列实现栈 队列(queue)先进先出的线性表:栈(stack)先进后出的线性表. 两个栈实现队列 法一思路: s1是入栈的,s2是出栈的. 入队列:直接压入s1即可: 出队列:如 ...
随机推荐
- IOS 获取中英文字符串长度
//得到中英文混合字符串长度 方法1 - (int)convertToInt:(NSString*)strtemp { int strlength = 0; char* p = (char*)[str ...
- linux C/C++服务器后台开发面试题总结
一.编程语言 1.根据熟悉的语言,谈谈两种语言的区别? 主要浅谈下C/C++和PHP语言的区别: 1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互联网 ...
- iOS-----使用NSOperation与NSOperationQueue实现多线程
使用NSOperation与NSOperationQueue实现多线程 NSOperation与NSOperationQueue的基本理论如下. NSOperationQueue 代表一个FIFO的队 ...
- 关于前端的margin
margin 边界,元素周围生成额外的空白区.“空白区”通常是指其他元素不能出现且父元素背景可见的区域.——CSS权威指南 我比较喜欢使用“外边距”这个词来解释margin(同理padding可以称之 ...
- removeLineEndSpace
/****************************************************************************** * removeLineEndSpace ...
- CodeForces - 140E:New Year Garland (组合数&&DP)
As Gerald, Alexander, Sergey and Gennady are already busy with the usual New Year chores, Edward has ...
- js窗口拖动 模版
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- UVA 10305:Ordering Tasks(拓扑排序)
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm& ...
- Tensorflow & Python3 做神经网络(视频教程)
Tensorflow 简介 1.1 科普: 人工神经网络 VS 生物神经网络 1.2 什么是神经网络 (Neural Network) 1.3 神经网络 梯度下降 1.4 科普: 神经网络的黑盒不黑 ...
- tomcat源码阅读之安全机制
一.领域(Realm): 1.Principal接口代表角色信息,包含了三个成员:用户名.密码.role列表(以逗号分隔),对应了tomcat-users.xml文件中一行user信息: Generi ...