
- •Лекція 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]:
а) створення нової структури даних;
б) запис або включення елемента у вже існуючу структуру даних;
в) виключення елемента зі структури;
г) перевірка умови існування структури.
7.1. Стеки
Стек - це впорядкована лінійна динамічно змінювана послідовність елементів, в якій виконуються наступні умови:
1) новий елемент приєднується завжди до одного і того ж боку послідовності;
2) доступ до елемента здійснюється завжди з того боку послідовності, до якого приєднується елемент;
3) елемент зберігається в послідовності до моменту його виклику .
Прикладом стеку є стопка тарілок, а також магазин патронів у рушниці. За аналогією з останнім прикладом стек ще часто називають магазинною пам'яттю.
Операцію включення елемента у стек називають "проштовхуванням", а операцію виключення із послідовності - "виштовхуванням". Найбільш і найменш доступні елементи стека навивають відповідно верхом і низом стека. Операції включення і виключення зі стека виконують в одному і тому ж боку послідовності, але виключаються елементи зі стека в порядку, зворотному до того, в якому вони потрапили в послідовність. В кожний момент часу зі стека можна забрати лише один елемент. Дисципліну обслуговування стека часто називають дисципліною LIFO - "останній прийшов, перший пішов".
Стек можна зобразити у вигляді послідовності A=A1,...,An-1,An , де An - елемент, що вказує на вхід-вихід у послідовність; A1 , An - відповідно низ і верх стека. Щоб прочитати елемент Aj , необхідно вибрати зі стека елементи An,..., Aj+1.
Також стек можна представити у вигляді трубки з підпруженим дном, що розміщена вертикально. Верхній кінець трубки відкритий, у нього можна включати, або заштовхувати елементи. Новий елемент, що додається, проштовхує елементи, включені в стек раніше, на одну позицію вниз. При виключенні елементів зі стека вони виштовхуються нагору.
Незалежно від того, як реалізований стек, процедури, що працюють із ним, повинні вміти поміщати елементи в стек, вибирати елементи зі стеку й перевіряти, не чи порожній стек. Для того щоб можна було працювати з новим типом даних, необхідні спеціальні операції, наприклад:
NEW (стек) створення порожнього стека
PUSH (стек, елемент даних) розміщення елемента в стек
POP (стек) вибірка елемента з вершини стека
EMPTY (стік) перевірка, чи порожній стек; результатом є значення "істина", якщо стек порожній, і "хибно " в протилежному випадку.
NEW і PUSH - базові операції, використовувані при роботі зі стеком. Перша створює стек, а друга поміщає в нього елементи. POP - процедура, характерна тільки для роботи зі стеком. Вона може бути визначено за допомогою двох базових проміжних операцій ТОР і REMOVE, які дозволяють виділити дві основні функції, реалізовані POP, але не визначають способів організації доступу до структури з інших модулів:
Відповідно наведеним вище визначенням, POP вибирає вершину стека й видаляє її зі стека. Вершина стека описується в такий спосіб: якщо стек не порожній, вершина являє собою останній розміщений у стек елемент; а якщо ні, то стек не має вершини. Операція REMOVE дає в результаті стек без елемента, розміщеного в нього останнім. До тільки що створеного стеку операцію REMOVE застосовувати не можна. Для визначення порожнього стека використовується поняття нового (або тільки що створеного) стека: порожній стек не містить жодного елемента.
Будь-яка реалізація стека повинна задовольняти цим визначенням. Важливо, що стек визначається як спосіб зберігання даних, які підпорядковуються певним правилам, що діють при звертанні до даних, а не як масив з вказівниками, які пересуваються за певними правилами.
Основною перевагою стека перед іншими організаціями даних є те, що у ньому не потрібна адресація елементів. Для обслуговування стека потрібно лише дві команди: PUSH - "проштовхнути" i POP - "виштовхнути". Зі стеком пов'язаний завжди один вказівник, який вказує на верхній елемент у стеку. На початку такий вказівник дорівнює нулю.
Найпростішим прикладом вдалого застосування стека може служити задача перепису вектора у зворотному порядну. На практиці стекова структура даних найчастіше застосовується в рекурсивних алгоритмах, при трансляції, а також при обробці переривань програм.