LintCode刷题 40. 用栈实现队列

本文介绍了一种利用两个栈实现队列基本操作的方法。通过将元素先压入栈1,再依次转移到栈2的方式,实现了队列的先进先出特性。文章提供了Python代码示例,包括push、pop及top等核心功能。

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

原题链接:

http://www.lintcode.com/zh-cn/problem/implement-queue-by-two-stacks/

题目描述

正如标题所述,你需要使用两个栈来实现队列的一些操作。

队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。

pop和top方法都应该返回第一个元素的值。

样例

比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2

题目解析:

题目主要考察的是队列和栈两种数据结构。队列:先进先出。栈:先进后出。

思路

思路一

栈是先进后出,队列时先进先出的。如果把元素放到stack1中,然后再把这些元素从stack1中弹出,依次放入stack2中,然后取stack2中的元素,就可以实现先进先出了。

当然了,这里还要注意一些问题。比如在stack2中有元素的时候,不能把stack1的元素压入到stack2中。

对于python来说,list数组本身就可以作为一个栈来使用。

push操作就是list.append()。pop操作就是list.pop()

代码(Python)

思路一代码
class MyQueue:
    
    def __init__(self):
        # do intialization if necessary
        
        
        #栈一:push到该栈中
        self.stack1 = []
        #栈二:从该栈中弹出
        self.stack2 = []
        

    """
    @param: element: An integer
    @return: nothing
    """
    def push(self, element):
        # write your code here
        self.stack1.append(element)

    """
    @return: An integer
    """
    def pop(self):
        # write your code here
        if self.stack2:
            return self.stack2.pop()
        if self.stack1:
            #将栈一的元素push到栈二中
            while (self.stack1):
                self.stack2.append(self.stack1.pop())
            return self.stack2.pop()
            
        else: 
            return None

    """
    @return: An integer
    """
    def top(self):
        # write your code here
        if self.stack2:
            return self.stack2[len(self.stack2)-1]
        if self.stack1:
            while (self.stack1):
                self.stack2.append(self.stack1.pop())
            return self.stack2[len(self.stack2)-1]
            
        else: 
            return None
复制代码

谦言忘语

个人目前只懂一丁点python语法,所以不做语法上的优化,而且整体代码风格效果会尽量跟C语言趋于一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值