Я пытаюсь решить домашнюю задачу, связанную с использованием связанных списков для хранения слов в алфавитном порядке. Предполагается, что программа, которую я должен создать, имеет фиксированный размер 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