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()
    

      

  • 相关阅读:
    js常用框架原理
    移动端input解决键盘问题 方案1
    jq大体架构。先记录再慢慢剖析
    把图片存储 canvas原生API转成base64
    清除浮动的6中方法
    window.location.hash属性介绍
    前端性能优化之js,css调用优化
    数组中的对象,判断是否有重复值、
    [Python] Pitfalls: Be Careful with os.chdir
    Changing the Color of Linux ls Command 改变Linux的ls命令显示的颜色
  • 原文地址:https://www.cnblogs.com/wuditju/p/8380058.html
Copyright © 2011-2022 走看看