2016-02-05 69 views
0

我想插入项目对(字母,频率)到一个有序的链接列表。到目前为止,我能够创建排序的链表,但我无法弄清楚如何更新频率并重新排列列表,如果一封信得到两次。插入到有序的链接列表Python和总和重复

到目前为止,我有:

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

关于总和和重排,你试过了什么? – ppperry

+0

你有同样的项目,这个?http://stackoverflow.com/questions/7453939/adding-to-a-linked-list – FBruynbroeck

+0

是的。这是确切的一个 – Mikey

回答

2

我们不能做编码的帮助,因为你还没有发布您的支持代码的方式很多:我们没有足够的重现该问题。你也没有给我们任何工作的编码尝试。

您需要建立更多的链接列表支持。到目前为止,您所拥有的只是一个将新条目插入列表的方法。我建议您编写一个查找方法,该方法通过名称(字母)查找现有元素,并找到更新,这样可以找到它,增加频率并将其重新排列到列表中。

构建块更新的方法是编写删除例程。找到该项目,保留副本,删除它从列表中,然后添加一个新的频率更新。

更新更好的方法是在一个例程中执行删除和重新插入,备份列表。这表明了递归内存或双向链表。更快的方法是实现某种索引树结构,以便搜索速度更快。

这是否让你朝着正确的方向前进?

+0

是的。这真是太好了。谢谢:) – Mikey

+0

你会介意快速跳入聊天室来进一步讨论吗?我有基本的实施,我只需要一只手巩固它 – Mikey

+0

当然...让我知道如何到达那里。 – Prune