Связанный список Choke Python

1

У меня есть задание в Linked List, а название игры - добавлять слова из строки в связанный список с массивом, который упорядочен по алфавиту с указателями.

Однако, когда я запускаю следующий код, Python Shell застревает, и никаких результатов не возвращается. Пожалуйста помоги! Спасибо!

Я думаю, что ошибка может быть здесь, но я не уверен, почему результаты не возвращаются:/

if self.NextFree != len(self.array):
            prev = curr = self.Start
            while self.array[curr].word < nword:
                prev = curr
                curr = self.array[curr].pointer

Полный код здесь: (Извините, если его длинный им новичок! :))

class ListNode:
def __init__(self,word,pointer,count = 1):
    self.word = word
    self.pointer = pointer
    self.count = count


class LinkedList:
def __init__(self):
    self.array = []
    self.Start = -1
    self.NextFree = self.Start + 1

def Initialise(self):
    MAX = 30
    for i in range(MAX-1):
        self.array.append(ListNode('',i+1))
    self.array.append(ListNode(' ', -1))     #last node has pointer of -1

def Display(self):
    print(self.Start, self.NextFree, len(self.array),sep = ' ')
    print("Index  ", "Content  ", "Count  ", "Pointer")
    for i in range(len(self.array)):
        print('{0:<7}{1:<11}{2:<8}{3:}'.format(i, self.array[i].word, self.array[i].count, self.array[i].pointer))

def IsEmpty(self):
    return self.Start == -1

def IsFull(self):
    return self.NextFree == len(self.array)

def Update(self,nword):        #nword = newword      
    if self.IsEmpty(): 
        self.Start = 0
        self.array[0].word = nword
        self.NextFree += 1
    else:
        if self.NextFree != len(self.array):
            prev = curr = self.Start
            while self.array[curr].word < nword:
                prev = curr
                curr = self.array[curr].pointer
            if self.array[curr].word == nword:
                self.array[curr].count += 1
            else:
                self.array[prev].pointer = self.NextFree
                self.array[self.NextFree].word = nword
                self.array[self.NextFree].pointer = curr
                self.NextFree += 1
        else:
            print ("f")

def DisplayT(self):
    for i in range(len(self.array)):
        print(self.array[i].word)

l = LinkedList()
l.Initialise()
##with open("Story.txt") as file:
##    for words in file.readline().split(" "):   #story.txt is single line
##        l.Update(words)
story = "she sells seashells by the seashore the shells she sells are surely seashells so if she sells shells on the seashore i am sure she sells seashore shells peter piper picked a peck of pickled peppers did peter piper pick a peck of pickled peppers if peter piper picked a peck of pickled peppers where is the peck of pickled peppers peter piper picked"
for words in story:
    l.Update(words)
l.Display()
Теги:
python-3.x
data-structures
linked-list

1 ответ

0

Поскольку это вопрос заданий. Я постараюсь дать вам ответ!

Пожалуйста, замените это в своем коде (в функции "Обновить") и посмотрите, что распечатывает =)

while self.array[curr].word < nword:
                print(self.array[curr].word)
                print(nword)
                print('loop')
                prev = curr
                curr = self.array[curr].pointer

Попытайтесь понять, что не так с этим циклом while, исследуя этот отпечаток и комментарий здесь. К тому времени я отредактирую с лучшим ответом!

Но в основном вы попадаете в бесконечный цикл. Попытайтесь выяснить, почему!

  • 0
    Хм. Он печатает много символов 'f' и только несколько выбранных слов при повторении (например, (она, конечно, снаряды). Это выглядит так: если она - петля, - она - петля, - она - петля, - она - петля, - она, конечно, она, конечно, делает петлю, - и на дисплее отображается следующее: 0 29 30 Указатель содержимого индекса Указатель 0 she 1 28 1 the 3 27 2 оболочки 1 24 3 точно 1 22 4 точно 1 26 5 так 1 20 .. (предел символа) Так что я не уверен, где другие слова пошел лол
  • 0
    Ты на правильном пути. Распечатать другие вещи =)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню