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

3.3.4. Напівстатичні структури даних

Властивості напівстатичних структур даних:

  • вони мають змінну довжину і прості способи її зміни;

  • зміна довжини структури відбувається у визначених межах, не перевищуючи деякого максимального (граничного) значення.

З логічної точки зору напістатична структура представляє собою послідовність даних, зв’язану відношеннями лінійного списку (див. розділ 3.3.5). Доступ до елемента може здійснюватись по його порядковому номеру.

Фізично напістатичні структури представляються чи у вигляді вектора, тобто розміщуються в неперервній області пам’яті, чи у вигляді однозв’язного списку, де кожен наступний елемент адресується вказівником, який знаходиться в поточному елементі.

До напівстатичних структур належать стеки, черги, деки, строки.

3.3.5. Динамічні структури даних

Динамічні структури не мають постійного розміру, тому пам’ять під окремі елементи таких структур виділяється в момент, коли вони створюються в процесі виконання програми, а не під час трансляції. Коли в елементі структури більше немає необхідності, пам’ять звільняється (елемент «руйнується»).

Оскільки елементи динамічної структури розміщуються в пам’яті не по порядку і навіть не в одній області, адреса елементу такої структури не може бути обчислена з адреси початкового чи попереднього елемента. Зв’язок між елементами динамічної структури встановлюється через вказівники, які містять адреси елементів пам’яті. Таке представлення даних в пам’яті називається зв’язним.

Таким чином, крім інформаційних полів, заради який створюється структура і які є видимими для кінцевого користувача ПЗ, динамічні структури містять поля для зв’язку з іншими елементами, видимі для програміста – розробника ПЗ.

З допомогою зв’язного представлення даних забезпечується висока мінливість структури. Переваги динамічних структур:

  • розмір структури обмежується тільки об’ємом пам’яті комп’ютера;

  • при зміні логічної послідовності елементів структури (видалення, додавання елемента, зміна порядку розміщення елементів) вимагається тільки корекція вказівників.

З іншого боку, такі структури володіють ряд недоліків:

  • робота з вказівниками вимагає високої кваліфікації програміста;

  • на вказівники витрачається додаткова пам’ять;

  • додаткова трата часу на доступ до елементів зв’язної структури.

Зв’язні лінійні списки

Лінійні зв’язні списки є найпростішими динамічними структурами даних. Вони є впорядкованими множинами, які містять змінне число елементів, на які не накладаються обмеження по довжині.

На рис. 3.10 приведена структура однозв’язного списку. Тут поле INF – інформаційне поле, яке містить дані, NEXT – вказівник на наступний елемент списку. Голова списку – вказівник на початок списку. Вказівник на наступний елемент останнього елемента містить значення nil, це є ознакою останнього елемента.

Двозв’язні списки

Обробка однозв’язного списку не завжди зручна, так як неможливо рухатись в протилежну сторону. Таку можливість забезпечує двозв’язний список, кожен елемент якого містить два вказівника: на наступний і попередній елементи. Структура лінійного двозв’язного списку на рис 3.11, де поле NEXT – вказівник на наступний елемент, PREV – вказівник на попередній елемент. Перший і останній елементи такого списку містять nil у вказівнику на попередній і наступний елементи відповідно.

Для зручності обробки списку додають ще один особливий елемент – вказівник кінця списку. Наявність двох вказівників в кожному елементі ускладнює список і призводить до додаткових затрат пам’яті, але в той же час забезпечує більш ефективне виконання деяких операцій над списком.

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