Python: обновление указателей в связанном списке для хранения слов в алфавитном порядке - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь решить домашнюю задачу, связанную с использованием связанных списков для хранения слов в алфавитном порядке. Предполагается, что программа, которую я должен создать, имеет фиксированный размер 20 узлов, начиная с индекса 1, состоящий из ListNodes с атрибутами Word (само слово), Count (представляющий количество вхождений) и Pointer (указывающий на следующий узел в алфавитном порядке). После добавления нового слова программа должна сначала проверить, находится ли слово уже в связанном списке. Если нет, то он проверяет, принадлежит ли слово в начале связанного списка, в противном случае вставляя слово в соответствующую позицию.

Я реализовал классы ListNode и LinkedList. Все методы работают правильно, кроме метода LinkedList Update. Метод Update отлично работает при вставке в начале. Единственная проблема, с которой я сталкиваюсь, связана с корректным обновлением указателей для каждого добавленного слова.

Вот мой метод обновления:

def Update(self,newdataitem):
    if self.IsFull(): #unable to insert
        return 0
    elif self.IsEmpty(): #empty list
        self.Node[1].Word = newdataitem
        self.Node[1].Count = 1
        self.Node[1].Pointer = -1
        self.NextFree+=1
    else: #first update listnode, then update pointers
        for i in range(1,self.NextFree): #check if in list already
            if self.Node[i].Word == newdataitem:
                self.Node[i].Count+=1
                return newdataitem #exit, update complete

    self.Node[self.NextFree].Word = newdataitem #update list contents
    self.Node[self.NextFree].Count = 1

    if self.Node[self.Start].Word<newdataitem: #inserting in the middle
        probe = self.Start
        while self.Node[probe].Word<newdataitem:
            probe = self.Node[probe].Pointer
        self.Node[probe].Pointer = probe
    else: #inserting at the start
        prev = self.Start
        self.Start = self.NextFree
        self.Node[self.Start].Pointer = prev
    self.NextFree+=1

После добавления слов "mary", "had", "a", "little", "lamb" в том порядке, я ожидаю получить такой вывод: Узел в индексе 1 содержит слово mary, которое встречается 1 раз. Указывает на -1 Узел в индексе 2 содержит слово, которое встречается 1 раз. Указывает на 5 Узел в индексе 3 содержит слово a, которое встречается 1 раз. Указывает на 2 Узел в индексе 4 содержит слово little, которое встречается 1 раз. Указывает на 1 Узел в индексе 5 содержит слово lamb, которое встречается 1 раз. Очки до 4

Однако вместо этого я получаю этот вывод: Узел в индексе 1 содержит слово mary, которое встречается 1 раз. Указывает на 1 Узел в индексе 2 содержит слово, которое встречается 1 раз. Указывает на 1 Узел в индексе 3 содержит слово a, которое встречается 1 раз. Указывает на 2 Узел в индексе 4 содержит слово little, которое встречается 1 раз. Указывает на 5 Узел в индексе 5 содержит слово lamb, которое встречается 1 раз. Очки до 6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...