Частина тексту файла (без зображень, графіків і формул):
Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»Кафедра АПЕПС
Алгоритмізація та програмування 2: . Процедурне програмування
ЗВІТ
До лабораторної роботи № 4
«Списки»
Варіант №24
Дата «31» Травня 2022
ЗАВДАННЯ:1. Дослідити особливості створення одно- та дво-направлених списків.2. Вивчити і реалізувати механізми додавання нових записів у список, пошуку записів у списку за певними полями, видалення записів зі списку та редагування знайдених записів, а також збереження всього списку у файлі та зчитування списку із файлу до пам’яті з відновленням всіх зв’язків.3. Розробити Блок-схему програмного алгоритму.4. Оформити ЗВІТ до лабораторної роботи згідно вимог та методичних рекомендацій. РЕЗУЛЬТАТ РОБОТИ:1. Роздрукувати (вивести на екран) попередньо сформовані та підготовлені для запису в файл дані.2. Роздрукувати (вивести на екран) результат виконання операції читання даних із файлу.3. ЗВІТ до комп’ютерного практикуму для перевірки додати в Клас.4. Програмний код (відкритий для редагування) розмістити на сайті Repl.it (посилання виключно через кнопку «+Invite »).
Теоретичні відомості
Структурою називається сукупність змінних, об’єднаних у єдине ціле, наприклад:
struct myStruct { int i, j, k; double x, y; char s[32];
};
Декларація змінної в такому випадку буде мати вигляд:
myStruct ss;
Але значно частіше для цього застосовують динамічне створення таких структур:
myStruct *pp;
pp = malloc(sizeof(myStruct));
В такий спосіб будуються списки або більш складні конструкції. В такому підході використовується той факт, що полями структури можуть бути вказівники на таку ж структуру, наприклад для одно- або двонаправленого списку:
struct data {
// будь-які дані необхідні для конкретної задачі
};
struct listElem {
data dat; // дані в конкретному елементі списку listElem *next; //вказівник на наступний елемент списку
listElem *prev; //вказівник на попередній елемент списку, якщо список двонаправлений
}
Однонаправлений список має тільки вказівник на наступний елемент списку, а двонаправлений має два вказівника на наступний і попередній. В однонаправленому списку можна рухатись лише від голови списку до хвоста, а в двонаправленому і від хвоста до голови.
listElem *head = 0; // декларований вказівник на перший елемент списку listElem *curr = 0; // допоміжний вказівник, що використовується
// для руху по списку
Тепер можна будувати список із довільного числа елементів, зв’язаних між собою вказівниками.
void addElem(listElem *h) { // Додає новий елемент в голову списку listElem* t;
If (!h) {
h = malloc(sizeof(listElem)); // Створення першого елементу списку h->next = 0;
h -> prev=0;
} else {
// додавання нового елементу перед “головою” списку t = malloc(sizeof(listElem));
t->next = h; t->prev = 0; h ->prev = t; h = t;
};
getData(h->dat); // функція заповнення структури даними
};
Видалення списку відбувається у зворотньому порядку.
Для доступу до списку необхідно, щоб був хоча б один вказівник на нього. У випадку однонаправленого списку це повинен бути обов’язково вказівник на “голову” списку, бо в однонаправленому списку неможливо перейти до попереднього елементу, а в двонаправленому хоча і варто дотримуватись цього ж правила, але не обов’язково, бо по такому списку можна рухатись в обох напрямках. Якщо завдяки помилковому коду раптом зникають всі вказівники на список – він стає недоступним, але продовжує займати пам’ять в купі, що приводить до досить складної для аналізу помилки, яка зветься “витік пам’яті”.
Варіант завдання
/
Результати програми
Вивід на екран монітора результату
/
/
Висновок:
Під час виконання цієї лабораторної було досліджено особливості створення одно- та дво-направлених списків. Вивчено і реалізовано механізми додавання нових записів у список, пошук записів у списку, видалення записів, та редагування знайдених записів, а також збереження всього списку у файлі та зчитування списку із файлу до пам’яті з відновленням всіх зв’язків
Результати були виведені на екран.
Посилання на repl.it: https://replit.com/join/twmzsghucp-tr-15shiepietko