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

Представлення рядкових даних

У сучасних мовах програмування та інформаційних системах важливу роль відіграють рядкові дані. Рядком називається кінцева лінійно упорядкована послідовність простих даних символьного типу, яку розглядають як єдине ціле. Таке визначення рядка в загальному випадку припускає, що задана множина різних символів, або літер і набір правил, що дозволяє створювати бажані ланцюжки символів [15, 16].

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

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

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

Рис. 5.9 - Приклад векторного представлення фізичної структури рядка з використанням дескриптора

В методі граничних маркерів границі кожного рядка задаються в явному виді з використанням спеціального маркера, який , звичайно, не повинен бути елементом ніякого рядка. Приклад представлення рядка з маркером приведений на рис.5.10 , на якому в якості маркера використано спеціальний символ #.

Рис. 5.10 - Приклад векторного представлення рядка з використанням граничного маркеру

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

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

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

Рис. 5.11 - Приклад представлення рядка, який розділений на групи символів , у вигляді зв'язного списку з елементами одного і того ж розміру

Якщо в зв'язному списку використовуються елементи різного розміру(рис.5.12), то перед адресним вказівником необхідно розміщувати спеціальний символ, який вказує, що наступний елемент є вказівником. Зрозуміло, що такий символ не повинен входити до алфавіту, який використовується для формування рядків.

Рис. 5.12 - Приклад представлення рядка, який розділений на групи символів , у вигляді зв'язного списку з елементами різного розміру

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