Удалить из списка заданный элемент, добавить в конец новый элемент, напечатать список в обратном порядке - 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.
Объяснение кода листинга программы
- Объявлена структура данных tList, представляющая собой связный список.
- В процедуре OutList список выводится на экран по порядку.
- Создаётся список из 20 элементов с помощью оператора New и цикла for.
- Первый отрицательный элемент (если он есть) удаляется с помощью цикла while и рекурсии (если список не может быть пустым).
- В цикле while запрашивается ввод нового элемента и добавляется в конец списка.
- Список выводится на экран в обратном порядке с помощью цикла repeat и рекурсии.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д