Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.44 Mб
Скачать

1 Дані динамічної структури

До даних динамічної структури належать файли, незв’язані та зв’язані динамічні списки.

Файли в даній класифікації віднесено саме до динамічних структур даних тому, що хоча видалення та вставка елементів в середину файлу не припустимі, проте довжина файлу в процесі роботи програми може змінюватись – збільшуватись або зменшуватись до нуля, – а це вже динамічна властивість файлу як структури даних. Класифікацію даних динамічної структури показано на рисунку 1.

Рисунок 1

2 Вказівник

Для роботи з динамічними змінними використовується тип даних – вказівник. Якщо ім'я статичної змінної задає адреса даних в оперативній пам'яті, то вказівник на динамічну змінну – тільки тип даних, а не його розміщення в пам'яті. Тип даних вказівник описується за допомогою символу ^ у розділі типів у такий спосіб:

type<назва типу=^<базовий тип>;

Конкретні вказівники на динамічні змінні оголошуються, як звичайно, у розділі змінних:

var<список вказівників на змінні>:<ім'я типу>;

Розглянемо опис типів вказівників і оголошень вказівників на динамічні змінні:

type

UkazNaCel=^integer;

UkazNaMasiv=^array [1..100] of real;

UkazNaZapis=^Zapis;

var

C1, c2:UkazNaCel;

Mas1, mas2:UkazNaMasiv;

Zap1, zap2:UkazNaZapis;

На етапі компіляції пам'ять для масивів n записів відразу не надається (але сам вказівник займає в пам'яті 4 байти). Пам'ять для даних, про які говорить вказівник, надається на етапі виконання програми за допомогою процедури new:

new(<вказівник на змінну>);

Тільки на цьому етапі створилася динамічна змінна, ім'я якої має вигляд:

<вказівник на змінну>^.

Розрізняють операції з вказівником на динамічну змінну й операції з самою динамічною змінною.

З динамічною змінною можна виконувати операції, які характерні для даних відповідного базового типу.

Для вказівників застосовують дві операції переадресації:

1) <вказівник 1>:=<вказівник 2>;

2) <вказівник>:=nil;

а також процедури new і dispose.

В результаті виконання першої команди переадресації вказівник 1 буде містити адресу тієї ж ділянки пам'яті, що і вказівники 2, тобто вони вказують на ті самі дані.

В результаті виконання другої команди присвоєння, вказівник не вказує на конкретні дані (він стає вільним – nil).

Після обробки динамічної змінної пам'ять можна звільнити за допомогою процедури

dispose(<вказівник на динамічну змінну>).

3 Списки

Список – це кінцева сукупність даних одного типу, між якими налагоджено зв'язок. Елемент (односпрямованого) списку складається із двох частин; самих даних і вказівника на наступний елемент списку. Для опису такої структури використовують тип даних запис і тип даних вказівник у такий спосіб:

type

<ім'я елемента списку>=^<запис>;

<запис>=record

<поле даних>:<тип даних>;

<поле вказівник>:<ім'я елемента списку>;

end;

Приклад:

type

Elspiska=^Reka;

Reka=record

Name:string[ll];

Dlina:integer;

P1:longint;

Next:Elspiska;

end;

var

element, first, pred, nov: Elspiska;

Тут element – вказівник на поточний елемент списку, element – динамічна змінна типу запис, element^.dlina – динамічна змінна типу integer, що зберігає довжину ріки, а element^.next – вказівник на наступний елемент списку. Тобто element^.next^.dlina – це довжина наступної ріки, а element^.next^.next – вказівник ще на наступну ріку і так далі.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]