Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab10.doc
Скачиваний:
5
Добавлен:
21.09.2019
Размер:
124 Кб
Скачать

3. Набори

Набір — це динамічна структура даних, що складається з елементів двох типів: атомів на наборів. Атом являє собою елемент, що містить певні корисні дані та вказівник на наступний елемент (на набір або на інший атом). Цим атом подібний до елемента звичайного лінійного списку, тільки список цей — неоднорідний, бо складається з елементів двох різних типів — атомів та наборів.

Набір, на відміну від атома, містить ще один вказівник — на інший набір. Тобто елемент-набір містить принаймні три поля: поле для корисних даний, наприклад чисел, поле — вказівкик на наступний елемент, і поле — вказівник на наступний набір. Це дозволяє організовувати найрізноманітніші розгалужені структури.

Прикладом структури даних, для зберігання якої можуть використовуватись набори, може слугувати система каталогів та підкаталогів (папок і підпакок) з файлами на комп’ютері. Каталогам в такій структурі будуть відповідати елементи-набори, які можуть містити підкаталоги нижчого рівня, або файли, представлені елементами-атомами.

По відношенню до дерев набори є більш гнучкою структурою, хоча дещо складнішою в реалізації від дерев. За допомогою наборів можна організовувати розгалуження довільного порядку, причому кожен вузол може мати довільну кількість підвузлів. Недоліком наборів можна вважати те, що для доступу для різних підвузлів одного і того ж вузла буде затрачатись різна кількість часу, оскільки підвузли організовані у вигляді списку.

Для реалізацій наборів у програмі використовуються два класи:

1) атом, що повністю відповідає елементу однорідного однозв’єязного списку,

2) набір, що є похідним від атома і отримується шляхом успадкування властивостей від атома, і містить ще одне додаткове поле — вказівник на інший набір. Потрібно також модифікувати методи набору, що стосуються пошуку елементів у наборі, виводу елементів на екран тощо.

Завдання до лабораторної роботи №11 увага!

Варіанти завдань вибирати з таблиці:

у списку

1

2

3

4

5

6

7

8

9

10

варіанту

30

27

24

21

18

15

12

9

6

3

у списку

11

12

13

14

15

16

17

18

19

20

варіанту

29

26

23

20

17

14

11

8

5

2

у списку

21

22

23

24

25

26

27

28

29

30

варіанту

28

25

22

19

16

13

10

7

4

1

Робота зі списками

  1. Створити клас для реалізації однозв’язного списку з динамічним виділенням пам’яті типу “черга” та методи додавання числа в чергу та вилучення з неї.

  2. Створити клас для реалізації однозв’язного списку з динамічним виділенням пам’яті типу “стек” та методи додавання числа в стек та вилучення з нього.

  3. Створити клас для реалізації однозв’язного списку з динамічним виділенням пам’яті типу “дек” та методи додавання числа в дек та вилучення з нього. Додавати з хвоста і вилучати з хвоста.

  4. Створити клас для реалізації однозв’язного списку з динамічним виділенням пам’яті типу “дек” та методи додавання числа в дек та вилучення з нього. Додавати з хвоста і вилучати з голови.

  5. Організувати список, заповнити його випадковими числами і зробити функції впорядкування списку та пошуку. Функція пошуку повинна виводити число на екран і повертати адресу даного елемента і його порядковий номер в списку.

  6. Організувати два списки, заповнити їх впорядкованими за зростанням числами і зробити функції злиття цих списків.

  7. Організувати чергу, заповнити її випадковими числами і зробити функції додавання в чергу та знаходження середнього арифметичного чисел записаних у чергу та їх кількості. Величина черги наперед невідома.

  8. Створити чергу з числами та функції, які б обчислювали добуток усіх від’ємних членів та середнє арифметичне додатних членів черги.

  9. Створити список з функціями його упорядкування та додавання числа в список без порушення порядку.

Робота із двозв’язними списками та кільцями

  1. Створити двозв’язний список з пошуком в 2 напрямках.

  2. Організувати список в якого елементами є масив з трьох рядкових змінних, заповнити його послідовно введеними рядками з прізвищами ім’ям та по батькові. Створити методи, які виводять кожен елемент списку у новому рядку послідовно у повній (ім’я, по батькові, прізвище) та скороченій формі (прізвище та ініціали).

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

  4. Створити двозв’язний список та заповнити його n-ою кількістю простих чисел.

  5. Створити список типу “кільце” з корисною інформацією: рядки, що містять стадії кругообігу води в природі. Створити методи, що виводять поточний елемент кільця та переходять до наступного.

  6. Створити двозв’язний список з простими числами. Числа заповнити за таким алгоритмом: спочатку заповнити список числами від 1 і до якогось n. Потім починаючи з двійки перевіряти і вилучати всі числа які діляться на неї, потім брати наступний елемент списку і робити аналогічну операцію, поки не буде чисел, що діляться на інші.

  7. * Створити клас “список” з перевіркою доступної пам’яті (функція coreleft() alloc.h або контроль оператора new, чи створений ним покажчик не рівний нулю). Список заповнювати випадковими числами до тих пір, поки не вичерпається вся доступна пам’ять. Підрахувати кількість елементів у списку та обчислити розмір вільної пам’яті, доступний для програми. Увага ! Якщо помилитися при перевірці доступності пам’яті програма може “зависнути”.

  8. Зробити циклічний двозв’язний список в який внести колоду карт (знак карти виводити за допомогою ASCII кодів). Організувати таку операцію: коли тиснеш одну клавішу колода “перегортається” в одну сторону а іншу — в другу.

  9. Створити циклічний список який би ніс таку корисну інформацію: кут від 0° до 360° з дискретністю 15° і синуси цих кутів. Дані вивести в вигляді таблиці.

  10. Створити двозв’язний циклічний список який би ніс таку корисну інформацію: кут від 0° до 360° з дискретністю 5° і косинуси цих кутів. Передбачити функцію пошуку косинуса за кутом та кута за приблизним косинусом.

  11. Список з символами, який створюється при послідовному введенні з клавіатури якогось тексту, підрахувати кількість повторів кожного символу.

Робота з деревами та наборами

  1. Створити клас “бінарне дерево” та методи, які додають новий вузол у ліве та праве піддерева, та метод, що виводить дужкове зображення дерева із зазначенням у квадратних дужках кількості вузлів кожного піддерева.

  2. Створити клас “бінарне дерево” та метод, який додає у дане дерево інше піддерево не порушуючи впорядкованості , та метод, що виводить дужкове зображення отриманого дерева.

  3. Створити клас “бінарне дерево”, що містить символьні рядки (слова) та метод, який виводить список вузлів у порядку: праве піддерево, ліве піддерево, корінь.

  4. Створити клас “дерево”, що містить цілі числа та метод, який виводить суму вузлів дерева.

  5. Створити клас “дерево”, що містить числа та метод, який видаляє з дерева всі піддерева, значення у вузлах яких менше, ніж значення у корені.

  6. Створити клас “набір”, для зберігання арифметичних виразів з дужками. Вираз записаний у дужках є набором, що містить числа та знаки арифметичних операцій.

  7. Створити клас “набір”, для зберігання списку файлових каталогів на диску. Кожен файл є атомом, а підкаталог — набором.

  8. Створити клас “набір”, для зберігання списку квартир та будинку вулиці. Кожен одноквартирний будинок є атом, у якому зберігається кількість кімнат, а багатоквартирний — набором, кожен атом якого зберігає кількість кімнат для однієї з квартир будинку.

  9. * Створити клас “дерево” для представлення арифметичного виразу, кожен з вузлів якого містить числа або знаки арифметичних опервцій.

  10. * Створити клас “дерево”, кожен з вузлів якого містить можливі ходи для шахового коня (координати полів).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]