【发布时间】:2015-09-22 15:53:34
【问题描述】:
第一次实现:以下堆栈实现假定列表的末尾将包含堆栈的顶部元素。随着堆栈的增长,新项目将被添加到列表的末尾。
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
第二个实现:第二个实现假设列表的开头包含堆栈的顶部元素,并且在索引 0 处添加新项目。
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.insert(0,item)
def pop(self):
return self.items.pop(0)
def peek(self):
return self.items[0]
def size(self):
return len(self.items)
作为数据结构的初学者,我想知道:
1. 哪种实现在时间或空间方面更有效,为什么?
2. 是第二次实现中insert(0) 的时间复杂度 O(n)。如果是,如何?
【问题讨论】:
-
见wiki.python.org/moin/TimeComplexity。请注意,
self.items[-1]会为您提供最后一个元素较少的问题。 -
是的,先重写你的
peek方法。并称之为 tos,也许(栈顶) -
感谢@jonrsharpe 提供链接。
标签: python performance data-structures stack abstract-data-type