用两个栈实现队列

本文介绍如何利用两个栈模拟队列的Push和Pop操作。在Python中,一个栈用于插入元素,另一个栈用于弹出元素,确保遵循队列的FIFO原则。当需要弹出元素而输出栈为空时,会将输入栈的所有元素转移到输出栈。
摘要由CSDN通过智能技术生成

用两个栈实现队列

题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

解题思路

创建两个栈,一个用于接收数据,一个用于输出数据;输出的栈是将接收栈中的数据压榨以后再出栈
创建两个栈,一个接收栈acceptStack,一个输出栈outputStack。
实现的队列的入队push的主要操作由acceptStack实现,出队pop的主要操作由outputStack实现。acceptStack通过将数据追加到list中完成push操作;outputStack在栈不为空时方可实现pop操作,当outputStack为空时,acceptStack不为空时,需要将acceptStack中的数据从acceptStack出栈并入栈至outputStack中(此时,acceptStack中的栈顶元素到了outputStack的栈底,acceptStack的栈底元素到了outputStack的栈顶),然后再完成从outputStack中pop的操作。如果outputStack、acceptStack均为空说明无法进行pop操作。

代码示例

# coding:utf-8

'''用两个栈来实现一个队列,完成队列的Push和Pop操作。
 队列中的元素为int类型。
 '''

class TwoStackToQueue():
    def __init__(self):
        # 创建两个栈,一个接收栈,一个输出栈
        self.accpetStack = []
        self.outputStack = []

    # 入队列方法
    def push(self, node):
        # 将元素追加到接收栈中,完成入队操作
        self.accpetStack.append(node)
    # 出队列方法
    def pop(self):
        # 输出栈为空,但接收栈不为空,需要将接收栈中的元素从接收栈中出栈,
        # 入栈到输出栈中,然后再通过输出栈的出栈完成出队操作
        if self.outputStack == []:   # 输出栈为空
            while self.accpetStack:  # 接收栈不为空
                result = self.accpetStack.pop()  # 从接收栈中出栈
                self.outputStack.append(result)  # 入栈到输出栈中

        # 输出栈不为空的情况,将栈顶元素出栈,完成出队操作
        if self.outputStack != []:
            result = self.outputStack.pop()
            return result
        # 输出栈为空,此时说明接收栈也为空,无法进行pop操作返回None
        else:
            return None


if __name__ == '__main__':
    fun = TwoStackToQueue()
    fun.push(1)
    fun.push(2)
    fun.push(3)
    fun.push(4)
    fun.push(5)
    print(fun.pop())
    print(fun.pop())
    print(fun.pop())
    print(fun.pop())
    print(fun.pop())
    print(fun.pop())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值