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

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

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

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

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

textual
Листинг программы
  1. type
  2.   tList = class
  3.     Data : Integer;
  4.     Pred, Next : tList;
  5.    
  6.     constructor (N : Integer);
  7.     begin
  8.       Data := N;
  9.       Pred := nil; Next := nil;
  10.     end;
  11.   end;
  12.  
  13. procedure OutList(List : tList);
  14. begin
  15.   var Cur := List;
  16.   repeat
  17.     Print(Cur.Data);
  18.     Cur := Cur.Next;
  19.   until Cur = List;
  20.   WriteLn;
  21. end;
  22.  
  23. begin
  24.   // Создаём список из 20 элементов
  25.   Randomize;
  26.   var List := New tList(Random(-10,+10));
  27.   var Last := List;
  28.   for var N := 2 to 20 do
  29.     begin
  30.       Last.Next := New tList(Random(-1,+10));
  31.       Last.Next.Pred := Last;
  32.       Last := Last.Next;
  33.     end;
  34.   List.Pred := Last;
  35.   Last.Next := List;
  36.   WriteLn('Создан список');
  37.   OutList(List);
  38.  
  39.   // Удалить первый отрицательный (список не может быть пустым)
  40.   var Cur := List;
  41.   while (Cur.Data >= 0) and (Cur.Next <> List) do
  42.     Cur := Cur.Next;
  43.    
  44.   if Cur.Data >= 0 then
  45.     WriteLn('В списке нет отрицательных!')
  46.   else
  47.     begin
  48.       Cur.Pred.Next := Cur.Next;
  49.       Cur.Next.Pred := Cur.Pred;
  50.       if Cur = List then
  51.         List := List.Next;
  52.       WriteLn('Удалён первый отрицательный');
  53.       OutList(List);
  54.     end;
  55.    
  56.   // Добавить новый в конец
  57.   var Add := New tList(ReadLnInteger('Введите число:'));
  58.   Add.Pred := List.Pred;
  59.   List.Pred.Next := Add;
  60.   List.Pred := Add;
  61.   Add.Next := List;
  62.   WriteLn('Добавлен новый в конец');
  63.   OutList(List);
  64.  
  65.   // Обратный порядок
  66.   WriteLn('Список в обратном порядке:');
  67.   var Tmp := List.Pred;
  68.   repeat
  69.     Print(Tmp.Data);
  70.     Tmp := Tmp.Pred;
  71.   until Tmp = List.Pred;
  72.   WriteLn;
  73. end.

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

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

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


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

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

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы