Python-剑指Offer(四):双栈模拟实现FIFO队列

本文介绍了一种使用链表实现栈的方法,包括节点定义、入栈、出栈及判断栈是否为空的操作。并通过两个栈的配合,实现了先进先出(FIFO)的队列功能,展示了数据结构在算法设计中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过链表实现栈

定义栈的链表节点:

class StackNode(object):
    def __init__(self, data, next):
        self.val = data
        self.next = next

定义栈,并实现基础的入栈出栈判空操作:

class Stack(object):
    def __init__(self):
        self.top = None
        self.bottom = None

    def push(self, data):
        if self.top is None:
            self.top = StackNode(data, None)
            self.bottom = self.top
        else:
            self.top.next = StackNode(data, None)
            self.top = self.top.next

    def pop(self):
        if self.top is None:
            return False
        if self.bottom == self.top:
            self.bottom = None
            self.top = None
            return True
        p = self.bottom
        while p is not None:
            if p.next == self.top:
                self.top = p
                p = p.next
                del p
                return True
            else:
                p = p.next

    def get_top(self):
        return self.top.val

    def is_empty(self):
        if self.top is not None:
            return False
        else:
            return True

利用双栈模拟FIFO队列

S1, S2 = Stack(), Stack()
data = [1, 2, 3, 4, 5, 6]

for d in data:
    S1.push(d)

while S1.is_empty() is False:
    S2.push(S1.get_top())
    S1.pop()

while S2.is_empty() is False:
    print(S2.get_top(), end='')
    S2.pop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值