python实现对列和栈 基本的原理

对列:先进先出
栈:后进先出

# 任务对列
class JobQueue:
    def __init__(self):
        self.l = []
    #入队
    def push(self,vid:int) -> None:
        # 从最左边入队
        self.l.insert(0,vid)
        print(self.l)

    def empty(self)  -> bool:
        # 不为空返回 flask
        return not bool(self.l)

    # 出队
    def out(self) -> int:
        return self.l.pop()




# 两个对列时间 栈

class StackWithTwoQueues(object):
    #定义两个空队列
    def __init__(self):
        self.queue1 = []  # #存放最后插入的数据  #翻转 先插入的数据
        self.queue2 = []    #存放最先插入的数据    # 翻转 后插入的数据
    #入栈
    def push(self, item):
        # 向队列中 加入数据 注意是从后边加入的 所以说最右边是最后入队的数据
        self.queue1.append(item)
    #出栈
    def pop(self):
        # 长度为0是返回空
        if len(self.queue1) == 0:
            return(None)
        # 大于一时出栈
        while(len(self.queue1) != 1):
            #  列表1 中最左边也就是说 最早入队的 放入 列表2 ; 此时 列表1:后入队的数据; 列表2:先入队的数据
            self.queue2.append(self.queue1.pop(0))
        # 将 列表1  和 列表2 进行翻转  ;  也就是 列表2:先入队的数据  列表1: 后入队的数据
        # 刚好出栈的就是 后入队的数据 遵循栈的:先进后后出,后进先出的规则;
        self.queue1, self.queue2 = self.queue2, self.queue1
        return (self.queue2.pop())




if __name__ == '__main__':

    # 对列的实现
    res  = JobQueue()
    # 入队
    res.push(1)
    res.push(2)
    # 出队
    print(res.out())
    print(res.out())

    print(res.empty())

    # 栈的实现
    # 进栈
    ss = StackWithTwoQueues()
    list = [0, 1, 2, 3, 4]
    for i in range(5):
        ss.push(list[i])
    print(list)
    # 出栈
    for i in range(5):
        print(ss.pop(), ',', end = '')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值