Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
відповіді ооп( більше половини).docx
Скачиваний:
8
Добавлен:
21.09.2019
Размер:
165.75 Кб
Скачать

36. Охарактеризуйте зв'язану організацію пам'яті та використання вказівників у програмах.

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

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

В С++ існує три види вказівників : 1)на об’єкти; 2)на функції; 3)на void.

1) Вказівник на об’єкти містить адреси діялнок пам’яті, де зберігаються значення певного типу. Формат запису наступний: <тип> *<ім’я вказівника>

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

Формат запису: <тип> (*<ім’я>) (список типів, агрументів)

Наприклад int (*abc) (double, double);

3) Вказівнику на void можна присвоїти значення будь-якого вказівника і порівнювати його з довільним вказівником, але перед виконанням будь-яких дій з ділянкою пам’яті, на яку він посилається, потрібно зводити його до вказівника на конкретний тип явним чином.

37.Дайте аналіз динамічним структурам об’єктів на прикладі асоціативних структур даних.

Зв’язана організація пам’яті задає множину структур даних, зв’язки між якими організовуються за допомогою вказівників. Кожен елемент такої структури володіє властивістю - „мати зв’язок з іншими елементами” (асоціація). ДСО володіють властивістю мати змінний склад структури, яка дозволяє розглядати ДСО як асоціацію зв’язаних об’єктів. Асоціативність – це групова властивість (приклад - кількість елементів в структурі). Асоціація об’єктів, як правило, впорядкована за певною системою правил – відношенням порядку на множині об’єктів.

Приклади правил впорядкування:

  • виділення окремих властивостей об’єкта: „вік”, „пріоритет” і т.п.;

  • можуть бути побудовані на основі часу модифікації складу членів об’єктів (LIFO, FIFO - див. далі по тексту стек, черга).

Загальна властивість багатьох асоціацій – це можливість відображення їх членів на деяку підмножину натуральних чисел, тобто їх нумерація, що дозволяє задавати відношення лінійного порядку (між елементами першим і наступним немає інших): „предок - нащадок”, „попередній - наступний”... Ця властивість дає можливість реалізовувати багато асоціацій у вигляді лінійних списків:

38.Проаналізуйте такі динамічні структури об’єктів як лінійні списки.

Лінійний список - це така ДСО (такий спосіб організації даних), яка для кожного елемента дозволяє вказати:

  1. Який елемент є наступним для заданого;

  2. Який елемент є попереднім для заданого;

  3. Який лемент є наступним і який є попереднім.

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

class List

{

int data; // інформаційна частина

List *next; // зв’язкова (набір вказівників)

}

Head (голова) - це елемент, від якого можна перейти до будь-якого іншого елемента списку.

Tail (хвіст) – це елемент, зв’язок якого є нульовим.

Порожній список – кількість його елементів рівна 0.

Список, в якого всі елементи мають однаковий тип – однорідний, якщо до складу списку входять різнотипні елементи – неоднорідний.

Списки поділяються на :

- однозв’язні

або

- двозв’язні (мінімум 2 з’язки)

Лінійні списки можуть бути кільцевими:

- однозв’язний кільцевий

- двозв’язний кільцевий

Типовими представниками лінійних списків є стеки і черги.

Стек – це такий лінійний список, який має одну точку доступу: з однієї сторони дані додаються і з тієї ж сторони дані вилучаються. Стек організований за принципом LIFO (Last In First Out - останній ввійшов – перший вийшов). Черга - це такий лінійний список, який має дві точки доступу: з однієї сторони дані в чергу додаються, а з іншої – вилучаються. Черга організована за принципом FIFO (First In First Out – перший ввійшов – перший вийшов).

Head – точка видалення, Tail – точка додавання.

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