Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OРГАНІЗАЦІЯ БАЗ ДАНИХ І ЗНАНЬ-ЛЕКЦІЯ.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
815.1 Кб
Скачать

Зв'язаний розподіл пам'яті

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

Зв'язаний розподіл - більш складний, але і більш гнучкий спосіб збереження лінійного списку. Кожний вузол містить покажчик на наступний вузол списку, тобто адреса наступного вузла списку (рис.5.2)

Рис. 5.2.а Приклад зв'язного лінійного списка

Рис.5.2.б Приклад видалення і додавання елементів списка

При зв'язаному розподілі не потрібно, щоб список зберігався в послідовних елементах пам'яті. Наявність адрес зв'язку в даному способі збереження дозволяє розміщати вузли списку довільно в будь-якій вільній ділянці пам'яті. При цьому лінійна структура списку забезпечується покажчиками.

Структура лінійного списку, подана за допомогою зв'язаного розподілу, називається також ланцюговою структурою або ланцюгом.

Для досягнення більшої гнучкості при роботі з лінійними списками в кожний вузол X[i] вводиться два покажчики. Один із покажчиків реалізує зв'язок вузла, що розглядається з вузлом X[i+1], а інший - із вузлом X[i-1] (рис.5.3).

Рис.5.3 Приклад двонаправленого лінійного списка

Для зв'язаних однонаправленого або двонаправленого списків у ряді випадків доцільно створити спеціальний вузол списку - голову списку - і берегти його в спеціальному фіксованому осередку пам'яті машини за адресою b.

У цей вузол поміщається покажчик на перший елемент списку. У голові списку можна берегти різноманітну інформацію, необхідну при обробці списку (ідентифікатор списку, кількість вузлів у списку і т.п.). Важливим різновидом представлення в пам'яті лінійного списку є циклічний список.Циклічно зв'язаний лінійний список характеризується тією особливістю, що зв'язок від останнього вузла йде до першого вузла списку (рис.5.4).

Рис.5.4 Приклад однонаправленого лінійного списка

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

Поряд з однонаправленими використовуються двонаправлені циклічні списки (рис.5.5).

Рис. 5.5 Приклад двонаправленого циклічного списка

У ряді випадків зручно використовувати циклічний список із покажчиками на голову списку з кожного вузла (рис.5.6), за винятком останнього вузла - оскільки використовується прямий покажчик на голову списку.

Рис. 5.6 Приклад двонаправленого циклічного списка із вказівниками на голову списка

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

Покажчики мають наступні можливі шляхи використання:

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

  • з'єднують разом зв'язані за змістом дані;

  • відображають орієнтовані ребра в деревовидних або мережних структурах;

  • зв'язують пам'ять на дисках і організують ланцюжки дискових сторінок і т.п.

Застосування багатозв'язних списків - це основний механізм, що дозволяє розроблювачам СУБД реалізувати складні нелінійні структури. Проте варто уникати занадто великої кількості покажчиків, оскільки на них витрачається пам'ять і час на переходи по покажчиках. Крім того, при великій кількості покажчиків основна структура втрачає чіткість і можуть виникнути зв'язки, що у відображеній структурі відсутні.

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