- •Лекція 1
- •Основні визначення та поняття
- •1.1.Термінологія
- •1.2. Класифікація структур данях
- •1.3. Основні операції над структурами даних
- •Контрольні запитання
- •Лекція 2 алгоритми. Складність алгоритмів
- •1. Зображення алгоритмів
- •2 Складність алгоритмів
- •3. Класи алгоритмів
- •Контрольні запитання
- •Лекція 3 методи сортування
- •Лекція 4 методи сортування (продовження)
- •4. Сортування включенням
- •5. Сортування розподілом
- •6. Сортування злиттям або об’єднанням
- •Лекція 5 Дерева
- •1. Основні визначення та поняття
- •2. Бінарні дерева
- •3. Зображення в пам‘яті комп‘ютера графоподібних структур
- •Контрольні запитання
- •Лекція 6 дерева (продовження)
- •4. Сортування на деревах
- •4.2. Пірамідальне сортування.
- •Контрольні запитання
- •Лекція 7 лінійні структури даних
- •1. Стеки, черги, деки
- •1.1. Стеки
- •1.2. Черги
- •1.3. Деки
- •1.4. Організація стеків, черг і деків
- •Контрольні запитання та вправи
- •3. Множини I кортежі
- •4. Зберігання множин і масивів
- •4.1 Зберігання розріджених матриць
- •Контрольні запитання
- •Лекція 9 Лінійні списки
- •1. Основні визначення та поняття
- •2. Однонаправлені списки
- •3. Двонаправлені списки
- •4. Циклічні списки
- •Контрольні запитання та вправи
- •Лекція 11 нелінійні структури даних
- •1. Таблиці
- •2. Зображення таблиць
- •Контрольні питання
- •Лекція 13 Пошук даних
- •1. Послідовний або лінійний пошук
- •2. Двійковий пошук
- •1. Дерева порівнянь на векторній пам‘яті.
- •3.Пошук у таблиці
- •4. Прямий пошук стрічки
- •5. Алгоритм Кнута, Моріса і Прата пошуку в стрічці.
- •7. Алгоритми з поверненням
- •Лекція 14 Пошук у таблиці
- •1. Пошук у таблицях з обчислюваними адресами
- •2. Пошук у таблицях з прямим доступом
- •3. Пошук у Хеш-таблицях.
- •Контрольні питання
1.3. Деки
Деки - це впорядкована лінійна динамічно змінювана послідовність елементів, в якій виконуються такі умови:
1) новий елемент може приєднуватися з обох боків послідовності;
2) вибірка елементів можлива також з обох боків послідовності.
Наприклад, якщо послідовність D = D1,...,Dn зображує дек, то її елементи D1 і Dn вказують одночасно на місце включення і виключення елементів.
Деки бувають з обмеженнями з одного боку на виконання однієї з операцій (наприклад, один бік послідовності може бути закритий для вибірки елементів і відкритий тільки для приєднування, і навпаки).
Деки називають також реверсивними чергами або чергами з двома кінцями, в яких включення і виключення здійснюються з двох країв послідовності. Як і у випадку звичайних черг, для обслуговування деків також потрібно два вказівники, по одному на кожний кінець послідовності. Деки є найбільш загальною лінійною динамічною структурою даних.
1.4. Організація стеків, черг і деків
Послідовне зображення в пам‘яті ЕОМ стеків, черг і деків дещо відрізняються. Різниця полягав у тому, що адресація елементів стека у векторному зображенні здійснюється за допомогою одного вказівника, який вказує на початок стека, а адресація елементів черги і деку - за допомогою двох вказівників, що вказують на початок і кінець структури. В ролі вказівника у векторному зображенні цих структур може бути звичайний індекс, що вказує на позицію у векторі для включення і виключення елемента.
Для зображення в пам‘яті стеків, черг і деків може використовуватись також звичайний ланцюговий список, але доповнений відповідними вказівниками для виконання операцій включення-виключення елементів у ці структури.
Циклічну чергу найкраще зображати циклічним або кільцевим списком, доповненим вказівниками на позицію для включення і виключення елементів із черги.
Контрольні запитання та вправи
1. Які є основні операції над лінійними структурами даних?
2. Що називається стеком?
3. Що таке верх і низ стеку?
4. Що називають дисципліною LIFO?
5. Що є перевагою стека перед іншими організаціями даних?
6. Що називається чергою?
7. Що називають дисципліною FIFO?
8. Дайте означення лінійної черги.
9. Дайте означення пріоритетної черги.
10. Дайте означення циклічної черги.
11. Що називається деком?
ЛЕКЦІЯ 8
ЛІНІЙНІ СТРУКТУРИ ДАНИХ
(продовження)
2. Масиви
Масив - це набір однотипних елементів даних, з кожним з яких пов'язана впорядкована послідовність цілих чисел, які називають індексами. Індекси однозначно визначають місце даного елемента в масиві і забезпечують прямий доступ до нього. Локалізувати елемент у масиві означає задати його індекс. Кількість індексів визначає розмірність масиву. Кількість елементів визначають розмір масиву.
Розмір і розмірність масиву фіксовані. Найпростіший масив одномірний, його називають також вектором. Двомірний масив - матриця, де кожний елемент b[i,j] належить одночасно двом лінійним ортогональним послідовностям: j-му стовпцю та і-му рядку. Подібну структуру мають також масиви більшої розмірності, тобто кожний індекс масиву визначає одну ортогональну лінійну послідовність так само, як координати точки в багатомірній системі координат.
Універсальні мови програмування (такі як Фортран, Паскаль, С, С++) дають можливість працювати тільки з масивами ортогональної структури. Але ці самі двомірні масиви можуть бути симетричними, діагональними, квазідіагональними, де відмінні від нуля тільки ті елементи bij, для яких j=і або j = i+1 . Трикутні матриці називають тетраедральними. Крім того, існують ще так звані розріджені матриці, в яких багато елементів є нульовими. Такі структури можуть мати масиви різних розмірностей. Кожна з цих структур має свою структуру зберігання в пам'яті комп‘ютера. Як правило, ортогональні багатомірні масиви відображуються у одномірні.
Найбільш поширеними операціями над структурами масивів є:
1) пошук елемента за заданим індексом;
2) локалізація елемента в масиві;
3) запис елемента в масив;
4) злиття масивів і розбиття масиву на частини;
5) сортування елементів масиву за деякими правилами;
6) копіювання масивів.
Найскладнішою є операція локалізації або обчислення індексу елемента по відношенню до першого елемента. Розглянемо модифікації цієї операції для різних типів масивів і способів відображення їх у одномірний масив.
Очевидно, що локалізація елемента вектора не представляє ніяких труднощів, оскільки індекс елемента однозначно визначається його номером у послідовності.
Індекс елемента bij двомірного масиву, що складається із n рядків та т стовпців, при зберіганні в пам'яті комп‘ютера "по стовпцях", обчислюється за формулою
(j-1)*n + (i-1) ,
а при зберіганні його "по рядках" - за формулою
(i-1)*m+(j-1).
У загальному випадку для n -мірного масиву, елемент якого позначається В [S1 , ... , Sn ] , а діапазон зміни iндексів визначається нерівностями 1 <= Si <= ui , i = 1,n , функція адресації цього масиву при запам'ятовуванні його "по рядках" має вигляд
f (S1 , ... , Sn )= u2 u3… un (S1-1)+ u3 u4… un (S2-1)+…+ un (Sn-1-1)+( Sn-1).