Лекція № 17
Тема: Операції над динамічними рядками
План заняття:
Пошук заданого елементу
Вилучення заданого елемента з рядка
Пошук заданого елемента.
Розглянемо процедуру шукання заданого елемента. Попередньо опишемо тип, який відображає рядок символів як динамічну структуру. Складемо логічну функцію виявлення заданого символу в заданому динамічному рядку. Передбачимо як побічний ефект логічної функції шукання елемента вказівку на ланку, яка відповідає першому входженню заданого символу.
program Form2;
type
Link=^LRiad;
LRiad=Record
Elem: Char;
Next: Link;
end;
function SeekElem(Rjad:Link; Elm:char; var Res:Link): Boolean;
var Rb: Link;
begin
SeekElem:=False;
Res:=nil;
Rb:=Rjad^.Next;
while (Res=nil) and (Rb<>nil) do
if Rb^.EIem=Elm then
begin
SeekElem:=True;
Res:=Rb;
end
else Rb:=Rb^.next;
end;
begin
end.
Параметрами функції SeekElem є: вказівна змінна Rjad, що вказує на рядок символів; Elm, що містить шуканий елемент -символ; Res - вказівна змінна-результат, вказує на ланку, що містить шуканий елемент; Rb - робоча змінна вказівного типу.
Вилучення заданого елемента з рядка.
Описуючи цю процедуру, будемо задавати елемент, який треба вилучити, за допомогою вказівки на ту ланку ланцюга, після якої є елемент, що його потрібно вилучити.
Схематично процедуру вилучення зобразимо так. Нехай вихідний ланцюг є (опишемо фрагмент) таким, як показано на рис. 1.
Рис. 1. Фрагмент динамічного рядка.
Вилучення елемента В треба організувати так, щоб вказівка з ланки А була на ланку С. оминаючи ланку з елементом В (рис. 2).
Рис. 2. Вилучення ланки динамічного рядка.
Описуючи процедуру вилучення заданого елемента з рядка, передбачимо знищення всієї ланки, що містить цей елемент:
program Form3;
type
Link=^LRiad;
LRiad=record
Elem: Char;
Next: Link;
end;
procedure DelElem(Lanka: Link);
var Rb: Link;
begin
Rb:=Lanka^.Next;
Lanka^.Next:=Lanka^.Next^.Next;
dispose(Rb);
end;
begin
end.
Знищуємо ланку, що містить шуканий елемент, для економії пам'яті.