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

3. Структуризація програм та даних. Підпрограми, функцiї.

Підпрограма - частина програми, яка реалізує певний алгоритм і дозволяє звернення до неї з різних частин загальної (головної) програми. В термінах мов програмування: функції (С), процедури (Pascal), методи (в термінології об'єктно-орієнтованого програмування в мовах C++, Java, С# та ін.).

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

Набір найвживаніших підпрограм утворює бібліотеку стандартних підпрограм.

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

4. Динамічні структури даних. Списки, стеки, черги. Дерева, бінарні дерева. Дерева пошуку.

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

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

Динамічні структури широко застосовують і для більш ефективної роботи з даними, розмір яких відомий, особливо для вирішення завдань сортування.

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

Лінійні списки

У лінійному списку кожний елемент пов'язаний з наступним і, можливо, з попереднім. У першому випадку список називається однозв'язний, у другому - двозв'язним. Якщо останній елемент зв'язати покажчиком з першим, вийде кільцевої список.

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

Над списками можна виконувати такі операції:

  • початкове формування списку (створення першого елемента);

  • додавання елемента в кінець списку;

  • читання елемента із заданим ключем;

  • вставка елемента в задане місце списку (до або після елемента із заданим ключем);

  • видалення елемента із заданим ключем;

  • упорядкування списку по ключу.

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

Стеки

Стек є найпростішою динамічною структурою. Додавання елементів в стек і вибірка з нього виконуються з одного кінця, що називається вершиною стека. Інші операції зі стеком не визначені. При вибірці елемент виключається зі стека.

Кажуть, що стек реалізує принцип обслуговування LIFO (lastin - firstout, останнім прийшов - першим вийшов). До речі, сегмент стека названий так саме тому, що пам'ять під локальні змінні виділяється за принципом LIFO. Стеки широко застосовуються в системному програмному забезпеченні, компіляторах, в різних рекурсивних алгоритмах.

Черги

Черга - це динамічна структура даних, додавання елементів в яку виконується в один кінець, а вибірка - з іншого кінця. Інші операції з чергою не визначені. При вибірці елемент виключається з черги. Кажуть, що черга реалізує принцип обслуговування FIFO (firstin - firstout, першим прийшов - першим вийшов). У програмуванні черги застосовуються дуже широко - наприклад, при моделюванні, буферизованному введенні-виведенні або диспетчеризації завдань в операційній системі.

Бінарні дерева

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

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

Дерево пошуку

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

Дерево є рекурсивною структурою даних, оскільки кожне піддерево також є деревом. Дії з такими структурами краще всього описуються за допомогою рекурсивних алгоритмів.

Для бінарних дерев визначені операції:

  • включення вузла в дерево;

  • пошук по дереву;

  • читання елемента із заданим ключем;

  • обхід дерева;

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