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