Связанный список Choke Python - PullRequest
0 голосов
/ 24 августа 2018

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

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

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

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()

1 Ответ

0 голосов
/ 24 августа 2018

Так как это вопрос задания.Я постараюсь помочь вам найти ответ!

Пожалуйста, замените его в своем коде (в функции обновления) и посмотрите, что печатается =)

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

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

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

...