问题描述
我已经尝试过collections.deque
和queue.Lifoqueue
来实现堆栈和队列,尽管它们都能正常工作,但我想从头开始实现它。那么根据时间和空间复杂度,哪种方法最好?我尝试通过单链列表和python list function实现它。还有其他比这更好的方法吗?
解决方法
这是队列。我评论了每个操作的时间复杂度
class QueuesArray:
def __init__(self):
self._data=[]
def __len__(self): # O(1)
return len(data)
def isempty(self): # O(1)
return len(self._data)==0
def enqueue(self,e): #O(1)
self._data.append(e)
return e
def dequeue(self): # O(1)
if self.isempty():
return ValueError("")
return self._data.pop(0) # O(1)
def first(self): # O(1)
if self.isempty():
print ('Queue is empty')
return self._data[0]
这里是堆栈:
class StacksArray:
def __init__(self):
self._data=[]
def __len__(self): # O(1)
return len(self._data)
def isempty(self): # O(1)
return len(self._data)==0
def push(self,e): # O(1)
self._data.append(e)
return e
def pop(self): # O(1)+O(1)
if self.isempty(): # O(1)
print('stack is empty')
raise IndexError
else:
return self._data.pop() # O(1)
def top(self): # O(1)+O(1)
if self.isempty(): # O(1)
print('stack is empty')
raise IndexError
return self._data[-1] # O(1)