Как инициализировать и заполнить связанный список в 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 ответ

Решение

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

  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): Заменить текущий элемент на v,

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

Принимая это во внимание, оригинальный цикл становится:

from
    i := 0
until
    i = 11
loop
    list.extend (i)
    i := i + 1
end
Другие вопросы по тегам