通过两个队列实现一个栈

首先 我们需要了解下什么是队列,什么是栈。

队列的特性是先进先出;

栈的特性是后进先出;

class Stack(object):
    #初始化两个列表
    def __init__(self):
        self.queue1 = []
        self.queue2 = []
    #将数据添加到一个列表中
    def push(self,value):
        self.queue1.append(value)
        # print(self.queue1)

    def pop(self):
        #假如这个列表没有数据则返回None
        if len(self.queue1) == 0:
            return None
        while 1:
            #循环将列表1的数据的第一个数据取出放入另一个列表中
            if len(self.queue1) == 1:
                #剩余最后一个的时候则是要的数据
                value = self.queue1.pop(-1)
                break
            self.queue2.append(self.queue1.pop(0))
        self.queue1,self.queue2 = self.queue2,self.queue1

        return value

obj = Stack()
obj.push('1')
obj.push('2')
obj.push('3')

print(obj.pop())
print(obj.pop())
print(obj.pop())
print(obj.pop())
import queue
class Stack(object):
    #初始化两个列表
    def __init__(self):
        self.queue1 = queue.Queue()
        self.queue2 = queue.Queue()
    #将数据添加到一个列表中
    def push(self,value):
        self.queue1.put(value)
        # print(self.queue1)

    def pop(self):
        #假如这个列表没有数据则返回None
        if self.queue1.qsize() == 0:
            return None
        while 1:
            #循环将列表1的数据的第一个数据取出放入另一个列表中
            if self.queue1.qsize() == 1:
                #剩余最后一个的时候则是要的数据
                value = self.queue1.get()
                break
            self.queue2.put(self.queue1.get())
        self.queue1,self.queue2 = self.queue2,self.queue1

        return value

obj = Stack()
obj.push('1')
obj.push('2')
obj.push('3')

print(obj.pop())
print(obj.pop())
print(obj.pop())
print(obj.pop())
原文地址:https://www.cnblogs.com/blackball9/p/11670148.html