ch6_3队列实现栈的功能_python

思路

list.pop():
注意 python 列表 或 数组 中 使用 pop() 函数时,
默认 pop 时, 弹出的是数组中的最后一个元素;
list1 = [3,9,6,8,5,] ;
list1.append(77)
print(list1)
a = list1.pop();
print(a);
a = 5

leetcode 225 队列实现栈

1 题目分析

方法二 . 两个队列实现栈的功能时;

注意此时,
数组头作为 栈顶,存放的是最后加入的新元素;
数组尾作为 栈底, 存放的是 最开始加入的元素;

一个 主队列: 以最先加入的元素在队尾, 最后加入的元素在队头的形式存储元素;
一个 辅助队列: 用于临时存放当前加入的元素, 以及合并后的元素;

在这里插入图片描述

主队列中的 python 形式:
注意, 在Python 数组中, 此时,数组的最左边下标为0 被作为队头(栈顶), 数组末尾最右边 作为 队尾(栈底)

实现流程关键点:
元素入栈时,

  1. 先将元素放到辅助队列中;

  2. 此时,判断主队列是否为空,
    若为空, 直接交换主队列,辅助队列中的内容;
    主队列不为空, 将主队列的中内容依次从队头弹出, 加入到辅助队列中;
    此时辅助队列中的元素, 队头 (数组头)便是刚加入的元素 作为栈顶, 队尾(数组尾部)便是最早加入 作为栈底;

    此时, 再将主队列和辅助队列交换;

元素出栈时, 弹出栈顶元素,即 队头元素, 即主队列的 数组头 -> :

2. 代码

class  MyStack:
    def __init__(self, ):
        self.queue_major  = []
        self.queue_vise = []

    def push(self, x : int) -> None:
        self.queue_vise.append(x)    # 先将元素加入到辅助队列;

        while self.queue_major:
            self.queue_vise.append(self.queue_major.pop(0)) # 将主队列中的元素 依次从队头弹出, 添加到 辅助队列中的队尾处;

        self.queue_major = self.queue_vise   # 将合并后的辅助队列 与 主队列交换;
        self.queue_vise  = []   #  辅助队列重新 更新为空;
        print("the major queue", self.queue_major)


    def  pop(self,) ->int:
        if  self.empty():
            return
        else:
            return  self.queue_major.pop(0)


    def top(self, ) ->int:
        return self.queue_major[0]  # 注意 这里返回的是 数组的下标;


    def empty(self,) ->bool:
        if not self.queue_major:
            return  True
        else:
            return  False


if __name__ == "__main__":
    obj1 = MyStack()
    str1 = obj1.push(6)
    str1 = obj1.push(5)
    str1 = obj1.push(9)
    str1 = obj1.push(3)
    str1 = obj1.push(55)
    # str1 = obj1.strStr("hello", "ll")
    # str1 = obj1.strStr("aaaaa", "bba")
    # str1 = obj1.strStr("aaaaa" ,"bba")
    print(str1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值