2. Основні процедури опрацювання списку.
При описі процедур приймемо наступні допущення :
1. У програмі діють такі описи
type
inf =... {тут необхідно зазначити тип елементів списку}
spisok = ^chain;
chain = record
next:spisok;
elem:inf
end;
data=file of inf; {дані для формування списку будуть уводитися з файла }
var
x:inf;
f:data;
s:spisok;
2. Для виводу елементів списку на екран використовується процедура write_inf(x: inf) , яку необхідно описати відповідно до типу даних inf.
Створення списку.
Для створення списку застосуємо наведений вище алгоритм у припущенні, що список має початковий елемент, що не містить даних. Дані послідовно зчитуються з файлу, після чого створюється новий елемент списку, до якого і заносяться дані. Останній елемент списку в полі посилання буде мати значення порожнього посилання. Створення ланцюгів списку продовжується, поки файл непорожній.
procedure create(var s:spisok); { створення списку }
var
p:spisok;
x:inf;
begin
assign(f,'data.dat');
reset(f); {відкриваємо файл даних}
new(s); { створюємо список,}
p:=s;
p^.next:=nil; { перший елемент - вказівний, даних не має}
while not eof(f) do
begin
new(p^.next); { створюємо наступний елемент списку }
p:=p^.next; { переводимо вказівник p на цей елемент}
read(f,x); { читаємо дані з файла }
p^.elem:=x; { записуємо дані в створений елемент}
p^.next:=nil; { посилання на наступний за ним - порожнє}
end;
close(f)
end; { create }
Друк списку.
Послідовно перебираються елементи списку до знаходження порожнього посилання. Якщо посилання не порожнє, друкується елемент списку і здійснюється перехід до наступного елементу.
procedure print(s:spisok); { виведення списку на екран}
var
p:spisok;
begin
p:=s;
p:=p^.next; { пропускаємо заголовний елемент }
while p<>nil do
begin
write_inf(x);
p:=p^.next;
end;
end; { print }
Пошук елемента списку з заданими властивостями.
Процедура організована таким чином, що пошук можна проводити з будь-якого елементу, що дозволяє використовувати її в циклі.
procedure search( x:inf ; var p:spisok);
{ пошук елемента x у списку; на нього буде вказувати змінна p }
begin
p:=p^.next; { переходимо до наступного елемента }
while (p<>nil) and (p^.elem<>x) do
p:=p^.next;
end; { search }
Вставка елементу в список.
Вставка буде здійснюватись після елементу, на який вказує змінна р. Для вставки потрібно створити новий елемент і змінити посилання попереднього елементу.
procedure insert(x:inf; var p:spisok);
{ вставка елементу в список }
var q:spisok;
{
p - указує на елемент, після якого вставляємо
q - для створення нового елемента
}
begin
new(q);
q^.elem:=x;
q^.next:=p^.next;
p^.next:=q;
end; { insert }
Видалення елементу зі списку
Зі списку буде видалчтись елемент, що слідує за тим, на який вказує p (тобто елемента, на який указує p^.next).
procedure delete(x:inf; var p:spisok);
{ видалення елемента }
var q:spisok;
begin
{ шукаємо зазначений елемент }
while(p^.next<>nil) and (p^.next^.elem.<>x) do p:=p^.next;
{ якщо елемент знайдений, видаляємо його }
if p^.next<> nil then
begin
q:=p^.next;
p^.next:=p^.next^.next;
dispose(q);
end
end;{ delete }
25 26 27 28 Наверх ↑