🗊Презентация Абстрактні типи даних. (Розділ 3)

Нажмите для полного просмотра!
Абстрактні типи даних. (Розділ 3), слайд №1Абстрактні типи даних. (Розділ 3), слайд №2Абстрактні типи даних. (Розділ 3), слайд №3Абстрактні типи даних. (Розділ 3), слайд №4Абстрактні типи даних. (Розділ 3), слайд №5Абстрактні типи даних. (Розділ 3), слайд №6Абстрактні типи даних. (Розділ 3), слайд №7Абстрактні типи даних. (Розділ 3), слайд №8Абстрактні типи даних. (Розділ 3), слайд №9Абстрактні типи даних. (Розділ 3), слайд №10Абстрактні типи даних. (Розділ 3), слайд №11Абстрактні типи даних. (Розділ 3), слайд №12Абстрактні типи даних. (Розділ 3), слайд №13Абстрактні типи даних. (Розділ 3), слайд №14Абстрактні типи даних. (Розділ 3), слайд №15Абстрактні типи даних. (Розділ 3), слайд №16Абстрактні типи даних. (Розділ 3), слайд №17Абстрактні типи даних. (Розділ 3), слайд №18Абстрактні типи даних. (Розділ 3), слайд №19Абстрактні типи даних. (Розділ 3), слайд №20Абстрактні типи даних. (Розділ 3), слайд №21Абстрактні типи даних. (Розділ 3), слайд №22Абстрактні типи даних. (Розділ 3), слайд №23Абстрактні типи даних. (Розділ 3), слайд №24Абстрактні типи даних. (Розділ 3), слайд №25Абстрактні типи даних. (Розділ 3), слайд №26Абстрактні типи даних. (Розділ 3), слайд №27Абстрактні типи даних. (Розділ 3), слайд №28Абстрактні типи даних. (Розділ 3), слайд №29Абстрактні типи даних. (Розділ 3), слайд №30Абстрактні типи даних. (Розділ 3), слайд №31Абстрактні типи даних. (Розділ 3), слайд №32Абстрактні типи даних. (Розділ 3), слайд №33Абстрактні типи даних. (Розділ 3), слайд №34Абстрактні типи даних. (Розділ 3), слайд №35Абстрактні типи даних. (Розділ 3), слайд №36Абстрактні типи даних. (Розділ 3), слайд №37Абстрактні типи даних. (Розділ 3), слайд №38Абстрактні типи даних. (Розділ 3), слайд №39Абстрактні типи даних. (Розділ 3), слайд №40Абстрактні типи даних. (Розділ 3), слайд №41Абстрактні типи даних. (Розділ 3), слайд №42Абстрактні типи даних. (Розділ 3), слайд №43Абстрактні типи даних. (Розділ 3), слайд №44Абстрактні типи даних. (Розділ 3), слайд №45Абстрактні типи даних. (Розділ 3), слайд №46Абстрактні типи даних. (Розділ 3), слайд №47Абстрактні типи даних. (Розділ 3), слайд №48Абстрактні типи даних. (Розділ 3), слайд №49Абстрактні типи даних. (Розділ 3), слайд №50Абстрактні типи даних. (Розділ 3), слайд №51Абстрактні типи даних. (Розділ 3), слайд №52Абстрактні типи даних. (Розділ 3), слайд №53Абстрактні типи даних. (Розділ 3), слайд №54Абстрактні типи даних. (Розділ 3), слайд №55Абстрактні типи даних. (Розділ 3), слайд №56Абстрактні типи даних. (Розділ 3), слайд №57Абстрактні типи даних. (Розділ 3), слайд №58Абстрактні типи даних. (Розділ 3), слайд №59Абстрактні типи даних. (Розділ 3), слайд №60Абстрактні типи даних. (Розділ 3), слайд №61Абстрактні типи даних. (Розділ 3), слайд №62Абстрактні типи даних. (Розділ 3), слайд №63Абстрактні типи даних. (Розділ 3), слайд №64Абстрактні типи даних. (Розділ 3), слайд №65Абстрактні типи даних. (Розділ 3), слайд №66Абстрактні типи даних. (Розділ 3), слайд №67Абстрактні типи даних. (Розділ 3), слайд №68Абстрактні типи даних. (Розділ 3), слайд №69Абстрактні типи даних. (Розділ 3), слайд №70Абстрактні типи даних. (Розділ 3), слайд №71Абстрактні типи даних. (Розділ 3), слайд №72Абстрактні типи даних. (Розділ 3), слайд №73Абстрактні типи даних. (Розділ 3), слайд №74Абстрактні типи даних. (Розділ 3), слайд №75Абстрактні типи даних. (Розділ 3), слайд №76Абстрактні типи даних. (Розділ 3), слайд №77Абстрактні типи даних. (Розділ 3), слайд №78Абстрактні типи даних. (Розділ 3), слайд №79Абстрактні типи даних. (Розділ 3), слайд №80Абстрактні типи даних. (Розділ 3), слайд №81

Содержание

Вы можете ознакомиться и скачать презентацию на тему Абстрактні типи даних. (Розділ 3). Доклад-сообщение содержит 81 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Розділ 3. 
Абстрактні типи даних
Описание слайда:
Розділ 3. Абстрактні типи даних

Слайд 2





	Організація даних для обробки є важливим етапом розробки програм. Для реалізації багатьох алгоритмів вибір структури даних - єдине важливе рішення: коли вибір зроблений, розробка алгоритмів не викликає складнощів. 
	Організація даних для обробки є важливим етапом розробки програм. Для реалізації багатьох алгоритмів вибір структури даних - єдине важливе рішення: коли вибір зроблений, розробка алгоритмів не викликає складнощів. 
	Для одних і тих же даних різні структури займатимуть різний дисковий простір. Одні і ті ж операції з різними структурами даних створюють алгоритми неоднакової ефективності. Вибір алгоритмів і структур даних тісно взаємозв'язаний. Програмісти постійно знаходять способи підвищення швидкодії або економії дискового простору за рахунок оптимального вибору.
Описание слайда:
Організація даних для обробки є важливим етапом розробки програм. Для реалізації багатьох алгоритмів вибір структури даних - єдине важливе рішення: коли вибір зроблений, розробка алгоритмів не викликає складнощів. Організація даних для обробки є важливим етапом розробки програм. Для реалізації багатьох алгоритмів вибір структури даних - єдине важливе рішення: коли вибір зроблений, розробка алгоритмів не викликає складнощів. Для одних і тих же даних різні структури займатимуть різний дисковий простір. Одні і ті ж операції з різними структурами даних створюють алгоритми неоднакової ефективності. Вибір алгоритмів і структур даних тісно взаємозв'язаний. Програмісти постійно знаходять способи підвищення швидкодії або економії дискового простору за рахунок оптимального вибору.

Слайд 3





3.1. Визначення абстрактного типу даних 
Література для самостійного читання:
	с. 23-27 [1], с. 310-311 [4], с.47-84 [2], с.75-245 [3]
Описание слайда:
3.1. Визначення абстрактного типу даних Література для самостійного читання: с. 23-27 [1], с. 310-311 [4], с.47-84 [2], с.75-245 [3]

Слайд 4





	Хоча терміни тип даних, структура даних і абстрактний тип даних звучать схоже, але вони мають різний сенс. 
	Хоча терміни тип даних, структура даних і абстрактний тип даних звучать схоже, але вони мають різний сенс. 
	У мовах програмування тип даних змінної позначає множину значень, які може приймати ця змінна. 
	Абстрактний тип даних - це математична модель плюс різні оператори, визначені в рамках цієї моделі. 
	Розробляти алгоритм можна в термінах АТД, але для реалізації алгоритму в конкретній мові програмування необхідно знайти спосіб представлення АТД в термінах типів даних і операторів, підтримуваних даною мовою програмування. Для такого представлення АТД використовуються структури даних, які представляють собою набір змінних, можливо, різних типів даних, об'єднаних певним чином.
Описание слайда:
Хоча терміни тип даних, структура даних і абстрактний тип даних звучать схоже, але вони мають різний сенс. Хоча терміни тип даних, структура даних і абстрактний тип даних звучать схоже, але вони мають різний сенс. У мовах програмування тип даних змінної позначає множину значень, які може приймати ця змінна. Абстрактний тип даних - це математична модель плюс різні оператори, визначені в рамках цієї моделі. Розробляти алгоритм можна в термінах АТД, але для реалізації алгоритму в конкретній мові програмування необхідно знайти спосіб представлення АТД в термінах типів даних і операторів, підтримуваних даною мовою програмування. Для такого представлення АТД використовуються структури даних, які представляють собою набір змінних, можливо, різних типів даних, об'єднаних певним чином.

Слайд 5





	Базовим будівельним блоком структури даних є комірка, яка призначена для зберігання значення певного базового або складеного типу даних. 
	Базовим будівельним блоком структури даних є комірка, яка призначена для зберігання значення певного базового або складеного типу даних. 
	Структури даних створюються шляхом задання імен сукупностям (агрегатам) комірок і (необов'язково) інтерпретації значення деяких комірок як представників (тобто покажчиків) інших комірок.
Описание слайда:
Базовим будівельним блоком структури даних є комірка, яка призначена для зберігання значення певного базового або складеного типу даних. Базовим будівельним блоком структури даних є комірка, яка призначена для зберігання значення певного базового або складеного типу даних. Структури даних створюються шляхом задання імен сукупностям (агрегатам) комірок і (необов'язково) інтерпретації значення деяких комірок як представників (тобто покажчиків) інших комірок.

Слайд 6





	Способи агрегації комірок для створення структур даних: 
	Способи агрегації комірок для створення структур даних: 
одновимірний масив
запис
файл
покажчик + запис 
курсор + одновимірний масив
Описание слайда:
Способи агрегації комірок для створення структур даних: Способи агрегації комірок для створення структур даних: одновимірний масив запис файл покажчик + запис курсор + одновимірний масив

Слайд 7





	Як простий механізм агрегації комірок в Pascal і більшості інших мов програмування можна застосовувати (одновимірний) масив. Масив також можна розглядати як відображення множини індексів (таких як цілі числа 1, 2 ..., n) в множину комірок. Посилання на комірку зазвичай складається з імені масиву і значення з множини індексів даного масиву. 
	Як простий механізм агрегації комірок в Pascal і більшості інших мов програмування можна застосовувати (одновимірний) масив. Масив також можна розглядати як відображення множини індексів (таких як цілі числа 1, 2 ..., n) в множину комірок. Посилання на комірку зазвичай складається з імені масиву і значення з множини індексів даного масиву. 
	Іншим загальним механізмом агрегації комірок в мовах програмування є структура запису. Запис (record) можна розглядати як комірку, що складається з декількох інших (званих полями), значення в яких можуть бути різних типів. Записи часто групуються в масиви; тип даних визначається сукупністю типів полів запису.
Описание слайда:
Як простий механізм агрегації комірок в Pascal і більшості інших мов програмування можна застосовувати (одновимірний) масив. Масив також можна розглядати як відображення множини індексів (таких як цілі числа 1, 2 ..., n) в множину комірок. Посилання на комірку зазвичай складається з імені масиву і значення з множини індексів даного масиву. Як простий механізм агрегації комірок в Pascal і більшості інших мов програмування можна застосовувати (одновимірний) масив. Масив також можна розглядати як відображення множини індексів (таких як цілі числа 1, 2 ..., n) в множину комірок. Посилання на комірку зазвичай складається з імені масиву і значення з множини індексів даного масиву. Іншим загальним механізмом агрегації комірок в мовах програмування є структура запису. Запис (record) можна розглядати як комірку, що складається з декількох інших (званих полями), значення в яких можуть бути різних типів. Записи часто групуються в масиви; тип даних визначається сукупністю типів полів запису.

Слайд 8





	Третій метод агрегації комірок, який можна знайти в Pascal і деяких інших мовах програмування, - це файл. Файл, як і одновимірний масив, є послідовністю значень певного типу. Проте файл не має індексів: його елементи доступні тільки в тому порядку, в якому вони були записані у файл. На відміну від файлу, масиви і записи є структурами з "вільним доступом", час доступу до компонентів яких не залежить від значення індексу масиву або покажчика поля запису. Перевага агрегації за допомогою файлу (що частково компенсують описаний недолік) полягає в тому, що файл не має обмеження на кількість елементів і ця кількість може змінюватися під час виконання програми. 
	Третій метод агрегації комірок, який можна знайти в Pascal і деяких інших мовах програмування, - це файл. Файл, як і одновимірний масив, є послідовністю значень певного типу. Проте файл не має індексів: його елементи доступні тільки в тому порядку, в якому вони були записані у файл. На відміну від файлу, масиви і записи є структурами з "вільним доступом", час доступу до компонентів яких не залежить від значення індексу масиву або покажчика поля запису. Перевага агрегації за допомогою файлу (що частково компенсують описаний недолік) полягає в тому, що файл не має обмеження на кількість елементів і ця кількість може змінюватися під час виконання програми.
Описание слайда:
Третій метод агрегації комірок, який можна знайти в Pascal і деяких інших мовах програмування, - це файл. Файл, як і одновимірний масив, є послідовністю значень певного типу. Проте файл не має індексів: його елементи доступні тільки в тому порядку, в якому вони були записані у файл. На відміну від файлу, масиви і записи є структурами з "вільним доступом", час доступу до компонентів яких не залежить від значення індексу масиву або покажчика поля запису. Перевага агрегації за допомогою файлу (що частково компенсують описаний недолік) полягає в тому, що файл не має обмеження на кількість елементів і ця кількість може змінюватися під час виконання програми. Третій метод агрегації комірок, який можна знайти в Pascal і деяких інших мовах програмування, - це файл. Файл, як і одновимірний масив, є послідовністю значень певного типу. Проте файл не має індексів: його елементи доступні тільки в тому порядку, в якому вони були записані у файл. На відміну від файлу, масиви і записи є структурами з "вільним доступом", час доступу до компонентів яких не залежить від значення індексу масиву або покажчика поля запису. Перевага агрегації за допомогою файлу (що частково компенсують описаний недолік) полягає в тому, що файл не має обмеження на кількість елементів і ця кількість може змінюватися під час виконання програми.

Слайд 9





	Додатковим засобом агрегації комірок в мовах програмування може стати використання покажчиків і курсорів. Покажчик (pointer) - це комірка, значення якої вказує на іншу комірку. Курсор (cursor) - це комірка з цілочисельним значенням, що використовується для вказування на елемент масиву. Як спосіб вказівки курсор працює так само, як і покажчик, але курсор можна використовувати і в мовах (подібних Fortran), які не мають явного типу покажчика. Розглядаючи цілочисельну комірку як індексне значення для масиву, можна ефективно реалізувати вказівку комірки масиву. На жаль, цей прийом підходить тільки для комірок масиву і не дозволяє організувати вказівку комірки, що не є частиною масиву.
	Додатковим засобом агрегації комірок в мовах програмування може стати використання покажчиків і курсорів. Покажчик (pointer) - це комірка, значення якої вказує на іншу комірку. Курсор (cursor) - це комірка з цілочисельним значенням, що використовується для вказування на елемент масиву. Як спосіб вказівки курсор працює так само, як і покажчик, але курсор можна використовувати і в мовах (подібних Fortran), які не мають явного типу покажчика. Розглядаючи цілочисельну комірку як індексне значення для масиву, можна ефективно реалізувати вказівку комірки масиву. На жаль, цей прийом підходить тільки для комірок масиву і не дозволяє організувати вказівку комірки, що не є частиною масиву.
Описание слайда:
Додатковим засобом агрегації комірок в мовах програмування може стати використання покажчиків і курсорів. Покажчик (pointer) - це комірка, значення якої вказує на іншу комірку. Курсор (cursor) - це комірка з цілочисельним значенням, що використовується для вказування на елемент масиву. Як спосіб вказівки курсор працює так само, як і покажчик, але курсор можна використовувати і в мовах (подібних Fortran), які не мають явного типу покажчика. Розглядаючи цілочисельну комірку як індексне значення для масиву, можна ефективно реалізувати вказівку комірки масиву. На жаль, цей прийом підходить тільки для комірок масиву і не дозволяє організувати вказівку комірки, що не є частиною масиву. Додатковим засобом агрегації комірок в мовах програмування може стати використання покажчиків і курсорів. Покажчик (pointer) - це комірка, значення якої вказує на іншу комірку. Курсор (cursor) - це комірка з цілочисельним значенням, що використовується для вказування на елемент масиву. Як спосіб вказівки курсор працює так само, як і покажчик, але курсор можна використовувати і в мовах (подібних Fortran), які не мають явного типу покажчика. Розглядаючи цілочисельну комірку як індексне значення для масиву, можна ефективно реалізувати вказівку комірки масиву. На жаль, цей прийом підходить тільки для комірок масиву і не дозволяє організувати вказівку комірки, що не є частиною масиву.

Слайд 10





3.2. АТД "Список" 
Література для самостійного читання:
с. 45-57 [1], с. 310-311 [4]
Описание слайда:
3.2. АТД "Список" Література для самостійного читання: с. 45-57 [1], с. 310-311 [4]

Слайд 11





	Приклад. Здійснюється реєстрація автомобілів, які прибувають на автостоянку та залишають її. Потрібно зберігати і обробляти множину номерів автомобілів. Для відображення цієї множини в пам'яті комп'ютера необхідно обрати певну структуру даних. 
	Приклад. Здійснюється реєстрація автомобілів, які прибувають на автостоянку та залишають її. Потрібно зберігати і обробляти множину номерів автомобілів. Для відображення цієї множини в пам'яті комп'ютера необхідно обрати певну структуру даних. 
	Вибір масиву буде невдалим з декількох причин. 
	По-перше, умова задачі не обмежує кількість автомобілів, а розмір масиву є обмеженим. 
	По-друге, в разі прибуття кожного нового автомобіля на автостоянку або його від'їзду потрібно буде вставити або видалити елемент масиву. Така операція є досить трудомісткою, оскільки потребує послідовного зсуву в пам'яті значної кількості елементів. Вирішити ці проблеми можна шляхом використання зв'язного лінійного списку.
Описание слайда:
Приклад. Здійснюється реєстрація автомобілів, які прибувають на автостоянку та залишають її. Потрібно зберігати і обробляти множину номерів автомобілів. Для відображення цієї множини в пам'яті комп'ютера необхідно обрати певну структуру даних. Приклад. Здійснюється реєстрація автомобілів, які прибувають на автостоянку та залишають її. Потрібно зберігати і обробляти множину номерів автомобілів. Для відображення цієї множини в пам'яті комп'ютера необхідно обрати певну структуру даних. Вибір масиву буде невдалим з декількох причин. По-перше, умова задачі не обмежує кількість автомобілів, а розмір масиву є обмеженим. По-друге, в разі прибуття кожного нового автомобіля на автостоянку або його від'їзду потрібно буде вставити або видалити елемент масиву. Така операція є досить трудомісткою, оскільки потребує послідовного зсуву в пам'яті значної кількості елементів. Вирішити ці проблеми можна шляхом використання зв'язного лінійного списку.

Слайд 12





	Лінійні зв’язні списки – це ефективна структура даних для моделювання ситуацій, в яких впорядкований масив даних треба змінювати.
	Лінійні зв’язні списки – це ефективна структура даних для моделювання ситуацій, в яких впорядкований масив даних треба змінювати.
	Зв'язний лінійний список — це сукупність однотипних компонентів, які послідовно зв'язані між собою за допомогою покажчиків. 
	Кожен компонент списку, крім останнього, містить покажчик на наступний (або на наступний і попередній) компонент. Доступ до першого компонента здійснюється за допомогою покажчика на нього, а доступ до кожного наступного компонента — з використанням покажчика, який зберігається у попередньому компоненті. Перший компонент списку називається його вершиною, або головою.
Описание слайда:
Лінійні зв’язні списки – це ефективна структура даних для моделювання ситуацій, в яких впорядкований масив даних треба змінювати. Лінійні зв’язні списки – це ефективна структура даних для моделювання ситуацій, в яких впорядкований масив даних треба змінювати. Зв'язний лінійний список — це сукупність однотипних компонентів, які послідовно зв'язані між собою за допомогою покажчиків. Кожен компонент списку, крім останнього, містить покажчик на наступний (або на наступний і попередній) компонент. Доступ до першого компонента здійснюється за допомогою покажчика на нього, а доступ до кожного наступного компонента — з використанням покажчика, який зберігається у попередньому компоненті. Перший компонент списку називається його вершиною, або головою.

Слайд 13





	Зв'язні лінійні списки поділяють на такі різновиди:
	Зв'язні лінійні списки поділяють на такі різновиди:
Однозв'язний лінійний список — це список, в якому попередній компонент посилається на наступний.
Двозв'язний лінійний список — це список, в якому попередній компонент посилається на наступний, а наступний — на попередній.
Однозв'язний циклічний список — це однозв'язний лінійний список, в якому останній компонент посилається на перший.
Двозв'язний циклічний список — це двозв'язний лінійний список, в якому останній компонент посилається на перший, а перший компонент — на останній.
Стек — це однозв'язний лінійний список, в якому компоненти додаються та видаляються лише з його вершини, тобто з початку списку.
Черга — це однозв'язний лінійний список, в якому компоненти додаються в кінець списку, а видаляються з вершини, тобто з початку списку.
Описание слайда:
Зв'язні лінійні списки поділяють на такі різновиди: Зв'язні лінійні списки поділяють на такі різновиди: Однозв'язний лінійний список — це список, в якому попередній компонент посилається на наступний. Двозв'язний лінійний список — це список, в якому попередній компонент посилається на наступний, а наступний — на попередній. Однозв'язний циклічний список — це однозв'язний лінійний список, в якому останній компонент посилається на перший. Двозв'язний циклічний список — це двозв'язний лінійний список, в якому останній компонент посилається на перший, а перший компонент — на останній. Стек — це однозв'язний лінійний список, в якому компоненти додаються та видаляються лише з його вершини, тобто з початку списку. Черга — це однозв'язний лінійний список, в якому компоненти додаються в кінець списку, а видаляються з вершини, тобто з початку списку.

Слайд 14





	Реалізація списків за допомогою масивів 
	Реалізація списків за допомогою масивів 
	При реалізації списків за допомогою масивів елементи списку розташовуються в суміжних комірках масиву. Це уявлення дозволяє легко проглядати вміст списку і вставляти нові елементи в його кінець. Але вставка нового елементу в середину списку вимагає переміщення всіх подальших елементів на одну позицію до кінця масиву, щоб звільнити місце для нового елементу. Видалення елементу також вимагає переміщення елементів, щоб закрити комірку, що звільнилася.
Описание слайда:
Реалізація списків за допомогою масивів Реалізація списків за допомогою масивів При реалізації списків за допомогою масивів елементи списку розташовуються в суміжних комірках масиву. Це уявлення дозволяє легко проглядати вміст списку і вставляти нові елементи в його кінець. Але вставка нового елементу в середину списку вимагає переміщення всіх подальших елементів на одну позицію до кінця масиву, щоб звільнити місце для нового елементу. Видалення елементу також вимагає переміщення елементів, щоб закрити комірку, що звільнилася.

Слайд 15





	З прикладом реалізації можна ознайомитись в (с.48-50  [1]). 
	З прикладом реалізації можна ознайомитись в (с.48-50  [1]).
Описание слайда:
З прикладом реалізації можна ознайомитись в (с.48-50 [1]). З прикладом реалізації можна ознайомитись в (с.48-50 [1]).

Слайд 16





	Реалізація списків за допомогою покажчиків 
	Реалізація списків за допомогою покажчиків 
	Кожний компонент зв'язного лінійного списку складається з кількох інформаційних полів та покажчика на наступний компонент. Отже, компонент зв'язного лінійного списку є записом. Інформаційні поля компонента списку можуть бути змінними будь-яких типів, а покажчик повинен бути покажчиком на запис того типу, якому належать компоненти списку. Покажчик в останньому компоненті лінійного списку має значення nil — так позначається кінець списку.
В Паскалі тип покажчика на компонент однозв'язного лінійного списку має бути оголошений перед оголошенням типу компонента списку. Таке виключення з правил зроблено спеціально для типів компонентів динамічних структур.
Описание слайда:
Реалізація списків за допомогою покажчиків Реалізація списків за допомогою покажчиків Кожний компонент зв'язного лінійного списку складається з кількох інформаційних полів та покажчика на наступний компонент. Отже, компонент зв'язного лінійного списку є записом. Інформаційні поля компонента списку можуть бути змінними будь-яких типів, а покажчик повинен бути покажчиком на запис того типу, якому належать компоненти списку. Покажчик в останньому компоненті лінійного списку має значення nil — так позначається кінець списку. В Паскалі тип покажчика на компонент однозв'язного лінійного списку має бути оголошений перед оголошенням типу компонента списку. Таке виключення з правил зроблено спеціально для типів компонентів динамічних структур.

Слайд 17





	Зображення однозв'язного лінійного списку
	Зображення однозв'язного лінійного списку
Описание слайда:
Зображення однозв'язного лінійного списку Зображення однозв'язного лінійного списку

Слайд 18





	Приклад. Оголошення типу компонента однозв'язного лінійного списку. Для роботи з таким списком потрібні покажчики на перший і поточний компоненти. 
	Приклад. Оголошення типу компонента однозв'язного лінійного списку. Для роботи з таким списком потрібні покажчики на перший і поточний компоненти. 
type
  ptr=^Item; 		{тип покажчика на 
					 компонент списку}
  Item=record		{тип компонента}
 		data  : string;	{інформаційне поле}
 		next  : ptr;	{покажчик на наступний
 		end;			 компонент}
var head,			{покажчики на перший та}
	  current : ptr;	{поточний компоненти 
					 списку}
Описание слайда:
Приклад. Оголошення типу компонента однозв'язного лінійного списку. Для роботи з таким списком потрібні покажчики на перший і поточний компоненти. Приклад. Оголошення типу компонента однозв'язного лінійного списку. Для роботи з таким списком потрібні покажчики на перший і поточний компоненти. type ptr=^Item; {тип покажчика на компонент списку} Item=record {тип компонента} data : string; {інформаційне поле} next : ptr; {покажчик на наступний end; компонент} var head, {покажчики на перший та} current : ptr; {поточний компоненти списку}

Слайд 19





	Приклади, що ілюструють реалізації АТД “Список”: 
	Приклади, що ілюструють реалізації АТД “Список”: 
ще одна реалізація за допомогою покажчиків     (с.50-53  [1]).
реалізація за допомогою масивів (с.48-50  [1]).
реалізація на основі курсорів (с.54-56  [1]).
Описание слайда:
Приклади, що ілюструють реалізації АТД “Список”: Приклади, що ілюструють реалізації АТД “Список”: ще одна реалізація за допомогою покажчиків (с.50-53 [1]). реалізація за допомогою масивів (с.48-50 [1]). реалізація на основі курсорів (с.54-56 [1]).

Слайд 20





	Порівняння реалізацій АТД “Список” 
	Порівняння реалізацій АТД “Список” 
	Зрозуміло, нас не може не цікавити питання про те, в яких ситуаціях краще використовувати реалізацію списків за допомогою покажчиків, а коли - за допомогою масивів. Часто відповідь на це питання залежить від того, які оператори повинні виконуватися над списками і як часто вони використовуватимуться. Іноді аргументом на користь однієї або іншої реалізації може служити максимальний розмір списків, що обробляються.
Описание слайда:
Порівняння реалізацій АТД “Список” Порівняння реалізацій АТД “Список” Зрозуміло, нас не може не цікавити питання про те, в яких ситуаціях краще використовувати реалізацію списків за допомогою покажчиків, а коли - за допомогою масивів. Часто відповідь на це питання залежить від того, які оператори повинні виконуватися над списками і як часто вони використовуватимуться. Іноді аргументом на користь однієї або іншої реалізації може служити максимальний розмір списків, що обробляються.

Слайд 21





1. Реалізація списків за допомогою масивів вимагає вказівки максимального розміру списку до початку виконання програм. Якщо ми не можемо заздалегідь обмежити зверху довжину оброблюваних списків, то, очевидно, більш раціональним вибором буде реалізація списків за допомогою покажчиків. 
1. Реалізація списків за допомогою масивів вимагає вказівки максимального розміру списку до початку виконання програм. Якщо ми не можемо заздалегідь обмежити зверху довжину оброблюваних списків, то, очевидно, більш раціональним вибором буде реалізація списків за допомогою покажчиків. 
2. Виконання деяких операторів в одній реалізації вимагає більших обчислювальних витрат, ніж в іншій. Наприклад, процедури INSERT і DELETE виконуються за постійне число кроків у разі зв'язних списків будь-якого розміру, але вимагають часу, пропорційного числу елементів, наступних за елементом, що вставляється (або що видаляється), при використанні масивів. І навпаки, час виконання функцій PREVIOUS і END постійний при реалізації списків за допомогою масивів, але цей же час пропорційний довжині списку у разі реалізації, побудованої за допомогою покажчиків.
Описание слайда:
1. Реалізація списків за допомогою масивів вимагає вказівки максимального розміру списку до початку виконання програм. Якщо ми не можемо заздалегідь обмежити зверху довжину оброблюваних списків, то, очевидно, більш раціональним вибором буде реалізація списків за допомогою покажчиків. 1. Реалізація списків за допомогою масивів вимагає вказівки максимального розміру списку до початку виконання програм. Якщо ми не можемо заздалегідь обмежити зверху довжину оброблюваних списків, то, очевидно, більш раціональним вибором буде реалізація списків за допомогою покажчиків. 2. Виконання деяких операторів в одній реалізації вимагає більших обчислювальних витрат, ніж в іншій. Наприклад, процедури INSERT і DELETE виконуються за постійне число кроків у разі зв'язних списків будь-якого розміру, але вимагають часу, пропорційного числу елементів, наступних за елементом, що вставляється (або що видаляється), при використанні масивів. І навпаки, час виконання функцій PREVIOUS і END постійний при реалізації списків за допомогою масивів, але цей же час пропорційний довжині списку у разі реалізації, побудованої за допомогою покажчиків.

Слайд 22





3. Якщо необхідно вставляти або видаляти елементи, положення яких вказане з допомогою якоїсь змінної-курсору, і значення цієї змінної буде використане пізніше, то недоцільно використовувати реалізацію з допомогою покажчиків, оскільки ця змінна не "відстежує" вставку і видалення елементів. Взагалі використання покажчиків вимагає особливої уваги і ретельності в роботі. 
3. Якщо необхідно вставляти або видаляти елементи, положення яких вказане з допомогою якоїсь змінної-курсору, і значення цієї змінної буде використане пізніше, то недоцільно використовувати реалізацію з допомогою покажчиків, оскільки ця змінна не "відстежує" вставку і видалення елементів. Взагалі використання покажчиків вимагає особливої уваги і ретельності в роботі. 
4. Реалізація списків за допомогою масивів марнотратна відносно комп’ютерної пам'яті, оскільки резервується об'єм пам'яті, достатній для максимально можливого розміру списку незалежно від його реального розміру в конкретний момент часу. Реалізація за допомогою покажчиків використовує стільки пам'яті, скільки необхідно для зберігання поточного списку, але вимагає додаткову пам'ять для покажчика кожного запису. Таким чином, в різних ситуаціях по критерію використаної пам'яті можуть бути вигідні різні реалізації.
Описание слайда:
3. Якщо необхідно вставляти або видаляти елементи, положення яких вказане з допомогою якоїсь змінної-курсору, і значення цієї змінної буде використане пізніше, то недоцільно використовувати реалізацію з допомогою покажчиків, оскільки ця змінна не "відстежує" вставку і видалення елементів. Взагалі використання покажчиків вимагає особливої уваги і ретельності в роботі. 3. Якщо необхідно вставляти або видаляти елементи, положення яких вказане з допомогою якоїсь змінної-курсору, і значення цієї змінної буде використане пізніше, то недоцільно використовувати реалізацію з допомогою покажчиків, оскільки ця змінна не "відстежує" вставку і видалення елементів. Взагалі використання покажчиків вимагає особливої уваги і ретельності в роботі. 4. Реалізація списків за допомогою масивів марнотратна відносно комп’ютерної пам'яті, оскільки резервується об'єм пам'яті, достатній для максимально можливого розміру списку незалежно від його реального розміру в конкретний момент часу. Реалізація за допомогою покажчиків використовує стільки пам'яті, скільки необхідно для зберігання поточного списку, але вимагає додаткову пам'ять для покажчика кожного запису. Таким чином, в різних ситуаціях по критерію використаної пам'яті можуть бути вигідні різні реалізації.

Слайд 23





3.3. Стек
Література для самостійного читання:
		 с. 58-60 [1], с. 312-316 [4]
Описание слайда:
3.3. Стек Література для самостійного читання: с. 58-60 [1], с. 312-316 [4]

Слайд 24





	 Стек — це один із різновидів однозв'язного лінійного списку, доступ до елементів якого можливий лише через його початок, що називається вершиною стеку. 
	 Стек — це один із різновидів однозв'язного лінійного списку, доступ до елементів якого можливий лише через його початок, що називається вершиною стеку.
Описание слайда:
Стек — це один із різновидів однозв'язного лінійного списку, доступ до елементів якого можливий лише через його початок, що називається вершиною стеку. Стек — це один із різновидів однозв'язного лінійного списку, доступ до елементів якого можливий лише через його початок, що називається вершиною стеку.

Слайд 25





	 Для роботи зі стеком використовують зазвичай п’ять дій:
	 Для роботи зі стеком використовують зазвичай п’ять дій:
очищення стеку;
зчитування елементу у вершині стеку;
видалення елемента з вершини стеку;
додавання елемента у вершину стеку;
перевірка, чи порожній стек.
Описание слайда:
Для роботи зі стеком використовують зазвичай п’ять дій: Для роботи зі стеком використовують зазвичай п’ять дій: очищення стеку; зчитування елементу у вершині стеку; видалення елемента з вершини стеку; додавання елемента у вершину стеку; перевірка, чи порожній стек.

Слайд 26





	Реалізація стеків за допомогою покажчиків 
	Реалізація стеків за допомогою покажчиків 
	Стек працює за принципом «останнім прийшов — першим вийшов», що позначається абревіатурою LIFO (від англ. Last In First Out), і має такі властивості:
елементи додаються у вершину (голову) стеку;
елементи видаляються з вершини (голови) стеку;
покажчик в останньому елементі дорівнює nil;
неможливо вилучити елемент із середини стеку, не вилучивши всі елементи, що йдуть попереду.
	Для роботи зі стеком достатньо мати покажчик head на його вершину та допоміжний покажчик current на елемент стеку.
Описание слайда:
Реалізація стеків за допомогою покажчиків Реалізація стеків за допомогою покажчиків Стек працює за принципом «останнім прийшов — першим вийшов», що позначається абревіатурою LIFO (від англ. Last In First Out), і має такі властивості: елементи додаються у вершину (голову) стеку; елементи видаляються з вершини (голови) стеку; покажчик в останньому елементі дорівнює nil; неможливо вилучити елемент із середини стеку, не вилучивши всі елементи, що йдуть попереду. Для роботи зі стеком достатньо мати покажчик head на його вершину та допоміжний покажчик current на елемент стеку.

Слайд 27





Алгоритм вставки елемента до стеку
1. Виділити пам'ять для нового елемента стеку: new(current);
Описание слайда:
Алгоритм вставки елемента до стеку 1. Виділити пам'ять для нового елемента стеку: new(current);

Слайд 28





Алгоритм видалення елемента зі стеку
1. Створити копію покажчика на вершину стеку: current :=head;
Описание слайда:
Алгоритм видалення елемента зі стеку 1. Створити копію покажчика на вершину стеку: current :=head;

Слайд 29





	Реалізація стеків за допомогою масивів
	Реалізація стеків за допомогою масивів
	Кожну реалізацію списків можна розглядати як реалізацію стеків, оскільки стеки з їх операторами є окремими випадками списків з операторами, що виконуються над списками. 
	Проте реалізація списків на основі масивів, описана раніше, не дуже підходить для представлення стеків, оскільки кожне виконання операторів додавання і видалення елемента в цьому випадку вимагає переміщення всіх елементів стека і тому час їх виконання пропорційний числу елементів в стеку. Можна раціональніше пристосувати масиви для реалізації стеків, якщо взяти до уваги той факт, що вставка і видалення елементів стека відбувається тільки через вершину стека. Можна зафіксувати "дно" стека в самому низу масиву (у записі з найбільшим індексом) і дозволити стеку рости вгору масиву (до запису з найменшим індексом). Курсор з ім'ям top (вершина) вказуватиме положення поточної позиції першого елементу стека.
Описание слайда:
Реалізація стеків за допомогою масивів Реалізація стеків за допомогою масивів Кожну реалізацію списків можна розглядати як реалізацію стеків, оскільки стеки з їх операторами є окремими випадками списків з операторами, що виконуються над списками. Проте реалізація списків на основі масивів, описана раніше, не дуже підходить для представлення стеків, оскільки кожне виконання операторів додавання і видалення елемента в цьому випадку вимагає переміщення всіх елементів стека і тому час їх виконання пропорційний числу елементів в стеку. Можна раціональніше пристосувати масиви для реалізації стеків, якщо взяти до уваги той факт, що вставка і видалення елементів стека відбувається тільки через вершину стека. Можна зафіксувати "дно" стека в самому низу масиву (у записі з найбільшим індексом) і дозволити стеку рости вгору масиву (до запису з найменшим індексом). Курсор з ім'ям top (вершина) вказуватиме положення поточної позиції першого елементу стека.

Слайд 30


Абстрактні типи даних. (Розділ 3), слайд №30
Описание слайда:

Слайд 31





	Приклади, що ілюструють реалізації АТД “Стек”: 
	Приклади, що ілюструють реалізації АТД “Стек”: 
реалізація за допомогою покажчиків (с.310-315  [4])
ще одна реалізація за допомогою покажчиків     (с.58-60  [1])
реалізація за допомогою масивів (с.60-61  [1]).
Описание слайда:
Приклади, що ілюструють реалізації АТД “Стек”: Приклади, що ілюструють реалізації АТД “Стек”: реалізація за допомогою покажчиків (с.310-315 [4]) ще одна реалізація за допомогою покажчиків (с.58-60 [1]) реалізація за допомогою масивів (с.60-61 [1]).

Слайд 32





3.4. Черга
Література для самостійного читання:
		 с. 57-65 [1], с. 316-325 [4]
Описание слайда:
3.4. Черга Література для самостійного читання: с. 57-65 [1], с. 316-325 [4]

Слайд 33





	Черга, як і стек, — це один із різновидів однозв'язного лінійного списку.
	Черга, як і стек, — це один із різновидів однозв'язного лінійного списку.
	 Для роботи з чергою використовують такі дії:
очищення черги;
зчитування елементу з початку черги;
видалення елемента з початку черги;
додавання елемента з кінець черги;
перевірка, чи порожня черга.
Описание слайда:
Черга, як і стек, — це один із різновидів однозв'язного лінійного списку. Черга, як і стек, — це один із різновидів однозв'язного лінійного списку. Для роботи з чергою використовують такі дії: очищення черги; зчитування елементу з початку черги; видалення елемента з початку черги; додавання елемента з кінець черги; перевірка, чи порожня черга.

Слайд 34





	Реалізація черг за допомогою покажчиків 
	Реалізація черг за допомогою покажчиків 
	Черга працює за принципом «першим прийшов — першим вийшов», що позначається абревіатурою FIFO (від англ. First In First Out), і характеризується такими властивостями: 
елементи додаються в кінець черги;
елементи зчитуються та видаляються з початку (вершини) черги;
покажчик в останньому елементі дорівнює nil;
неможливо отримати елемент із середини черги, не вилучивши всі елементи, що йдуть попереду.
	Для роботи з чергою потрібні: покажчик head на початок черги, покажчик 1ast на кінець черги та допоміжний покажчик current.
Описание слайда:
Реалізація черг за допомогою покажчиків Реалізація черг за допомогою покажчиків Черга працює за принципом «першим прийшов — першим вийшов», що позначається абревіатурою FIFO (від англ. First In First Out), і характеризується такими властивостями: елементи додаються в кінець черги; елементи зчитуються та видаляються з початку (вершини) черги; покажчик в останньому елементі дорівнює nil; неможливо отримати елемент із середини черги, не вилучивши всі елементи, що йдуть попереду. Для роботи з чергою потрібні: покажчик head на початок черги, покажчик 1ast на кінець черги та допоміжний покажчик current.

Слайд 35





Алгоритм вставки елемента до черги
1. Виділити пам'ять для нового елемента черги: new(current);
Описание слайда:
Алгоритм вставки елемента до черги 1. Виділити пам'ять для нового елемента черги: new(current);

Слайд 36





	Реалізація черг за допомогою циклічних масивів 
	Реалізація черг за допомогою циклічних масивів 
	Реалізацію списків за допомогою масивів, яка розглядалася раніше, можна застосувати для черг, але в даному випадку це не раціонально, бо за допомогою покажчика на останній елемент черги можна виконати додавання елемента за фіксоване число кроків (незалежне від довжини черги), але оператор видалення елемента, який видаляє перший елемент, вимагає переміщення всіх елементів черги на одну позицію в масиві.
	Щоб уникнути цих обчислювальних витрат, представимо масив у вигляді циклічної структури, де перший запис масиву слідує за останнім
Описание слайда:
Реалізація черг за допомогою циклічних масивів Реалізація черг за допомогою циклічних масивів Реалізацію списків за допомогою масивів, яка розглядалася раніше, можна застосувати для черг, але в даному випадку це не раціонально, бо за допомогою покажчика на останній елемент черги можна виконати додавання елемента за фіксоване число кроків (незалежне від довжини черги), але оператор видалення елемента, який видаляє перший елемент, вимагає переміщення всіх елементів черги на одну позицію в масиві. Щоб уникнути цих обчислювальних витрат, представимо масив у вигляді циклічної структури, де перший запис масиву слідує за останнім

Слайд 37


Абстрактні типи даних. (Розділ 3), слайд №37
Описание слайда:

Слайд 38





	Елементи черги розташовуються в "колі" записів в послідовних позиціях, кінець черги знаходиться за годинниковою стрілкою на певній відстані від початку. Тепер для вставки нового елементу в чергу достатньо перемістити покажчик на кінець черги на одну позицію за годинниковою стрілкою і записати елемент в цю позицію. При видаленні елементу з черги треба просто перемістити покажчик на початок черги за годинниковою стрілкою на одну позицію.
	Елементи черги розташовуються в "колі" записів в послідовних позиціях, кінець черги знаходиться за годинниковою стрілкою на певній відстані від початку. Тепер для вставки нового елементу в чергу достатньо перемістити покажчик на кінець черги на одну позицію за годинниковою стрілкою і записати елемент в цю позицію. При видаленні елементу з черги треба просто перемістити покажчик на початок черги за годинниковою стрілкою на одну позицію.
Описание слайда:
Елементи черги розташовуються в "колі" записів в послідовних позиціях, кінець черги знаходиться за годинниковою стрілкою на певній відстані від початку. Тепер для вставки нового елементу в чергу достатньо перемістити покажчик на кінець черги на одну позицію за годинниковою стрілкою і записати елемент в цю позицію. При видаленні елементу з черги треба просто перемістити покажчик на початок черги за годинниковою стрілкою на одну позицію. Елементи черги розташовуються в "колі" записів в послідовних позиціях, кінець черги знаходиться за годинниковою стрілкою на певній відстані від початку. Тепер для вставки нового елементу в чергу достатньо перемістити покажчик на кінець черги на одну позицію за годинниковою стрілкою і записати елемент в цю позицію. При видаленні елементу з черги треба просто перемістити покажчик на початок черги за годинниковою стрілкою на одну позицію.

Слайд 39





	Приклади, що ілюструють реалізації АТД “Черга”: 
	Приклади, що ілюструють реалізації АТД “Черга”: 
реалізація за допомогою покажчиків (с.316-319  [4])
ще одна реалізація за допомогою покажчиків     (с.62-63  [1])
реалізація за допомогою масивів (с.63-66  [1]).
Описание слайда:
Приклади, що ілюструють реалізації АТД “Черга”: Приклади, що ілюструють реалізації АТД “Черга”: реалізація за допомогою покажчиків (с.316-319 [4]) ще одна реалізація за допомогою покажчиків (с.62-63 [1]) реалізація за допомогою масивів (с.63-66 [1]).

Слайд 40





3.5. Однозв'язний лінійний список
Література для самостійного читання:
		 с. 60-66 [1], с. 319-325 [4]
Описание слайда:
3.5. Однозв'язний лінійний список Література для самостійного читання: с. 60-66 [1], с. 319-325 [4]

Слайд 41





	Стек і черга є лінійними списками, множина допустимих операцій над якими обмежена операціями над першим або останнім елементом. Розглянемо списки, над якими припустимі довільні дії. 
	Стек і черга є лінійними списками, множина допустимих операцій над якими обмежена операціями над першим або останнім елементом. Розглянемо списки, над якими припустимі довільні дії. 
	Найбільш ефективно у спискових структурах реалізуються операції вставки та видалення елементів, оскільки вони, на відміну від операцій видалення та вставки елементів масиву, не потребують зсуву групи елементів.
Описание слайда:
Стек і черга є лінійними списками, множина допустимих операцій над якими обмежена операціями над першим або останнім елементом. Розглянемо списки, над якими припустимі довільні дії. Стек і черга є лінійними списками, множина допустимих операцій над якими обмежена операціями над першим або останнім елементом. Розглянемо списки, над якими припустимі довільні дії. Найбільш ефективно у спискових структурах реалізуються операції вставки та видалення елементів, оскільки вони, на відміну від операцій видалення та вставки елементів масиву, не потребують зсуву групи елементів.

Слайд 42





	Всі можливі варіанти застосування операцій вставки та видалення елементів у списку: 
	Всі можливі варіанти застосування операцій вставки та видалення елементів у списку: 
створення списку, тобто внесення першого елемента до списку;
додавання елемента в кінець списку;
додавання елемента на початок списку;
вставка елемента в середину списку;
видалення елемента з початку списку;
видалення елемента з кінця списку;
видалення елемента з середини списку.	
	 У загальному випадку для роботи з однозв'язним лінійним списком потрібні такі покажчики: покажчик head на початок списку; покажчик current на поточний елемент списку; покажчик previous на елемент, розташований перед поточним; покажчик newptr на елемент, що додається до списку, та покажчик last на кінець списку. У розв'язаннях конкретних задач можуть використовуватися не всі покажчики.
Описание слайда:
Всі можливі варіанти застосування операцій вставки та видалення елементів у списку: Всі можливі варіанти застосування операцій вставки та видалення елементів у списку: створення списку, тобто внесення першого елемента до списку; додавання елемента в кінець списку; додавання елемента на початок списку; вставка елемента в середину списку; видалення елемента з початку списку; видалення елемента з кінця списку; видалення елемента з середини списку. У загальному випадку для роботи з однозв'язним лінійним списком потрібні такі покажчики: покажчик head на початок списку; покажчик current на поточний елемент списку; покажчик previous на елемент, розташований перед поточним; покажчик newptr на елемент, що додається до списку, та покажчик last на кінець списку. У розв'язаннях конкретних задач можуть використовуватися не всі покажчики.

Слайд 43





	Додавання елемента в кінець списку виконується за алгоритмом додавання елемента до черги, а на початок списку — за алгоритмом додавання елемента до стеку. Операція видалення елемента з початку списку здійснюється за алгоритмом видалення елемента зі стеку або з черги.
	Додавання елемента в кінець списку виконується за алгоритмом додавання елемента до черги, а на початок списку — за алгоритмом додавання елемента до стеку. Операція видалення елемента з початку списку здійснюється за алгоритмом видалення елемента зі стеку або з черги.
 	Запишемо алгоритми решти операцій, припускаючи, що при додаванні елемента для нього вже була створена динамічна змінна newptr^ та було введене значення у його поле data. 
Алгоритм створення одноелементного списку
1. Ініціалізувати початок списку: head:=newptr;
2. Ініціалізувати кінець списку: last:=newptr;
3. Записати ознаку того, що перший елемент є останнім: head^.next:=nil;
Описание слайда:
Додавання елемента в кінець списку виконується за алгоритмом додавання елемента до черги, а на початок списку — за алгоритмом додавання елемента до стеку. Операція видалення елемента з початку списку здійснюється за алгоритмом видалення елемента зі стеку або з черги. Додавання елемента в кінець списку виконується за алгоритмом додавання елемента до черги, а на початок списку — за алгоритмом додавання елемента до стеку. Операція видалення елемента з початку списку здійснюється за алгоритмом видалення елемента зі стеку або з черги. Запишемо алгоритми решти операцій, припускаючи, що при додаванні елемента для нього вже була створена динамічна змінна newptr^ та було введене значення у його поле data. Алгоритм створення одноелементного списку 1. Ініціалізувати початок списку: head:=newptr; 2. Ініціалізувати кінець списку: last:=newptr; 3. Записати ознаку того, що перший елемент є останнім: head^.next:=nil;

Слайд 44





Алгоритм вставки елемента в середину списку
1. Новий елемент вважати наступним для previous^: 
	previous^.next:= newptr;
Описание слайда:
Алгоритм вставки елемента в середину списку 1. Новий елемент вважати наступним для previous^: previous^.next:= newptr;

Слайд 45





Алгоритм видалення елемента з середини списку
1. Вважати, що за елементом previous^ буде
розташований той елемент, що раніше знаходився за 
елементом current^: 
	previous^.next:=current^.next;
Описание слайда:
Алгоритм видалення елемента з середини списку 1. Вважати, що за елементом previous^ буде розташований той елемент, що раніше знаходився за елементом current^: previous^.next:=current^.next;

Слайд 46





Алгоритм видалення елемента з кінця списку
1. Записати до передостаннього елемента ознаку кінця
списку: 
	previous^.next: = ni1;
Описание слайда:
Алгоритм видалення елемента з кінця списку 1. Записати до передостаннього елемента ознаку кінця списку: previous^.next: = ni1;

Слайд 47





	Приклад. Алгоритм роботи з алфавітним переліком слів.
	Приклад. Алгоритм роботи з алфавітним переліком слів.
1. Вважати список порожнім.
2. Вивести меню для роботи зі списком.
3. Якщо натиснута клавіша І, додати елемент до списку.
3.1.  Виділити пам'ять для нового елемента.
3.2.  Ввести нове слово та ініціалізувати ним поле даних нового елемента.
3.3. Якщо список порожній, вважати щойно утворений елемент списком. 
3.4. Якщо список непорожній, визначити місце розташування нового елемента та вставити його до списку.
Описание слайда:
Приклад. Алгоритм роботи з алфавітним переліком слів. Приклад. Алгоритм роботи з алфавітним переліком слів. 1. Вважати список порожнім. 2. Вивести меню для роботи зі списком. 3. Якщо натиснута клавіша І, додати елемент до списку. 3.1. Виділити пам'ять для нового елемента. 3.2. Ввести нове слово та ініціалізувати ним поле даних нового елемента. 3.3. Якщо список порожній, вважати щойно утворений елемент списком. 3.4. Якщо список непорожній, визначити місце розташування нового елемента та вставити його до списку.

Слайд 48





4. Якщо натиснута клавіша D, видалити елемент зі списку.
4. Якщо натиснута клавіша D, видалити елемент зі списку.
4.1.  Ввести слово, що видаляється.
4.2. Якщо список порожній, вивести відповідне повідомлення.
4.3. Якщо список непорожній, проглядати значення елементів списку доти, доки введене слово не буде знайдено або доки список не буде вичерпано.
4.4. Якщо елемент із введеним значенням поля даних було знайдено, то його слід видалити.
4.5. Якщо введене слово не збігається зі значенням інформаційного поля жодного елемента списку, вивести повідомлення про відсутність шуканого елемента у списку.
5. Якщо натиснута клавіша Q, вийти з програми.
Описание слайда:
4. Якщо натиснута клавіша D, видалити елемент зі списку. 4. Якщо натиснута клавіша D, видалити елемент зі списку. 4.1. Ввести слово, що видаляється. 4.2. Якщо список порожній, вивести відповідне повідомлення. 4.3. Якщо список непорожній, проглядати значення елементів списку доти, доки введене слово не буде знайдено або доки список не буде вичерпано. 4.4. Якщо елемент із введеним значенням поля даних було знайдено, то його слід видалити. 4.5. Якщо введене слово не збігається зі значенням інформаційного поля жодного елемента списку, вивести повідомлення про відсутність шуканого елемента у списку. 5. Якщо натиснута клавіша Q, вийти з програми.

Слайд 49





	Приклади, що ілюструють реалізації АТД “Однозв'язний лінійний список”: 
	Приклади, що ілюструють реалізації АТД “Однозв'язний лінійний список”: 
реалізація за допомогою покажчиків (с.319-325  [4])
ще одна реалізація за допомогою покажчиків     (с.50-53  [1])
реалізація за допомогою масивів (с.48-50  [1]).
Описание слайда:
Приклади, що ілюструють реалізації АТД “Однозв'язний лінійний список”: Приклади, що ілюструють реалізації АТД “Однозв'язний лінійний список”: реалізація за допомогою покажчиків (с.319-325 [4]) ще одна реалізація за допомогою покажчиків (с.50-53 [1]) реалізація за допомогою масивів (с.48-50 [1]).

Слайд 50





3.6. Двозв'язний лінійний список
Література для самостійного читання:
		 с. 57-58 [1]
Описание слайда:
3.6. Двозв'язний лінійний список Література для самостійного читання: с. 57-58 [1]

Слайд 51





	 Часто виникає необхідність організувати ефективне пересування по списку як в прямому, так і в зворотному напрямах. Або по заданому елементу потрібно швидко знайти передуючий йому і наступний елементи. У цих ситуаціях можна дати кожному запису покажчики і на наступний, і на попередній записи у списку, тобто організувати двічі зв'язний список. 
	 Часто виникає необхідність організувати ефективне пересування по списку як в прямому, так і в зворотному напрямах. Або по заданому елементу потрібно швидко знайти передуючий йому і наступний елементи. У цих ситуаціях можна дати кожному запису покажчики і на наступний, і на попередній записи у списку, тобто організувати двічі зв'язний список. 
	З прикладом реалізації можна ознайомитись в (с.57-58  [1]).
Описание слайда:
Часто виникає необхідність організувати ефективне пересування по списку як в прямому, так і в зворотному напрямах. Або по заданому елементу потрібно швидко знайти передуючий йому і наступний елементи. У цих ситуаціях можна дати кожному запису покажчики і на наступний, і на попередній записи у списку, тобто організувати двічі зв'язний список. Часто виникає необхідність організувати ефективне пересування по списку як в прямому, так і в зворотному напрямах. Або по заданому елементу потрібно швидко знайти передуючий йому і наступний елементи. У цих ситуаціях можна дати кожному запису покажчики і на наступний, і на попередній записи у списку, тобто організувати двічі зв'язний список. З прикладом реалізації можна ознайомитись в (с.57-58 [1]).

Слайд 52





3.7. Відображення
Література для самостійного читання:
		 с. 66-68 [1]
Описание слайда:
3.7. Відображення Література для самостійного читання: с. 66-68 [1]

Слайд 53





	Відображення - це функція, визначена на множині елементів одного типу (області визначення), що приймає значення з множини елементів другого типу (області значень)  (звичайно, типи можуть співпадати). 
	Відображення - це функція, визначена на множині елементів одного типу (області визначення), що приймає значення з множини елементів другого типу (області значень)  (звичайно, типи можуть співпадати). 
	Той факт, що відображення М ставить у відповідність елемент d з області визначення елементу r з області значень, записуватимемо як M(d)=r. Деякі відображення, подібні square(i)=i2, легко реалізувати з допомогою функцій і арифметичних виразів мови Pascal. Але для багатьох відображень немає очевидних способів реалізації, окрім зберігання для кожного d значення M(d). Наприклад, для реалізації функції, що ставить у відповідність працівникам їх зарплату, потрібно зберігати поточний заробіток кожного працівника.
Описание слайда:
Відображення - це функція, визначена на множині елементів одного типу (області визначення), що приймає значення з множини елементів другого типу (області значень) (звичайно, типи можуть співпадати). Відображення - це функція, визначена на множині елементів одного типу (області визначення), що приймає значення з множини елементів другого типу (області значень) (звичайно, типи можуть співпадати). Той факт, що відображення М ставить у відповідність елемент d з області визначення елементу r з області значень, записуватимемо як M(d)=r. Деякі відображення, подібні square(i)=i2, легко реалізувати з допомогою функцій і арифметичних виразів мови Pascal. Але для багатьох відображень немає очевидних способів реалізації, окрім зберігання для кожного d значення M(d). Наприклад, для реалізації функції, що ставить у відповідність працівникам їх зарплату, потрібно зберігати поточний заробіток кожного працівника.

Слайд 54





	Перелік операторів, які можна виконати над відображенням М.
	Перелік операторів, які можна виконати над відображенням М.
перетворення відображення на порожнє;
призначення M(d)=r незалежно від того, як M(d) було визначено раніше;
повернення значення M(d), якщо воно визначено, і повідомлення про невизначеність в протилежному випадку.
Описание слайда:
Перелік операторів, які можна виконати над відображенням М. Перелік операторів, які можна виконати над відображенням М. перетворення відображення на порожнє; призначення M(d)=r незалежно від того, як M(d) було визначено раніше; повернення значення M(d), якщо воно визначено, і повідомлення про невизначеність в протилежному випадку.

Слайд 55





	Реалізація відображень за допомогою масивів 
	Реалізація відображень за допомогою масивів 
	У багатьох випадках тип елементів області визначення відображення є простим типом, який можна використовувати як тип індексів масивів. У мові Pascal типи індексів включають всі кінцеві інтервали цілих чисел, наприклад 1..100 або 17..23, рядковий тип, діапазони символів, подібні 'A'...'Z', і нечислові типи, наприклад північ, схід, південь, захід. Зокрема, в програмах кодування можна застосувати відображення crypt (шифратор) множиною 'A'...'Z' і в якості області визначення, і в якості області значень, так що сrурt (текст) буде кодом тексту текст. 
	Такі відображення просто реалізувати за допомогою масивів, припускаючи, що деякі значення з області значень можуть мати статус "невизначений". Наприклад, для відображення crypt, описаного вище, область значень можна визначити інакше, ніж 'A'...'Z', і використовувати символ '?' для позначення "невизначений".
Описание слайда:
Реалізація відображень за допомогою масивів Реалізація відображень за допомогою масивів У багатьох випадках тип елементів області визначення відображення є простим типом, який можна використовувати як тип індексів масивів. У мові Pascal типи індексів включають всі кінцеві інтервали цілих чисел, наприклад 1..100 або 17..23, рядковий тип, діапазони символів, подібні 'A'...'Z', і нечислові типи, наприклад північ, схід, південь, захід. Зокрема, в програмах кодування можна застосувати відображення crypt (шифратор) множиною 'A'...'Z' і в якості області визначення, і в якості області значень, так що сrурt (текст) буде кодом тексту текст. Такі відображення просто реалізувати за допомогою масивів, припускаючи, що деякі значення з області значень можуть мати статус "невизначений". Наприклад, для відображення crypt, описаного вище, область значень можна визначити інакше, ніж 'A'...'Z', і використовувати символ '?' для позначення "невизначений".

Слайд 56





	Реалізація відображень за допомогою списків
	Реалізація відображень за допомогою списків

	Існує багато реалізацій відображень з кінцевою областю визначення. Наприклад, в багатьох ситуаціях відмінним вибором будуть хеш-таблиці. Інші відображення з кінцевою областю визначення можна представити у вигляді списку пар (d1, r1) (d2, r2) .... (dk, rk), де d1 d2 ..., dk - всі поточні елементи області визначення, а r1, r2 ..., rk - значення, що асоціюються з di (i = 1, 2 ..., k). Далі можна використовувати будь-яку реалізацію списків.
	Приклади, що ілюструють реалізації АТД “Однозв'язний лінійний список”: 
реалізація за допомогою покажчиків (с.68  [1])
реалізація за допомогою масивів (с.67  [1])
реалізація за допомогою хеш-таблиць (с.116-128  [1]).
Описание слайда:
Реалізація відображень за допомогою списків Реалізація відображень за допомогою списків Існує багато реалізацій відображень з кінцевою областю визначення. Наприклад, в багатьох ситуаціях відмінним вибором будуть хеш-таблиці. Інші відображення з кінцевою областю визначення можна представити у вигляді списку пар (d1, r1) (d2, r2) .... (dk, rk), де d1 d2 ..., dk - всі поточні елементи області визначення, а r1, r2 ..., rk - значення, що асоціюються з di (i = 1, 2 ..., k). Далі можна використовувати будь-яку реалізацію списків. Приклади, що ілюструють реалізації АТД “Однозв'язний лінійний список”: реалізація за допомогою покажчиків (с.68 [1]) реалізація за допомогою масивів (с.67 [1]) реалізація за допомогою хеш-таблиць (с.116-128 [1]).

Слайд 57





3.8. АТД “Дерево”
Література для самостійного читання:
		 с. 77-89 [1], с. 326-330 [4]
Описание слайда:
3.8. АТД “Дерево” Література для самостійного читання: с. 77-89 [1], с. 326-330 [4]

Слайд 58





	Розглянуті раніше списки, стеки та черги належать до лінійних динамічних структур даних. Визначальною характеристикою лінійних структур є те, що зв'язок між їхніми компонентами описується в термінах «попередній-наступний», тобто для кожного компонента лінійної структури визначено не більше одного попереднього та не більше одного наступного компонента. 
	Розглянуті раніше списки, стеки та черги належать до лінійних динамічних структур даних. Визначальною характеристикою лінійних структур є те, що зв'язок між їхніми компонентами описується в термінах «попередній-наступний», тобто для кожного компонента лінійної структури визначено не більше одного попереднього та не більше одного наступного компонента. 
	Деревоподібна структура даних, або дерево, є нелінійною структурою, що зображує ієрархічні зв'язки типу «предок-нащадок»: компонент-предок може мати багато нащадків, хоча для кожного компонента-нащадка визначено не більше одного предка.
	Щоб згадати термінологію можна почитати (с.77-83 [1], с.326-327 [4] ).
Описание слайда:
Розглянуті раніше списки, стеки та черги належать до лінійних динамічних структур даних. Визначальною характеристикою лінійних структур є те, що зв'язок між їхніми компонентами описується в термінах «попередній-наступний», тобто для кожного компонента лінійної структури визначено не більше одного попереднього та не більше одного наступного компонента. Розглянуті раніше списки, стеки та черги належать до лінійних динамічних структур даних. Визначальною характеристикою лінійних структур є те, що зв'язок між їхніми компонентами описується в термінах «попередній-наступний», тобто для кожного компонента лінійної структури визначено не більше одного попереднього та не більше одного наступного компонента. Деревоподібна структура даних, або дерево, є нелінійною структурою, що зображує ієрархічні зв'язки типу «предок-нащадок»: компонент-предок може мати багато нащадків, хоча для кожного компонента-нащадка визначено не більше одного предка. Щоб згадати термінологію можна почитати (с.77-83 [1], с.326-327 [4] ).

Слайд 59





	Представлення дерев за допомогою масивів
	Представлення дерев за допомогою масивів
	Нехай Т - дерево з вузлами 1, 2 ..., n. Найпростішим представленням дерева Т, що підтримує оператор визначення батька вузла, буде лінійний масив А, де кожен елемент А[i] є покажчиком або курсором на батька вузла i. Корінь дерева Т відрізняється від інших вузлів тим, що має нульовий покажчик або покажчик на самого себе як на батька. 
	Дане уявлення використовує властивість дерев, що кожен вузол, відмінний від кореня, має тільки одного батька. Використовуючи це уявлення, батька будь-якого вузла можна знайти за фіксований час. Проходження по будь-якому шляху, тобто перехід по вузлах від батька до батька, можна виконати за час, пропорційний кількості вузлів шляху.
Описание слайда:
Представлення дерев за допомогою масивів Представлення дерев за допомогою масивів Нехай Т - дерево з вузлами 1, 2 ..., n. Найпростішим представленням дерева Т, що підтримує оператор визначення батька вузла, буде лінійний масив А, де кожен елемент А[i] є покажчиком або курсором на батька вузла i. Корінь дерева Т відрізняється від інших вузлів тим, що має нульовий покажчик або покажчик на самого себе як на батька. Дане уявлення використовує властивість дерев, що кожен вузол, відмінний від кореня, має тільки одного батька. Використовуючи це уявлення, батька будь-якого вузла можна знайти за фіксований час. Проходження по будь-якому шляху, тобто перехід по вузлах від батька до батька, можна виконати за час, пропорційний кількості вузлів шляху.

Слайд 60


Абстрактні типи даних. (Розділ 3), слайд №60
Описание слайда:

Слайд 61





	Використання покажчиків або курсорів на батьків не допомагає в реалізації операторів, що вимагають інформацію про синів. Використовуючи описане представлення, вкрай важко для даного вузла n знайти його синів або визначити його висоту. Крім того, в цьому випадку неможливо визначити порядок синів вузла (тобто який син знаходиться правішим або лівішим за іншого сина).
	Використання покажчиків або курсорів на батьків не допомагає в реалізації операторів, що вимагають інформацію про синів. Використовуючи описане представлення, вкрай важко для даного вузла n знайти його синів або визначити його висоту. Крім того, в цьому випадку неможливо визначити порядок синів вузла (тобто який син знаходиться правішим або лівішим за іншого сина).
	З прикладом реалізації можна ознайомитись в (с.86  [1]).
Описание слайда:
Використання покажчиків або курсорів на батьків не допомагає в реалізації операторів, що вимагають інформацію про синів. Використовуючи описане представлення, вкрай важко для даного вузла n знайти його синів або визначити його висоту. Крім того, в цьому випадку неможливо визначити порядок синів вузла (тобто який син знаходиться правішим або лівішим за іншого сина). Використання покажчиків або курсорів на батьків не допомагає в реалізації операторів, що вимагають інформацію про синів. Використовуючи описане представлення, вкрай важко для даного вузла n знайти його синів або визначити його висоту. Крім того, в цьому випадку неможливо визначити порядок синів вузла (тобто який син знаходиться правішим або лівішим за іншого сина). З прикладом реалізації можна ознайомитись в (с.86 [1]).

Слайд 62





Представлення дерев з використанням списків синів 
Представлення дерев з використанням списків синів 
	Важливий і корисний спосіб представлення дерев полягає у формуванні для кожного вузла списку його синів. Ці списки можна представити будь-яким методом для представлення списків, але, оскільки число синів у різних вузлів може бути різним, найчастіше для цих цілей застосовуються зв'язані списки.
Описание слайда:
Представлення дерев з використанням списків синів Представлення дерев з використанням списків синів Важливий і корисний спосіб представлення дерев полягає у формуванні для кожного вузла списку його синів. Ці списки можна представити будь-яким методом для представлення списків, але, оскільки число синів у різних вузлів може бути різним, найчастіше для цих цілей застосовуються зв'язані списки.

Слайд 63


Абстрактні типи даних. (Розділ 3), слайд №63
Описание слайда:

Слайд 64





	Серед недоліків такої структури даних можна назвати те, що вона не дозволяє створювати великі дерева з малих. Це є наслідком того, що всі дерева спільно використовують один масив для представлення зв'язаних списків синів; по суті, кожне дерево має власний масив заголовків для своїх вузлів. 
	Серед недоліків такої структури даних можна назвати те, що вона не дозволяє створювати великі дерева з малих. Це є наслідком того, що всі дерева спільно використовують один масив для представлення зв'язаних списків синів; по суті, кожне дерево має власний масив заголовків для своїх вузлів. 
	З прикладом реалізації, що виправляє цей недолік,  можна ознайомитись в (с.88-91  [1]).
Описание слайда:
Серед недоліків такої структури даних можна назвати те, що вона не дозволяє створювати великі дерева з малих. Це є наслідком того, що всі дерева спільно використовують один масив для представлення зв'язаних списків синів; по суті, кожне дерево має власний масив заголовків для своїх вузлів. Серед недоліків такої структури даних можна назвати те, що вона не дозволяє створювати великі дерева з малих. Це є наслідком того, що всі дерева спільно використовують один масив для представлення зв'язаних списків синів; по суті, кожне дерево має власний масив заголовків для своїх вузлів. З прикладом реалізації, що виправляє цей недолік, можна ознайомитись в (с.88-91 [1]).

Слайд 65





3.9. Бінарні дерева
Література для самостійного читання:
		 с. 91-99 [1], с. 328-336 [4]
Описание слайда:
3.9. Бінарні дерева Література для самостійного читання: с. 91-99 [1], с. 328-336 [4]

Слайд 66





	Представлення бінарних дерев за допомогою масивів
	Представлення бінарних дерев за допомогою масивів
	Якщо іменами вузлів бінарного дерева є їх номери 1,2, … n, то підходящою структурою для представлення цього дерева може бути масив записів з полями “лівий син” та “правий син”.
Описание слайда:
Представлення бінарних дерев за допомогою масивів Представлення бінарних дерев за допомогою масивів Якщо іменами вузлів бінарного дерева є їх номери 1,2, … n, то підходящою структурою для представлення цього дерева може бути масив записів з полями “лівий син” та “правий син”.

Слайд 67





	Представлення бінарних дерев за допомогою нелінійних динамічних структур
	Представлення бінарних дерев за допомогою нелінійних динамічних структур
	Будь-який вузол бінарного дерева може бути зв'язаним не більше ніж із двома піддеревами, що називаються лівим і правим піддеревами вузла. Оголошення типу вузла бінарного дерева на мові Pascal може бути таким:
Описание слайда:
Представлення бінарних дерев за допомогою нелінійних динамічних структур Представлення бінарних дерев за допомогою нелінійних динамічних структур Будь-який вузол бінарного дерева може бути зв'язаним не більше ніж із двома піддеревами, що називаються лівим і правим піддеревами вузла. Оголошення типу вузла бінарного дерева на мові Pascal може бути таким:

Слайд 68





	Приклад бінарного дерева як динамічної структури даних 
	Приклад бінарного дерева як динамічної структури даних
Описание слайда:
Приклад бінарного дерева як динамічної структури даних Приклад бінарного дерева як динамічної структури даних

Слайд 69





	Алгоритми роботи з бінарними деревами
	Алгоритми роботи з бінарними деревами

	Створення бінарного дерева

	Найпростіший спосіб побудови бінарного дерева полягає у створенні дерева симетричної структури із наперед відомою кількістю вузлів. Усі вузли-нащадки, що створюються, рівномірно розподіляються зліва та справа від кожного вузла-предка. При цьому досягається мінімально можлива глибина для заданої кількості вузлів дерева. Правило рівномірного розподілу п вузлів можна визначити рекурсивно:
перший вузол вважати коренем дерева;
створити ліве піддерево з кількістю вузлів nleft=п div 2;
створити праве піддерево з кількістю вузлів nright=п-nleft–1.
Описание слайда:
Алгоритми роботи з бінарними деревами Алгоритми роботи з бінарними деревами Створення бінарного дерева Найпростіший спосіб побудови бінарного дерева полягає у створенні дерева симетричної структури із наперед відомою кількістю вузлів. Усі вузли-нащадки, що створюються, рівномірно розподіляються зліва та справа від кожного вузла-предка. При цьому досягається мінімально можлива глибина для заданої кількості вузлів дерева. Правило рівномірного розподілу п вузлів можна визначити рекурсивно: перший вузол вважати коренем дерева; створити ліве піддерево з кількістю вузлів nleft=п div 2; створити праве піддерево з кількістю вузлів nright=п-nleft–1.

Слайд 70





	Приклад. Створення бінарного дерева із заданою користувачем кількістю вузлів. 
	Приклад. Створення бінарного дерева із заданою користувачем кількістю вузлів. 
	 Оскільки структура дерева визначена рекурсивно, то для його створення та відображення можна розробити рекурсивні підпрограми.
Описание слайда:
Приклад. Створення бінарного дерева із заданою користувачем кількістю вузлів. Приклад. Створення бінарного дерева із заданою користувачем кількістю вузлів. Оскільки структура дерева визначена рекурсивно, то для його створення та відображення можна розробити рекурсивні підпрограми.

Слайд 71





	Функція створення дерева tree отримує один цілочисловий параметр AmountNode, що визначає кількість вузлів дерева та повертає покажчик на його корінь. Якщо кількість вузлів дорівнює нулю, дерево порожнє, а отже, виконано умову завершення рекурсії і функція має повернути значення nil. Якщо кількість вузлів дерева відрізняється від нуля, необхідно виділити пам'ять для кореня дерева, за наведеними вище формулами обчислити кількість вузлів у лівому та правому піддеревах і двічі рекурсивно викликати функцію tree для створення піддерев. Для посилання на корінь дерева використано локальний покажчик newnode. Значення покажчиків на корені піддерев, що їх повертатиме функція tree в результаті рекурсивних викликів, слід присвоїти полям left та right змінної newnode^. 
	Функція створення дерева tree отримує один цілочисловий параметр AmountNode, що визначає кількість вузлів дерева та повертає покажчик на його корінь. Якщо кількість вузлів дорівнює нулю, дерево порожнє, а отже, виконано умову завершення рекурсії і функція має повернути значення nil. Якщо кількість вузлів дерева відрізняється від нуля, необхідно виділити пам'ять для кореня дерева, за наведеними вище формулами обчислити кількість вузлів у лівому та правому піддеревах і двічі рекурсивно викликати функцію tree для створення піддерев. Для посилання на корінь дерева використано локальний покажчик newnode. Значення покажчиків на корені піддерев, що їх повертатиме функція tree в результаті рекурсивних викликів, слід присвоїти полям left та right змінної newnode^.
Описание слайда:
Функція створення дерева tree отримує один цілочисловий параметр AmountNode, що визначає кількість вузлів дерева та повертає покажчик на його корінь. Якщо кількість вузлів дорівнює нулю, дерево порожнє, а отже, виконано умову завершення рекурсії і функція має повернути значення nil. Якщо кількість вузлів дерева відрізняється від нуля, необхідно виділити пам'ять для кореня дерева, за наведеними вище формулами обчислити кількість вузлів у лівому та правому піддеревах і двічі рекурсивно викликати функцію tree для створення піддерев. Для посилання на корінь дерева використано локальний покажчик newnode. Значення покажчиків на корені піддерев, що їх повертатиме функція tree в результаті рекурсивних викликів, слід присвоїти полям left та right змінної newnode^. Функція створення дерева tree отримує один цілочисловий параметр AmountNode, що визначає кількість вузлів дерева та повертає покажчик на його корінь. Якщо кількість вузлів дорівнює нулю, дерево порожнє, а отже, виконано умову завершення рекурсії і функція має повернути значення nil. Якщо кількість вузлів дерева відрізняється від нуля, необхідно виділити пам'ять для кореня дерева, за наведеними вище формулами обчислити кількість вузлів у лівому та правому піддеревах і двічі рекурсивно викликати функцію tree для створення піддерев. Для посилання на корінь дерева використано локальний покажчик newnode. Значення покажчиків на корені піддерев, що їх повертатиме функція tree в результаті рекурсивних викликів, слід присвоїти полям left та right змінної newnode^.

Слайд 72


Абстрактні типи даних. (Розділ 3), слайд №72
Описание слайда:

Слайд 73





	Дерево відображатиме рекурсивна процедура printtree. Піддерево рівня L виводитиметься так: спочатку буде відображене ліве піддерево, потім - корінь піддерева рівня L, перед яким буде виведено L пробілів, далі - праве піддерево. 
	Дерево відображатиме рекурсивна процедура printtree. Піддерево рівня L виводитиметься так: спочатку буде відображене ліве піддерево, потім - корінь піддерева рівня L, перед яким буде виведено L пробілів, далі - праве піддерево.
Описание слайда:
Дерево відображатиме рекурсивна процедура printtree. Піддерево рівня L виводитиметься так: спочатку буде відображене ліве піддерево, потім - корінь піддерева рівня L, перед яким буде виведено L пробілів, далі - праве піддерево. Дерево відображатиме рекурсивна процедура printtree. Піддерево рівня L виводитиметься так: спочатку буде відображене ліве піддерево, потім - корінь піддерева рівня L, перед яким буде виведено L пробілів, далі - праве піддерево.

Слайд 74


Абстрактні типи даних. (Розділ 3), слайд №74
Описание слайда:

Слайд 75





	Обхід дерева
	Обхід дерева

	Алгоритм доступу до всіх вузлів дерева називається обходом дерева. Трьома основними способами обходу дерева є обхід зверху вниз (в прямому порядку), зліва направо (в симетричному порядку) та знизу вверх (в зворотньому порядку). 
	У результаті обходу синтаксичного дерева зверху вниз утворюється префіксна форма виразу, при обході знизу вверх — постфіксна форма, а при обході зліва направо — інфіксна форма.
Описание слайда:
Обхід дерева Обхід дерева Алгоритм доступу до всіх вузлів дерева називається обходом дерева. Трьома основними способами обходу дерева є обхід зверху вниз (в прямому порядку), зліва направо (в симетричному порядку) та знизу вверх (в зворотньому порядку). У результаті обходу синтаксичного дерева зверху вниз утворюється префіксна форма виразу, при обході знизу вверх — постфіксна форма, а при обході зліва направо — інфіксна форма.

Слайд 76





	Результати обходу дерева.
	Результати обходу дерева.
Описание слайда:
Результати обходу дерева. Результати обходу дерева.

Слайд 77





	Будь-який спосіб обходу дерева можна реалізувати рекурсивною процедурою.
	Будь-який спосіб обходу дерева можна реалізувати рекурсивною процедурою.
	До цих процедур передається параметр-значення, що є покажчиком на корінь дерева. Тіло всіх трьох процедур містить однаковий набір операторів. Першою виконується перевірка того, чи не є дерево порожнім. Якщо дерево порожнє, здійснюється рекурсивне повернення, а в іншому разі виводиться значення вузла і рекурсивно викликаються процедури обходу для лівого та правого піддерев. Порядок цих трьох операторів і визначає форму виразу, що буде створений у результаті обходу. А саме, якщо виведення значення вузла виконуватиметься першим, то буде отримано префіксну форму виразу, якщо другим — інфіксну, а якщо третім — постфіксну форму.
Описание слайда:
Будь-який спосіб обходу дерева можна реалізувати рекурсивною процедурою. Будь-який спосіб обходу дерева можна реалізувати рекурсивною процедурою. До цих процедур передається параметр-значення, що є покажчиком на корінь дерева. Тіло всіх трьох процедур містить однаковий набір операторів. Першою виконується перевірка того, чи не є дерево порожнім. Якщо дерево порожнє, здійснюється рекурсивне повернення, а в іншому разі виводиться значення вузла і рекурсивно викликаються процедури обходу для лівого та правого піддерев. Порядок цих трьох операторів і визначає форму виразу, що буде створений у результаті обходу. А саме, якщо виведення значення вузла виконуватиметься першим, то буде отримано префіксну форму виразу, якщо другим — інфіксну, а якщо третім — постфіксну форму.

Слайд 78


Абстрактні типи даних. (Розділ 3), слайд №78
Описание слайда:

Слайд 79


Абстрактні типи даних. (Розділ 3), слайд №79
Описание слайда:

Слайд 80





	Домашнє завдання
	Домашнє завдання

	Прочитати 		 с.23-83 [1] ,   с.310-341 [4]
	Підготуватися до виконання практичної роботи  №3.
Описание слайда:
Домашнє завдання Домашнє завдання Прочитати с.23-83 [1] , с.310-341 [4] Підготуватися до виконання практичної роботи №3.

Слайд 81





	Приклад виконання практичної роботи  №3.
	Приклад виконання практичної роботи  №3.
	Тема:	 Абстрактні типи даних
	Склад звіту:
постановка задачі (вказати, який АТД досліджується, та які реалізації вибрано);
блок-схеми реалізацій, на яких виконано аналіз складності алгоритмів (розглянути тільки операції додавання та видалення елемента);
опис тестових даних (якого характеру дані і для якої перевірки використані);
результати дослідження у вигляді графіків або діаграм;
висновки про доцільність використання кожної з реалізацій для типових вхідних даних та про відповідність результатів експериментального дослідження аналітичним оцінкам складності.
Описание слайда:
Приклад виконання практичної роботи №3. Приклад виконання практичної роботи №3. Тема: Абстрактні типи даних Склад звіту: постановка задачі (вказати, який АТД досліджується, та які реалізації вибрано); блок-схеми реалізацій, на яких виконано аналіз складності алгоритмів (розглянути тільки операції додавання та видалення елемента); опис тестових даних (якого характеру дані і для якої перевірки використані); результати дослідження у вигляді графіків або діаграм; висновки про доцільність використання кожної з реалізацій для типових вхідних даних та про відповідність результатів експериментального дослідження аналітичним оцінкам складності.



Похожие презентации
Mypresentation.ru
Загрузить презентацию