Как инициализировать и заполнить связанный список в Eiffel? - PullRequest
0 голосов
/ 20 декабря 2018

Вот что у меня есть.

create {LINKED_LIST[INTEGER]} list.make
from
    i := 0
    list.start
until
    i = 11
loop
    list.put(i)
    i := i + 1
    list.forth
end

Отладчик указывает на строку list.put (i).Я думаю, что проблема в том, что список не инициализирован должным образом?У меня возникла небольшая проблема с выяснением того, как использовать connected_list, потому что я не могу найти подходящий учебник, чтобы помочь с ним.Как вы видите, я просто пытаюсь написать программу LINKED_LIST, которая добавляет числа [0,10] в связанный список.Не школьный проект.Просто тренируюсь перед предстоящим курсом.Пожалуйста, помогите!

1 Ответ

0 голосов
/ 20 декабря 2018

Давайте посмотрим на комментарии функций, которые используются в исходном примере:

  1. LIST.put (v: like item): заменить текущий элемент на v.
  2. LIST.start:Переместить курсор в первую позицию.
  3. LIST.forth: перейти в следующую позицию.

Вновь созданный список пуст.Поэтому нет элементов, которые можно заменить, позвонив по номеру put.Это объясняет, почему отладчик останавливается на функции put: предварительное условие функции нарушено.

Если посмотреть на интерфейсное представление класса LIST, в нем есть пункт функции Element change со следующимОсобенности:

  • append (s: SEQUENCE [G]): Добавить копию s.
  • extend (v: G): Добавить новое вхождение v.
  • fill (other: CONTAINER [G]): Заполнить как можно больше элементов other.
  • force (v: like item): добавить v в конец.
  • put (v: like item): заменить текущий элемент на v.
  • sequence_put (v: like item): добавить v в конец.
  • put_i_th (v: like item; i: INTEGER_32): поставить v в i -й позиции.
  • replace (v: G): заменить токitem by v.

Поскольку речь идет о функции добавления нового элемента в конец списка, подходят только следующие: extend, force, sequence_put. имя идиоматической функции для этого случая равно extend.

. Учитывая это, исходный цикл становится:

from
    i := 0
until
    i = 11
loop
    list.extend (i)
    i := i + 1
end
...