• Pascal ABC. Двунаправленный список. Удалить следующий элемент после нуля
    Создать двунаправленный связный список, содержащий 11 целых чисел из интервала [8, -5]. Вывести список на экран.
    Описать процедуру, которая удаляет элемент после нуля. Вывести новый список на экран.
    Преподаватель сказал, что проблема в том, что создается список как двунаправленный , но обрабатывается не как двунаправленный. Возникала так же проблема в том, что если ноль первый и последний элемент, то программа выдает ошибку. Прошу помогите

Ответы 5

  • Извини за небольшой рефакторинг, но так было легче разобраться в написаном.
    • Автор:

      pudgeqgeb
    • 6 лет назад
    • 0
  • Процедуру Delete переписывала полностью, потому что вообще не поняла что там делала написаная, она впринцепе не могла работать
    • Автор:

      vernon
    • 6 лет назад
    • 0
  • И вообще я за обьектно ориентированное программирование а то в этих next previous запутаться только так
    • Автор:

      studuufk
    • 6 лет назад
    • 0
  • Спасибо вам огромное) вы мне очень помогли)
    • Автор:

      dayami
    • 6 лет назад
    • 0
  • program spiski;type        ListElement = ^TListElement;    TListElement = record         Data: integer;          Next, Previous: ListElement;       end;var    first, current, last: ListElement;    i: integer;procedure Delete(var element: ListElement);var    x: ListElement;begin    while element <> nil do     begin        if (element^.Data = 0) and (element^.Next <> nil) then begin            x := element^.Next; {следующий элемент который надо удалить}            {сшиваем дырку которая образуется после удаления х}            element^.Next := x^.Next;            if (x^.Next <> nil) then                x^.Next^.Previous := element;            Dispose(x);        end;        element := element^.Next;    end;end;procedure Print(first: ListElement);begin    if first = nil then    begin        writeln('Список пуст.');        exit;    end;        while first <> nil do    begin        Write(first^.Data, ' ');        first := first^.Next    end;    writeln;end;begin    for i := 1 to 11 do     begin        if first = nil then         begin            new(first);             first^.Next := nil;             first^.Previous := nil;             last := first;         end        else         begin            new(last^.Next);             last^.Next^.Previous := last;             last := last^.Next;            last^.Next := nil;         end;        last^.Data := random(8 + 5) - 5;    end;        current := first;        Print(first);    Delete(current);    Print(first);end.
    • Автор:

      emmasmith
    • 6 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years