算法题解第二章

14 篇文章 0 订阅
13 篇文章 0 订阅
文章介绍了一种利用两个栈来模拟队列的行为的方法。在Python中,通过一个栈进行入队操作,另一个栈进行出队操作,当需要出队时,如果第二个栈为空,则将第一个栈的所有元素转移到第二个栈,然后从第二个栈出队。这种方法实现了队列的先入先出(FIFO)特性。
摘要由CSDN通过智能技术生成

文章目录

题目

用两个栈实现一个队列

解析

##首先我们知道 栈:是先入后出 后入先出 队列是先入先出
##已经条件 两个栈A,B 结果一个先入先出的队列
##所以实现思路:
##1.先写一个栈
##2.把数据先入到A栈
##3.把A栈的数据出栈后到B栈,此时B栈进行出栈完成了对a栈底元素的删除
##4.这个还需要一些限制 比如先运行了一次b栈里面已经有了数据,这时候就要先把之前的数据出完 然后再把a的数据导入B
##5. 如果b栈出完了数据,A栈没有数据,那这个运行不了返回-1


class Stack:
    def __init__(self):
        self.stack=[]

    def append_in(self,data):
        self.stack.append(data)

    def append_out(self):
        if len(self.stack)>=1:
            return self.stack.pop()
        else:
            return  -1

    def print_stack(self):
        return self.stack

    def get_length(self):
        return len(self.stack)

# stackA=Stack()
# stackB=Stack()
#
# stackA.append_in(2)
# stackA.append_in(3)
# stackA.append_in(4)
# print(stackA.print_stack())
# data =stackA.append_out()
# print(data)

class Squeue(object):
    def __init__(self):
        self.stackA=Stack()
        self.stackB=Stack()

    def append_data(self,data):
        self.stackA.append_in(data)
        # return self.stackA.get_length()

    def get_data(self):
        if self.stackB.get_length()>=1:
            return self.stackB.append_out()
        if self.stackA.get_length() ==0:
            return -1
        for i in range(self.stackA.get_length()):
            data=self.stackA.append_out()
            self.stackB.append_in(data)
        return self.stackB.append_out()


new_data=Squeue()
new_data.append_data(8)
new_data.append_data(822)
new_data.append_data(232)
new_data.append_data(892)
datas =new_data.get_data()
print(datas)
datas =new_data.get_data()
print(datas)


`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值