Удалить из списка заданный элемент, добавить в конец новый элемент, напечатать список в обратном порядке - 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 и рекурсии.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д