
- •Лекція 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 кортежі. Зберігання множин і масивів. Зберігання розріджених матриць. Операції з масивами, множинами та кортежами
8.2. Однонаправлені списки
Найбільш природним і простим типом списку є однонаправлений, призначений для того, щоб проглядати його в одному напрямі - від початку до кінця. Однонаправлений список найчастіше зображують у вигляді ланцюга, тому його називають також ланцюговим, або лінійним однозв‘язним (рис.8.2).
Рис.8.2. Приклад однонаправленого списку
Довідка кожної ділянки такого списку складається з двох значень. Першим є довжина Ni i-ї ділянки, яка, в свою чергу, складається з довжини запису і довжини довідки. Другим значенням довідки є посилання на початок наступної ділянки. Далі розміщується тіло ділянки або безпосередньо запис. Заголовна ділянка складається з трьох полів: довжини заголовної ділянки; посилання на початок першої ділянки; посилання на початок вільного місця. Перші два значення утворюють довідку заголовної ділянки, а посилання на вільне місце являє собою тіло цієї ділянки. У довідці останньої ділянки поле вказівника порожнє. У загальному випадку всі записи в однонаправленому списку можуть мати різну довжину.
Однонаправлений список можна відобразити в одномірний масив наступним способом. Заголовний запис буде займати елементи масиву S[o] , S[1], S[2]. Далі розміщуються інші записи. Якщо індекс ділянки, що містить запис X , має значення і , то в елементі S[i] знаходяться довжина цієї ділянки, в елементі S[і+1] - індекс ділянки з наступним записом списку (або нуль, якщо запис X останній). Починаючи з елемента S[i+2] знаходиться сам запис (тіло ділянки).
Схема процедури включення нового запису Z після ділянки з індексом і показана на рис. 8.3. При цьому спочатку формується нова ділянка з записом Z, яка розміщується на вільному місці пам‘яті, а потім коректується зв‘язок і -ї ділянки.
Рис.8.3. Схема процедури включення елемента в ланцюговий список
Процедура виключення елемента з такого списку також зводиться до корекції зв‘язків між ділянками (рис.8.4). Припустимо, що потрібно виключити зі списку ділянку, яка розміщується після ділянки з індексом і . Отже, індекс ділянки, що виключається, розміщений в S[і+1]. Значення S[і+1] заміняється на значення, яке зберігалось у довідці ділянки, що виключається.
Рис. 8.4. Схема процедури виключення елемента
з однонаправленого списку
Коли зі списку виключаються записи, виникає питання про використання того місця пам‘яті, де зберігалися виключені записи. Якщо всі записи мають однакову довжину, нові записи можна розміщувати на цих місцях, для чого з виключених ділянок утворюється список вільних ділянок. Якщо ж ділянки мають різну довжину, задача значно, ускладнюється. Один із методів її розв‘язку полягає у тому, щоб час від часу утворювалась копія списку, куди входили б тільки дійсні записи.
Всякий список супроводжується списком вільної пам‘яті, який готується обслуговуючими програмами. Такий список має свій власний вказівник, який містить адресу першого вільного елемента пам‘яті, а також число таких елементів. Перший вільний елемент містить адресу другого елемента і т.д. Але побудова такого списку вільної пам‘яті значно ускладнюється, якщо записи елементів мають різну довжину. Тоді до довідки ділянки списку вільної пам‘яті необхідно приєднувати також довжину запису. Процедуру, пов‘язану з поверненням вільних квантів пам'яті у список вільної пам'яті, називають "збиранням сміття".