zoukankan      html  css  js  c++  java
  • 两个栈实现队列 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()
    

      

  • 相关阅读:
    Oracle创建表空间、创建用户以及授权
    Oracle数据库安装图文操作步骤
    Oracle 11g数据库详细安装步骤图解
    Java 开发环境配置--eclipse工具进行java开发
    ExtJs常用布局--layout详解(含实例)
    HTTPS-HTTPS原理
    JavaScript: JavaScript的简介和入门代码演示
    HTML: 仿写一个财经类静态的网页
    CSS:仿写博客园写一个静态网页
    CSS:CSS定位和浮动
  • 原文地址:https://www.cnblogs.com/wuditju/p/8380058.html
Copyright © 2011-2022 走看看