用队列实现栈---LeetCode----(15)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_36697353/article/details/88017034

使用队列实现栈的下列操作:

  • push(x) -- 元素 x 入栈
  • pop() -- 移除栈顶元素
  • top() -- 获取栈顶元素
  • empty() -- 返回栈是否为空

注意:

  • 你只能使用队列的基本操作-- 也就是 push to backpeek/pop from frontsize, 和 is empty 这些操作是合法的。
  • 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
  • 你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)

思考了一会,代码很简答

class MyStack(object):

    def __init__(self):
        """
        Initialize your data structure here.
        队列: 先进先出
        队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
        """
        self.queue = []
        

    def push(self, x):
        """
        Push element x onto stack.
        :type x: int
        :rtype: None
        元素x入栈
        """
        self.queue.append(x)
        
        
        

    def pop(self):
        """
        Removes the element on top of the stack and returns that element.
        :rtype: int
        """
        if len(self.queue) == 0:
            return []
        else:
            
            deldata = self.queue[-1]
            del self.queue[-1]   # 这里需要解释一下, 后面说明
            return deldata

    def top(self):
        """
        Get the top element.
        :rtype: int
        """
        if len(self.queue) == 0:
            return []
        else:
            return self.queue[-1]

    def empty(self):
        """
        Returns whether the stack is empty.
        :rtype: bool
        """
        return self.queue == []

        


# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()

python中的del用法

python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题。

python的del不同于C的free和C++的delete。

由于python都是引用,而python有GC机制,所以,del语句作用在变量上,而不是数据对象上。

  1. if __name__=='__main__':  
  2.     a=1       # 对象 1 被 变量a引用,对象1的引用计数器为1  
  3.     b=a       # 对象1 被变量b引用,对象1的引用计数器加1  
  4.     c=a       #1对象1 被变量c引用,对象1的引用计数器加1  
  5.     del a     #删除变量a,解除a对1的引用  
  6.     del b     #删除变量b,解除b对1的引用  
  7.     print(c)  #最终变量c仍然引用1  

del删除的是变量,而不是数据。

  1. if __name__=='__main__':  
  2.     li=[1,2,3,4,5]  #列表本身不包含数据1,2,3,4,5,而是包含变量:li[0] li[1] li[2] li[3] li[4]   
  3.     first=li[0]     #拷贝列表,也不会有数据对象的复制,而是创建新的变量引用  
  4.     del li[0]  
  5.     print(li)      #输出[2, 3, 4, 5]  
  6.     print(first)   #输出 1  

猜你喜欢

转载自blog.csdn.net/baidu_36697353/article/details/88017034