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

Pascal ABC. Двунаправленный список. Удалить следующий элемент после нуля Создать двунаправленный связный список, содержащий 11 целых чисел из интервала [8, -5]. Вывести список на экран. Описать процедуру, которая удаляет элемент после нуля. Вывести новый список на экран. Преподаватель сказал, что проблема в том, что создается список как двунаправленный , но обрабатывается не как двунаправленный. Возникала так же проблема в том, что если ноль первый и последний элемент, то программа выдает ошибку. Прошу помогите
Гость
Ответ(ы) на вопрос:
Гость
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.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы