Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АіСД Лабораторні роботи 2013-2014.docx
Скачиваний:
52
Добавлен:
25.03.2016
Размер:
40.2 Кб
Скачать

Лабораторні роботи з дисципліни «Алгоритми і структури даних»

1. Шаблони функцій. Алгоритми сортування 2

2. Шаблони класів. Динамічні масиви 2

3. Списки з самоорганізацією 3

4. Стандартна бібліотека шаблонів. Послідовні контейнери 3

5. Стандартна бібліотека шаблонів. Асоціативні контейнери 6

6. Бінарні дерева пошуку 8

7. Червоно-чорні дерева 9

8. АВЛ дерева 9

9. Порівняння методів балансування бінарних дерев 9

1. Шаблони функцій. Алгоритми сортування

Мета роботи. Засвоїти принципи узагальненого програмування, тобто програмування з використанням типів в якості параметрів. Отримати практичні навички створення шаблонів функцій. Закріпити знання алгоритмів сортування.

Завдання.

  1. Реалізувати шаблони функцій сортування наступними методами.

    1. Сортування бульбашкою (англ. bubble sort). У поданому наборі даних порівнюються два сусідні елементи. Якщо один з елементів, не відповідає критерію сортування (є більшим, або ж, навпаки, меншим за свого сусіда), то ці два елементи міняються місцями. Прохід по списку продовжується до тих пір, доки дані не будуть відсортованими.

    2. Сортування вибором (англ. selectionsort). Алгоритм працює таким чином: знаходить у списку найменше значення, міняє його місцями із першим значеннями у списку, повторює два попередніх кроки, доки список не завершиться (починаючи з другої позиції).

    3. Сортування включенням (англ. insertion sort). Метод порівнює наступний елемент не посортованої частини з послідовними елементами посортованої та вставляє у потрібне місце.

    4. Швидке сортування (англ. quick sort). Ідея алгоритму полягає в переставлянні елементів масиву таким чином, щоб його можна було розділити на дві частини і кожний елемент з першої частини був не більший за будь-який елемент з другої. Впорядкування кожної з частин відбувається рекурсивно.

  2. Для кожногоз реалізованих алгоритмів сортування знайти кількість порівнянь і кількість перестановок для наборів початкових даних розміром від 1 до 20. Початкові дані мають бути наступними.

    1. Випадковий набір даних.

    2. Набір майже відсортований.

    3. Набір відсортований в зворотному порядку.

    4. В наборі не багато унікальних елементів.

Оформлення результатів роботи.

В результаті виконання роботи для кожного з алгоритмів сортування необхідно отримати графіки залежності кількості порівнянь і кількості перестановок від розміру набору даних.

2. Шаблони класів. Динамічні масиви

Мета роботи. Отримати практичні навички створення шаблонів класів. Ознайомитись з різними стратегіями динамічного виділення пам'яті.

Завдання.

  1. Створити шаблон класу динамічного масиву – розмір масиву має автоматично збільшуватися при додаванні нових елементів. Клас має підтримувати наступні операції.

    1. bool empty() const; функція повертає значення true, якщо в масиві немає елементів, false якщо в масиві є хоча б один елемент.

    2. size_type size() const; функція повертає кількість елементів масиву.

    3. void push_back( const TYPE& val ); функція додає елемент val в кінець масиву.

    4. void clear(); функція видаляє всі елементи масиву.

    5. void resize( size_type num, const TYPE& val = TYPE() ); функція змінює кількість елементів масиву до значення size, якщо задане значення val, воно використовується для ініціалізації нових елементів масиву.

    6. const TYPE& operator[]( size_type index ) const; повертає елемент масиву з індексом index без перевірки коректності індекса.

    7. const TYPE& at( size_type loc ) const; повертає елемент масиву з індексом loc з перевіркою коректності індекса.

    8. vector operator=(const vector& c2);

    9. bool operator==(const vector& c1, const vector& c2);

    10. bool operator!=(const vector& c1, const vector& c2);

    11. bool operator<(const vector& c1, const vector& c2);

    12. bool operator>(const vector& c1, const vector& c2);

    13. bool operator<=(const vector& c1, const vector& c2);

    14. bool operator>=(const vector& c1, const vector& c2);

  2. Реалізувати дві стратегії виділення пам’яті при додаванні в масив нових елементів.

    1. При додаванні нового елемента розмір масиву збільшується на один елемент.

    2. При додаванні в масив нового елемента виконується перевірка – якщо в масиві немає зарезервованого місця, розмір масиву збільшується в 1,5 рази; якщо зарезервоване місце є, перерозподіл пам’яті не виконується, використовується зарезервоване раніше місце.

  3. Виконати порівняльний аналіз двох реалізацій динамічного масиву. Для кількості елементів масиву від 1 до 100 знайти наступні залежності.

    1. Залежність кількості операцій динамічного виділення пам’яті від кількості елементів масиву.

    2. Залежність кількості операцій копіювання даних з старої ділянки пам’яті в нову при динамічному виділенню пам’яті від кількості елементів масиву.

Оформлення результатів роботи.

В результаті виконання роботи необхідно отримати два графіка, на яких будуть показані залежності, знайдені при виконанні пунктів 3.1 і 3.2 лабораторної роботи.