Удалить из списка заданный элемент, добавить в конец новый элемент, напечатать список в обратном порядке - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Прошу помощи! Пусть дан циклический двунаправленный список, с информативным полем - целое число: а) удалить из списка первый отрицательный отрицательный элемент. б) добавить в конец списка новый элемент. в) печать элементы в обратном порядке.

Решение задачи: «Удалить из списка заданный элемент, добавить в конец новый элемент, напечатать список в обратном порядке»

textual
Листинг программы
type
  tList = class
    Data : Integer;
    Pred, Next : tList;
    
    constructor (N : Integer);
    begin
      Data := N;
      Pred := nil; Next := nil;
    end;
  end;
 
procedure OutList(List : tList);
begin
  var Cur := List;
  repeat
    Print(Cur.Data);
    Cur := Cur.Next;
  until Cur = List;
  WriteLn;
end;
  
begin
  // Создаём список из 20 элементов
  Randomize;
  var List := New tList(Random(-10,+10));
  var Last := List;
  for var N := 2 to 20 do
    begin
      Last.Next := New tList(Random(-1,+10));
      Last.Next.Pred := Last;
      Last := Last.Next;
    end;
  List.Pred := Last;
  Last.Next := List;
  WriteLn('Создан список');
  OutList(List);
 
  // Удалить первый отрицательный (список не может быть пустым)
  var Cur := List;
  while (Cur.Data >= 0) and (Cur.Next <> List) do
    Cur := Cur.Next;
    
  if Cur.Data >= 0 then
    WriteLn('В списке нет отрицательных!')
  else
    begin
      Cur.Pred.Next := Cur.Next;
      Cur.Next.Pred := Cur.Pred;
      if Cur = List then
        List := List.Next;
      WriteLn('Удалён первый отрицательный');
      OutList(List);
    end;
    
  // Добавить новый в конец
  var Add := New tList(ReadLnInteger('Введите число:'));
  Add.Pred := List.Pred;
  List.Pred.Next := Add;
  List.Pred := Add;
  Add.Next := List;
  WriteLn('Добавлен новый в конец');
  OutList(List);
  
  // Обратный порядок
  WriteLn('Список в обратном порядке:');
  var Tmp := List.Pred;
  repeat
    Print(Tmp.Data);
    Tmp := Tmp.Pred;
  until Tmp = List.Pred;
  WriteLn;
end.

Объяснение кода листинга программы

  1. Объявлена структура данных tList, представляющая собой связный список.
  2. В процедуре OutList список выводится на экран по порядку.
  3. Создаётся список из 20 элементов с помощью оператора New и цикла for.
  4. Первый отрицательный элемент (если он есть) удаляется с помощью цикла while и рекурсии (если список не может быть пустым).
  5. В цикле while запрашивается ввод нового элемента и добавляется в конец списка.
  6. Список выводится на экран в обратном порядке с помощью цикла repeat и рекурсии.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы