Приклади основних операцій зі стеком Методичні рекомендації До виконання лабораторної роботи № 7 Тема: Реалізація та відлагодження програм обробки черги та стеку. Мета: Отримання навиків в організації динамічних структур даних – черги та стеку. Теоретичні відомості Динамічна структура даних черга створюється на основі однонаправленого списку, в якому доступними до обробки є: 1. перший елемент – тільки для видалення, 2. останній елемент – тільки для додавання (введення). Отже з чергою виконується робота по принципу: «перший зайшов – перший вийшов». Для роботи з чергою завжди необхідно мати дві змінні-посилання: first – для збереження адреси першого елементу черги (голова черги) та last – для збереження адреси останнього елементу черги (хвіст черги). last first nil Приклади основних операцій з чергою 1. Створення черги: . . .{Опис вузла черги дійсних чисел} type n=^uzel; uzel=record inf: real; next: n; end; var first: n; {Посилання на перший елемент черги} last: n; {Посилання на останній елемент черги} u: n: {Посилання на довільний вузол черги} c: char; {Введення першого елементу в чергу} new(u); first:=u; writeln(‘Введите первый елемент’); readln(u^.info) u^.next:=nil; last:=first; c:=’y’; {Формування черги в циклі дозаписом елемента в «хвіст» черги} while c=’y’ do begin new(u); u^.next:=last; writeln(‘Введите очередной елемент’); readln(u^.info); last:=u; writeln(‘Хотите продолжать?’); readln(c); end; 2. Видалення першого елементу з черги … u:=last; {Переміщення по черзі до другого елементу – того, що посилається на перший} while (u^.next<>first) do u:=u^,next; {Видалення першого елементу} first:=u; Dispose(u^.next); first^.next:=nil; Динамічна структура даних стек створюється на основі однонаправленого списку, в якому доступними до обробки є тільки перший елемент – для додавання (введення) або для видалення. Отже зі стеком виконується робота по принципу: «перший зайшов – останній вийшов». Для роботи зі стеком завжди необхідно мати одну змінну-посилання: first – для збереження адреси першого елементу стеку. first nil Приклади основних операцій зі стеком 1. Створення стеку: . . .{Опис вузла стеку дійсних чисел} type n=^uzel; uzel=record inf: real; next: n; end; var first: n; {Посилання на перший елемент стеку} u: n: {Посилання на останній вузол стеку} c: char; {Введення першого елементу в стек} new(u); first:=u; writeln(‘Введите первый елемент’); readln(u^.info) u^.next:=nil; c:=’y’; {Формування стеку в циклі } while c=’y’ do begin {Ведення нового елементу в стек} new(u); u^.next:=first; writeln(‘Введите очередной елемент’); readln(u^.info); first:=u; writeln(‘Хотите продолжать?’); readln(c); end; 2. Видалення першого елементу зі стеку … u:=first; first:=u^.next; Dispose(u); Варіанти завдань: 1. Створити чергу дійсних чисел, в яку спочатку ввести додатні числа, потім – від’ємні. Видалити з черги всі додатні числа. Вивести оновлену чергу. Видалити чергу. 2. Створити стек натуральних чисел. Вивести на екран парні числа стеку, або повідомити, що таких в стеку немає. Видалити стек. 3. Створити чергу дійсних чисел, яка містить як додатні числа, так і від’ємні. На основі черги створити стек, який буде вміщати тільки додатні числа черги. Вивести вміст стеку на екран, або повідомити, що в черзі додатніх чисел немає. Видалити чергу. Видалити стек. 4. Створити стек натуральних чисел. На основі стеку створити чергу, яка буде вміщати тільки парні елементи стеку. Вивести на екран вміст черги, або повідомити, що в стеку парних чисел немає. Видалити стек. Видалити чергу. 5. Створити стек дійсних чисел, який містить як додатні числа, так і від’ємні. На основі стеку створити чергу, яка буде вміщати квадрати тільки від’ємних чисел стеку. Вивести вміст черги на екран. Видалити чергу. Видалити стек. 6. Створити чергу дійсних чисел. Видалити елементи з черги до першого від’ємного числа. Вивести на екран вміст оновленої черги, або повідомити, що від’ємних елементів в черзі немає. Видалити чергу. 7. Створити чергу натуральних чисел. На основі черги створити стек, який буде вміщати тільки парні елементи черги. Вивести на екран вміст стеку, або повідомити, що парних елементів в черзі немає. Видалити стек. Видалити чергу. 8. Створити стек натуральних чисел. Вивести на екран парні числа стеку. Створити чергу, яка буде вміщати квадрати парних чисел стеку. Вивести вміст черги на екран, або повідомити, що в стеку парних чисел немає. Видалити стек. Видалити чергу. 9. Створити чергу натуральних чисел, в якій спочатку йдуть парні числа, а потім – непарні. Видаляти з черги парні числа та одночасно заносити їх в стек. Вивести на екран вміст оновленої черги та створеного стеку. Видалити стек. Видалити чергу. 10. Створити стек дійсних чисел. Замінити в стеку всі від’ємні числа їх квадратами. Вивести вміст оновленого стеку, або повідомити, що в стеку від’ємних чисел немає. Видалити стек. 11. Створити чергу натуральних чисел. Замінити в черзі всі парні числа одиницею. Вивести вміст оновленої черги, або повідомити, що парних чисел в черзі немає. Видалити чергу. 12. Створити стек дійсних чисел. Створити другий стек, який буде вміщати тільки додатні елементи першого стеку. Вивести вміст другого стеку на екран, або повідомити, що в першому стеку додатніх чисел немає. Видалити обидва стеки. 13. Створити чергу дійсних чисел. Створити другу чергу, яка буде вміщати тільки додатні елементи першої. Вивести вміст другої черги на екран, або повідомити, що в першій додатніх чисел немає. Видалити обидві черги. 14. Створити чергу натуральних чисел. Вивести на екран парні числа черги. Створити стек, який буде вміщати квадрати парних чисел черги. Вивести вміст стеку на екран, або повідомити, що в черзі парних чисел немає. Видалити стек. Видалити чергу. 15. Створити чергу дійсних чисел. Створити стек, який буде вміщати елементи з черги до першого від’ємного числа. Вивести на екран вміст стеку, або повідомити, що від’ємних елементів в черзі немає. Видалити чергу. Видалити стек. 16. Створити чергу дійсних чисел, в яку спочатку ввести від’ємні числа, потім – додатні. Видалити з черги всі від’ємні числа. Вивести оновлену чергу. Видалити чергу. 17. Створити стек натуральних чисел. Вивести на екран непарні числа стеку, або повідомити, що таких в стеку немає. Видалити стек. 18. Створити чергу дійсних чисел, яка містить як додатні числа, так і від’ємні. На основі черги створити стек, який буде вміщати тільки від’ємні числа черги. Вивести вміст стеку на екран, або повідомити, що в черзі від’ємних чисел немає. Видалити чергу. Видалити стек. 19. Створити стек натуральних чисел. На основі стеку створити чергу, яка буде вміщати тільки непарні елементи стеку. Вивести на екран вміст черги, або повідомити, що в стеку непарних чисел немає. Видалити стек. Видалити чергу. 20. Створити стек дійсних чисел, який містить як додатні числа, так і від’ємні. На основі стеку створити чергу, яка буде вміщати квадрати тільки додатніх чисел стеку. Вивести вміст черги на екран. Видалити чергу. Видалити стек. 21. Створити чергу дійсних чисел. Видалити елементи з черги до першого додатного числа. Вивести на екран вміст оновленої черги, або повідомити, що додатніх елементів в черзі немає. Видалити чергу. 22. Створити чергу натуральних чисел. На основі черги створити стек, який буде вміщати тільки непарні елементи черги. Вивести на екран вміст стеку, або повідомити, що непарних елементів в черзі немає. Видалити стек. Видалити чергу. 23. Створити стек натуральних чисел. Вивести на екран непарні числа стеку. Створити чергу, яка буде вміщати квадрати непарних чисел стеку. Вивести вміст черги на екран, або повідомити, що в стеку непарних чисел немає. Видалити стек. Видалити чергу. 24. Створити чергу натуральних чисел, в якій спочатку йдуть непарні числа, а потім – парні. Видаляти з черги непарні числа та одночасно заносити їх в стек. Вивести на екран вміст оновленої черги та створеного стеку. Видалити стек. Видалити чергу. 25. Створити стек дійсних чисел. Замінити в стеку всі додатні числа їх квадратами. Вивести вміст оновленого стеку, або повідомити, що в стеку додатніх чисел немає. Видалити стек. 26. Створити чергу натуральних чисел. Замінити в черзі всі непарні числа одиницею. Вивести вміст оновленої черги, або повідомити, що непарних чисел в черзі немає. Видалити чергу. 27. Створити стек дійсних чисел. Створити другий стек, який буде вміщати тільки від’ємні елементи першого стеку. Вивести вміст другого стеку на екран, або повідомити, що в першому стеку від’ємних чисел немає. Видалити обидва стеки. 28. Створити чергу дійсних чисел. Створити другу чергу, яка буде вміщати тільки від’ємні елементи першої. Вивести вміст другої черги на екран, або повідомити, що в першій від’ємних чисел немає. Видалити обидві черги. 29. Створити чергу натуральних чисел. Вивести на екран непарні числа черги. Створити стек, який буде вміщати квадрати непарних чисел черги. Вивести вміст стеку на екран, або повідомити, що в черзі непарних чисел немає. Видалити стек. Видалити чергу. 30. Створити чергу дійсних чисел. Створити стек, який буде вміщати елементи з черги до першого додатнього числа. Вивести на екран вміст стеку, або повідомити, що додатніх елементів в черзі немає. Видалити чергу. Видалити стек. 31. Створити чергу натуральних чисел, в якій спочатку йдуть парні числа, а потім – непарні. Видаляти з черги парні числа та одночасно заносити їх в стек. Вивести на екран вміст оновленої черги та створеного стеку. Видалити стек. Видалити чергу. Звіт з лабораторної роботи повинен вміщати наступні розділи: 1. Тема роботи. 2. Мета роботи. 3. Постановка задачі. 4. Опис структури вхідних та вихідних даних програми. 5. Текст програми мовою Turbo Pascal. 6. Копію вікна виконання програми на тестових вхідних даних. 7.Висновки. |