
- •Лекція 1. Структури даних. Основні визначення та поняття
- •1.1. Термінологія
- •1.2. Типи даних
- •1.3. Рівні організації даних
- •1.4. Представлення даних
- •1.5. Класифікація структур даних
- •1.6. Основні операції над структурами даних
- •1.7. Документування даних
- •Лекція 2. Алгоритми. Складність алгоритмів.
- •2.1. Зображення алгоритмів
- •2.2. Складність алгоритмів
- •2.3. Класи алгоритмів
- •2.4. Документація алгоритмів
- •Лекція 3. Методи сортування .
- •3.1. Задача сортування
- •3.2.Метод простої вибірки.
- •3.3. Метод бульбашки.
- •3.4.Швидкий метод сортування
- •Лекція 4 методи сортування (продовження)
- •4.5. Сортування включенням
- •4.6. Сортування розподілом
- •4.7. Сортування злиттям або об’єднанням
- •4.8. Сортування підрахунком
- •Лекція 5 нелінійні структури даних
- •5.1. Дерева
- •5.1.1. Бінарні дерева
- •5.1.2. Алгоритм обходу дерева
- •5.1.3. Зображення в пам‘яті комп‘ютера графоподібних структур
- •Лекція 6 методи сортування на деревах
- •6.1. Сортування на деревах
- •6.1.2. Пірамідальне сортування.
- •Питання до першого модуля
- •Тема 1. Основні визначення та поняття. Термінологія. Класифікація структур даних. Основні операції над структурами даних.
- •Тема 2. Поняття алоритму. Зображення алгоритмів. Алгоритмічна складність. Поліноміальна та неполіноміальна складність алгоритмів..
- •Тема 3-4. Алгоритми сортування
- •Тема 5-6. Дерева. Основні визначення та поняття. Бінарні дерева. Зображення в пам‘яті еом графоподібних структур. Алгоритми обходу дерев.Висхідні, нисхідні, змішані алгоритми обходу дерев.
- •Лекція 7. Лінійні структури даних. Стеки, черги і деки.
- •7.1. Стеки
- •7.1.1. Реалізація стеку на базі масиву
- •7.2. Черги
- •7.2.1. Використання черги в програмуванні
- •7.2.2. Реалізація черги на базі масиву
- •7.3. Деки
- •Лекція 8. Лінійні структури даних.
- •8.1. Лінійні списки . Основні визначення та поняття
- •8.2. Однонаправлені списки
- •8.3. Двонаправлені списки
- •8.4. Циклічні списки
- •Лекція 9. Масиви, множини, кортежі
- •9.1. Масиви
- •9.2. Множини I кортежі
- •9.2.1. Реалізація множини
- •9.3. Зберігання множин і масивів
- •9.4. Зберігання розріджених матриць
- •Лекція 10. Нелінійні структури даних
- •10.1. Таблиці
- •10.1.1. Зображення таблиць
- •Лекція 11. Нелінійні структури даних
- •11.1. Спискові структури
- •11.1.1. Ієрархічні списки
- •11.1.2. Організація спискових структур
- •11.2. Сіткові структури
- •Лекція 12 пошук даних.
- •12.1. Послідовний пошук
- •12.2. Двійковий пошук
- •12.2.1. Дерева порівнянь на векторній пам‘яті.
- •12.3. Прямий пошук стрічки
- •12.4. Алгоритм Кнута, Моріса і Прата пошуку в стрічці.
- •12.5. Алгоритм Бойера - Мура пошуку в стрічці
- •12.6. Алгоритми з поверненням
- •Лекція 13 пошук у таблицях
- •13.1. Пошук у таблицях з обчислюваними адресами
- •13.2. Пошук у таблицях з прямим доступом
- •13.3. Пошук у Хеш-таблицях
- •Питання до другого модуля
- •Тема 9 Лінійні списки. Основні визначення та поняття. Однонаправлені списки. Двонаправлені списки. Циклічні списки. Організація списків.
- •Тема 10 Масиви. Множини I кортежі. Зберігання множин і масивів. Зберігання розріджених матриць. Операції з масивами, множинами та кортежами
7.2.1. Використання черги в програмуванні
Використання черги в програмуванні майже відповідає її ролі у звичайному житті. Черга практично завжди пов'язана з обслуговуванням запитів, у тих випадках, коли вони не можуть бути виконані миттєво. Черга підтримує також порядок обслуговування запитів.
Будь-яка, навіть найпростіша, операційна система завжди тією чи іншою мірою багатозадачна. Це значить, що в момент натискання клавіші операційна система може бути зайнята якою-небудь іншою роботою. Проте, операційна система ні в якій ситуації не має права проігнорувати натискання на клавішу. Тому відбувається переривання роботи комп'ютера, він запам'ятовує свій стан і перемикається на обробку натискання на клавішу. Така обробка повинна бути дуже короткою, щоб не порушити виконання інших завдань. Команда, що віддається натисканням на клавішу, просто додається в кінець черги запитів, що чекають свого виконання. Після цього переривання закінчується, комп'ютер відновлює свій стан і продовжує роботу, яка була перервана натисканням на клавішу. Запит, поставлений у чергу, буде виконаний не відразу, а тільки коли настане його черга.
У системі Windows робота віконних додатків заснована на повідомленнях, які посилають цим додаткам. Наприклад, бувають повідомлення про натискання на клавішу миші, про закриття вікна, про необхідність перемальовування області вікна, про вибір пункту меню й т.п. Кожна програма має чергу запитів. Коли програма одержує свій квант часу на виконання, вона вибирає черговий запит з початку черги й виконує його. Таким чином, робота віконного додатка полягає в послідовнім виконанні запитів з її черги. Черга підтримується операційною системою.
Підхід до програмування, що полягає не в прямому виклику процедур, а в посиланні повідомлень, які ставляться в чергу запитів, має багато переваг і є однією з рис об'єктно-орієнтованого програмування. Так, наприклад, якщо віконній програмі необхідно завершити роботу з якої-небудь причини, краще не викликати відразу команду завершення, яка небезпечна, тому що порушує логіку роботи й може привести до втрати даних. Замість цього програма посилає самій собі повідомлення про необхідність завершення роботи, яке буде поставлено в чергу запитів і виконане після запитів, що зробили раніше.
7.2.2. Реалізація черги на базі масиву
Усі структури даних можна реалізовувати на основі масиву. Звичайно, така реалізація може бути багатоетапною, і не завжди масив виступає як безпосередня база реалізації. У випадку черги найбільш популярні дві реалізації: безперервна на базі масиву, яку називають також реалізацією на базі кільцевого буфера, і посилальна реалізація, або реалізація на базі списку.
При безперервній реалізації черги в якості бази виступає масив фіксованої довжини N, таким чином, черга обмежена й не може містити більш N елементів. Індекси елементів масиву змінюються в межах від 0 до N - 1. Крім масиву, реалізація черги зберігає три прості змінні: індекс початку черги, індекс кінця черги, число елементів черги. Елементи черги зберігаються у відрізку масиву від індексу початку до індексу кінця.
При додаванні нового елемента в кінець черги індекс кінця спочатку збільшується на одиницю, потім новий елемент записується в елемент масиву із цим індексом. Аналогічно, при видаленні елементу з початку черги вміст елементу масиву з індексом початку черги запам'ятовується як результат операції, потім індекс початку черги збільшується на одиницю. Як індекс початку черги, так і індекс кінця при роботі рухаються зліва направо. Що відбувається, коли індекс кінця черги досягає кінця масиву, тобто N - 1?
Ключова ідея реалізації черги полягає в тому, що масив подумки як би зациклюється в кільце. Вважається, що за останнім елементом масиву розміщений його перший елемент (останній елемент має індекс N-1, а перший - індекс 0). При зрушенні індексу кінця черги вправо у випадку, коли він указує на останній елементмасиву, він переходить на перший елемент. Таким чином, безперервний відрізок масиву, зайнятий елементами черги, може переходити через кінець масиву на його початок.
Циклічну чергу найкраще зображати циклічним або кільцевим списком, доповненим вказівниками на позицію для включення і виключення елементів із черги.