
- •Затверджено на засіданні
- •Редактор л.М. Тонкошкур
- •1. Предмет та зміст дисципліни
- •2. Структури даних.
- •2.1 Динамічні структури даних.
- •2.2. Стеки
- •Блок-схема функції push додавання до стеку нового елемента
- •Блок-схема функції pop видалення останнього елемента стеку
- •Варіанти індивідуальних завдань
- •2.3. Списки.
- •Блок-схема програми
- •Варіанти індивідуальних завдань
- •2.4. Черги.
- •Блок-схема програми
- •Варіанти індивідуальних завдань
- •2.5. Дерева.
- •Варіанти індивідуальних завдань
- •4.Алгоритми сортування
- •Варіанти індивідуальних завдань
- •5.Алгоритми пошуку.
- •Лінійний пошук - це пошук підряд в неупорядкованій послідовності.
- •Варіанти індивідуальних завдань
- •6.Алгоритми на графах.
- •Варіанти індивідуальних завдань
- •Список літератури
1. Предмет та зміст дисципліни
Предметом навчальної дисципліни «Теорія алгоритмiв» є вивчення методів та засобів побудування ефективних алгоритмів.
У процесі вивчання дисципліни студенти мають засвоїти методи побудови ефективних алгоритмів, програмну реалізацію цих алгоритмiв з використанням ефективних структур даних.
Зміст дисципліни розкривають такі теми:
Складність алгоритмiв. Структури даних. Методи побудови ефективних алгоритмів. Алгоритми сортування. Алгоритми пошуку. Алгоритми на графах.
|
2. Структури даних.
2.1 Динамічні структури даних.
Оперативна пам'ять комп’ютера являє собою сукупність елементарних комірок для збереження інформації – байтів, кожний з яких має власний номер, називаний адресою. Адреса комірки може зберігатися в змінній, яка називається покажчиком. Покажчик пов'язується з типом даних. Для оголошення такого покажчика використовується значок *, що розташовується після відповідного типу, наприклад:
int* pAge;
float* pBall;
Слід зазначити, що більш переважно оголошувати покажчик з одночасним присвоєнням йому значення 0 або null – нульове значення покажчика, тобто:
int* pAge = 0;
float* pBal = 0;
Після того, як покажчик придбав деяке значення, тобто став указувати на конкретний фізичний байт пам'яті, по цій адресі можна розмістити будь-яке значення відповідного типу. Для цього перед покажчиком ставиться значок *, який вже має інше призначення, а саме косвенну адресацію, наприклад:
*pAge=18; //в область пам'яті pAge поміщене значення 18
*pBall=4.25; //в область пам'яті pBall поміщене значення 4.25
Для розглянутих дотепер типів даних виділявся цілком визначений розмір пам'яті. Наприклад, під змінну цілого типу int – 2 байти, дійсного типу float – 4 байти, логічного типу bool – 1 байт. Такі змінні називаються статичними і розташовуються в сегменті даних (або статична пам’ять).
Однак, об’єм статичної пам'яті для розміщення таких змінних обмежений і тому при обробці великих масивів даних можуть виникнути ускладнення. В таких випадках існує можливість створювати і знищувати змінні в будь-який момент роботи програми в області пам’яті, що називається вільною або динамічною. Такі змінні називаються динамічними. Змінні, які розташовуються динамічно, оголошуються за допомогою оператора new як покажчик на дані визначеного типу, наприклад:
int* pAge = new int;;
float* pBall = new float;
Динамічну пам'ять можна звільняти оператором delete, наприклад:
delete pAge;
delete pBall;
До динамічних структур даних належать:
лінійні зв'язані структури: списки, черги, стеки;
нелінійні структури: графи,дерева.
Ці структури є фундаментальними в програмуванні.
У лінійно зв'язаних структурах:
всі елементи зв'язані між собою в ланцюг за допомогою покажчиків;
пам'ять для елементів виділяється і звільняється динамічно;
послідовність елементів має початок ланцюга і кінець (вершину), що адресує покажчик стека, черги або списку.
Елементами лінійно зв'язаних структур є структури (struct), що містять інформаційне поле та одне чи кілька полів з адресами наступного (попереднього) елементів. Таким чином, елемент містить покажчик на інший елемент.
Несхожість лінійних зв'язаних структур полягає в тому, що включення і виключення елементів з цих структур відбувається по-різному.
Схема взаємодії елементів у ланцюзі зв'язаних структур
К
інець
ланцюга (0 або null) (вершина)
Початок
ланцюга
Стек: включення і виключення
елементів тільки тут; це – вершина стеку.
Черга: включення - тут; виключення – тут.
Список: включення і виключення елементів у
будь-якому місці ланцюга.