LintCode刷题 40. 用栈实现队列

553 阅读1分钟

原题链接:

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语言趋于一致。