版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_36697353/article/details/88017034
使用队列实现栈的下列操作:
- push(x) -- 元素 x 入栈
- pop() -- 移除栈顶元素
- top() -- 获取栈顶元素
- empty() -- 返回栈是否为空
注意:
- 你只能使用队列的基本操作-- 也就是
push to back
,peek/pop from front
,size
, 和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语句作用在变量上,而不是数据对象上。
- if __name__=='__main__':
- a=1 # 对象 1 被 变量a引用,对象1的引用计数器为1
- b=a # 对象1 被变量b引用,对象1的引用计数器加1
- c=a #1对象1 被变量c引用,对象1的引用计数器加1
- del a #删除变量a,解除a对1的引用
- del b #删除变量b,解除b对1的引用
- print(c) #最终变量c仍然引用1
del删除的是变量,而不是数据。
- if __name__=='__main__':
- li=[1,2,3,4,5] #列表本身不包含数据1,2,3,4,5,而是包含变量:li[0] li[1] li[2] li[3] li[4]
- first=li[0] #拷贝列表,也不会有数据对象的复制,而是创建新的变量引用
- del li[0]
- print(li) #输出[2, 3, 4, 5]
- print(first) #输出 1