我正在尝试将项目对(字母,频率)插入有序链接列表中。到目前为止,我能够创建已排序的链表但我无法弄清楚如何更新频率并重新排列列表,如果一封信出现两次。
到目前为止,我有:
def add(self, letter, frequency):
temp = Frequency(letter, frequency)
curr = self.head
prev = None
stop = False
while curr != None and not stop:
if curr.frequency < temp.frequency:
stop = True
else:
prev = curr
curr = curr.next
if prev == None:
temp.set_next(self.head)
self.head = temp
else:
temp.set_next(curr)
prev.set_next(temp)
f = SortedFrequencyList()
f.add('a', 3)
f.add('b', 5)
f.add('g' 1)
返回
({b: 5}, {a: 3}, {g: 1})
但如果我要做的话
f = SortedFrequencyList()
f.add('a', 3)
f.add('b', 5)
f.add('g', 1)
f.add('a', 3)
我得到了
({b: 5}, {a: 3}, {a: 3}, {g: 1})
而不是
({a: 6}, {b: 5}, {g: 1})
答案 0 :(得分:2)
我们无法在编码帮助方面做太多工作,因为您尚未发布支持代码:我们没有足够的重现问题。您还没有给我们任何编码尝试。
您需要构建更多的链接列表支持。到目前为止,您所拥有的只是一个在列表中插入新条目的方法。我建议您编写查找方法,按名称(字母)查找现有元素,然后使用更新找到它,增加频率并将其重新排序为清单。
进行更新的构建块方法是编写删除例程。从列表中找到该项目,保留副本,删除,然后添加一个更新频率的新文件。
更新的更好方法是在一个例程中执行删除和重新插入,备份列表。这表明递归内存或双向链表。更快的方法是实现某种索引树结构,以便搜索更快。
这会让你朝着正确的方向前进吗?