Как инициализировать и заполнить связанный список в Eiffel?
Вот что у меня так далеко.
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 ответ
Давайте посмотрим на комментарии функций, которые используются в исходном примере:
LIST.put (v: like item)
: Заменить текущий элемент наv
,LIST.start
: Переместить курсор в первую позицию.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)
: Заменить текущий элемент наv
,
Поскольку речь идет о функции добавления нового элемента в конец списка, подходят только следующие: extend
, force
, sequence_put
, Имя идиоматической функции для этого случая extend
,
Принимая это во внимание, оригинальный цикл становится:
from
i := 0
until
i = 11
loop
list.extend (i)
i := i + 1
end