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 }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
25 26 27 28  Наверх ↑