Просмотр списка S с удалением элементов, удовлетворяющих некоторому условию.
Допустим, что требуемое условие на элемент e проверяется предикатом condition(e).
Begin
t:=S.last;
Repeat
if condition(t^.next^.info)
Then Del(S,t)
else t:=t^.next;
until t^.next=S.last;
end;
Реверсирование списка
Пусть список S1 получается реверсированием непустого списка S.
Procedure Revers(S,S1);
Begin
SetEmpty(S1);
t:=S.last^.next;
Repeat
AddToBegin(S1,t^.info);t:=t^.next;
until t=S.last
end;
Копирование списка
Пусть список S1 получается копированием списка S.
Procedure Copy(S,S1);
Begin
SetEmpty(S1);
t:=S.last^.next;
Repeat
AddToEnd(S1,t^.info);t:=t^.next;
until t=S.last
end;
Выводы
Приведенные примеры программ показывают относительную сложность программирования на разных языках программирования структур данных базового уровня - структур, используемых в системах программирования.
Вывод, который напрашивается - программирование в специализированных языках, где внутренние проблемы обработки данных решены специалистами, в большинстве случаев оправдано. Такие языки программирования разрабатываются специально для целей создания сложных систем.
Тем более понятно, что строить программы средствами, представляемыми для программирования системами компьютерной алгебры, такими, как MATHEMATICA, более удобно и менее трудоемко, чем строить свою программную систему для работы, например, с полиномами. Следует, однако, заметить, что в некоторых случаях построение своих систем аналитических вычислений для специализированных задач может иметь место. Это обычно делается с целью создания компактных программных продуктов и повышения эффективности проводимых аналитических преобразований.