Вставить новый элемент в список перед каждым вхождением заданного элемента - Free Pascal
Формулировка задачи:
Написать программу, содержащую процедуру, которая вставляет новый элемент перед каждым вхождением заданного элемента.
Буду благодарен!Спасибо!!
Решение задачи: «Вставить новый элемент в список перед каждым вхождением заданного элемента»
textual
Листинг программы
procedure push(value, new_value : integer; var head, tail : pnode); function sub(var pt : pnode) : pnode; begin new(result); result^.data := new_value; result^.next := pt; pt := result; end; var p, p_new : pnode; begin p := head; if head^.data = value then sub(head); while p^.next <> nil do begin if p^.next^.data = value then p := sub(p^.next); p := p^.next; end; end;
Объяснение кода листинга программы
В данном коде реализован алгоритм вставки нового элемента перед каждым вхождением заданного элемента в список. Список представляет собой связный список, состоящий из узлов, каждый из которых содержит данные и ссылку на следующий узел.
- Создана процедура
push
, которая принимает три аргумента: значение и новый_значение (целые числа) и две переменные-указатели на голову и хвост списка. - Внутри процедуры определена вспомогательная функция
sub
, которая создает новый узел, присваивает ему новое значение и вставляет его перед указанным узлом. - Переменные
p
иp_new
объявлены как указатели на узлы списка. - В начале процедуры
p
устанавливается вhead
, то есть указывает на первый узел списка. - Если данные в первом узле совпадают с заданным значением, то вызывается функция
sub
для вставки нового узла перед ним. - Затем в цикле проходится по всем узлам списка, пока не будет достигнуто последнее.
- Если данные в следующем узле совпадают с заданным значением, то вызывается функция
sub
для вставки нового узла перед ним. - После прохода по всем узлам списка,
p
указывает на последний узел списка. - Если список пустой, то создается новый узел с заданным значением и он становится и головой, и хвостом списка.
- Если в списке уже есть узлы, то новый узел с заданным значением вставляется перед последним узлом списка.
- В конце процедуры возвращается
nil
, чтобы указать на конец списка. Таким образом, после вызова процедурыpush
с заданным значением и новым значением, в списке будет вставлен новый узел с новым значением перед каждым вхождением заданного значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д