Работа со списком - PascalABC.NET
Формулировка задачи:
Дан список состоящий и последовательности a(1),a(2),...,a(n). Определить максимальное
количество подряд идущих положительных элементов этого списка, не прерываемых нулями,
отрицательными элементами. Вывести на экран указанную последовательность.
Вот что получилось у меня, помогите доделать:
Решение задачи: «Работа со списком»
textual
Листинг программы
type nComponent = ^Component; Component = Record i: integer; pred, next: nComponent; end; var head, tail: nComponent; i: integer; procedure push_back(var head: nComponent; x: integer); var i: nComponent; begin if head = nil then begin new(head); head^.i := x; end else begin i := head; while i^.next <> nil do i := i^.next; new(i^.next); i^.next^.i := x; i^.next^.pred := i; end; end; procedure getList(head: nComponent; var tail: nComponent); var i, maxi: nComponent; l, maxl: integer; begin l := 0; maxl := 0; i := head; while head <> nil do begin if head^.i > 0 then inc(l) else begin if maxl < l then begin maxi := i; maxl := l; end; l := 0; i := head^.next; end; head := head^.next; end; for l := 1 to maxl do begin push_back(tail, maxi^.i); maxi := maxi^.next; end; end; procedure Write(head: nComponent); begin while head <> nil do begin write(head^.i, ' '); head := head^.next; end; writeln; end; begin for i := 1 to 20 do push_back(head, random(-10, 10)); Write(head); getList(head, tail); Write(tail); end.
Объяснение кода листинга программы
В данном коде реализованы основные операции со связанным списком, а именно: добавление элемента в конец списка (метод push_back), получение списка (метод getList) и вывод списка на экран (метод Write).
- Структура связанного списка определена в типе nComponent и представляет собой вершину списка, содержащую ссылку на следующий элемент списка (next) и предыдущий элемент списка (pred).
- Переменные head и tail указывают на начало и конец списка соответственно.
- Метод push_back добавляет элемент x в конец списка. Если список пуст, то создается новый элемент и он становится началом списка. В противном случае ищется последний элемент списка (используя ссылку next), и новый элемент добавляется после него. При этом новый элемент содержит значение x, а ссылку на него (next) и ссылку на предыдущий элемент (pred) инициализируют соответственно.
- Метод getList проходит по всем элементам списка, начиная с головы, и суммирует положительные значения элементов. Если список пуст, то ничего не делает. Если в списке есть отрицательные значения, то считает количество таких значений и добавляет их в конец списка, начиная с нового элемента (с нулевым отрицательным значением).
- Метод Write выводит значения элементов списка, разделяя их пробелами.
- В основном блоке кода создается список из 20 случайных чисел от -10 до 10. Затем список выводится на экран, и вызывается метод getList, который получает список и добавляет в его конец отрицательные значения. После этого список снова выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д