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

12.5. Задачі і вправи

  1. Записати за допомогою конструктора множину Х, яка складена з латинських букв a, b, c, d, i, j, k, x, y, z.

  2. Записати за допомогою конструктора множину з трьох основних кольорів множинного типу Paint.

  3. Записати за допомогою конструктора множину цілих розв’язків квадратної нерівності x^2 +p*x + q < 0 у припущенні, що корні відповідного квадратного рівняння лежать в інтервалі [0; 255].

  4. Записати за допомогою конструктора множину простих чисел-близнюків з інтервалу 1..30.

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

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

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

Приклад 13.1. Уявимо собі, що наша програма повинна деяким чином обробляти послідовність символів, яка представляє математичну формулу (арифметичний вираз). Якщо обробка пов’язана з обчисленням значення цієї формули, то представлення формули в виді рядка символів неприродно. Зручніше представити, наприклад, формулу f = (a + b)*(a - c) у виді наступної структури:

Рис. 13.1. Представлення формули динамічною структурою.

Тепер обчислення значення f можна організувати “знизу-вгору”, підставляючи результати операції замість знаків операцій. Легко бачити, що такий метод обчислення є універсальним.

Приклад 13.2. Нам треба обробити набір відомостей про людей (прізвище - F, вік - А), причому обробка включає процедури включення людини у список, вилучення зі списку, виведення списку як у алфавітному порядку по прізвищам, так у порядку зменшення віку. Дані для цієї задачі зручно уявити у виді структури:

Рис. 13.2. Представлення набору даних динамічною структурою.

в якій Fi – прізвища, Ai – вік людей, суцільні стрілки вказують на людей що йдуть в алфавітному порядку., а пунктирні – на людей, що йдуть за ростом.

Тоді включення – вилучення елементів можна робити переорієнтацією стрілок, а порядок виведення легко отримати, слідуючи по відповідним стрілкам. Нижче ми розглянемо і інші приклади задач, у програмуванні яких зручно використовувати динамічні структури.

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

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

Інформаційні поля Поля покажчиків

Рис. 13.3. Запис - елемент динамічної структури.

Посилання на деякий елемент – це по суті адреса першого (молодшого байта) фрагмента оперативної пам’яті, відведеної під цей елемент.

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