我对此感到困惑Stack
执行(ADT)。主要通过添加和删除选项,也可以使用空字典,而不是空列表。
我的问题是:
通过使用空列表,删除和添加实现是可以理解的:
class Stack:
def __init__(self):
self.elements = []
def add(self, item):
self.elements.append(item)
def remove(self):
self.elements.pop()
然而,我把这样的实现混淆为一个空字典:
class D:
def __init__(self):
self.elements = {}
self.index = 0 # since only adding one element per add method
# better to use indexing for key1, then key2
def add(self, item):
# For dictionary better to use
# self.elements[item] = new_item
# but in stack we adding one element
self.elements[item] = self.index
self.index = item
def remove(self):
self.elements.pop(self.index)
对于这段代码,我想在添加两个元素之后创建新字典:
例如,我们add(7)
,add(8)
我们得到{7:8}
。但是,相反,在添加了更多的元素之后,比如add(9)
和add(10)
,我有{7:8}
,{8:9}
,{9:10}
。
我该怎么处理呢?我的删除方法很好,但是添加似乎不太好。
发布于 2018-06-07 09:27:41
问题在于你设置索引的方式。添加新项时,将字典键设置为新值,而字典值设置为前一个值。所以你才会有这个结果。这将不像预期的那样工作,也不会让添加相同的值,因为字典键是唯一的。
字典并不是实现堆栈的真正合适的数据结构,除非您想要使键被递增为数值索引。但在这种情况下,使用列表更容易。
这里有可能(虽然不是很实际)实现:
class D:
def __init__(self):
self.elements = {}
self.index = 0
def add(self, item):
self.elements[self.index] = item
self.index += 1
def remove(self):
if not self.index:
raise Exception('Stack is empty')
del self.elements[self.index - 1]
self.index -= 1
https://stackoverflow.com/questions/-100004779
复制相似问题