Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабораторний практикум інф сис та стр даних.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.39 Mб
Скачать

Лабораторна робота № 3 Структура даних стек

Мета роботи: Вивчення фундаментальної абстрактної структури даних - стека. Набуття практичних навичок побудови стека, дослідження динаміки його вмісту та використання стеків для розв'язання прикладних задач.

Завдання:

Завдання 3.1:

Використати для розв’язання задач клас stack зі стандартної бібліотеки шаблонів STL .

1. Перетворити вираз з інфіксної форми запису в префіксну форму.

2. Перетворити вираз з інфіксної форми запису без дужок в постфіксну форму.

3. Перетворити вираз з інфіксної форми запису з необхідними дужками в постфіксну форму.

4. Обчислити вираз, представлений в інфіксній формі запису.

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

6. Перевірити баланс дужок в арифметичному виразі, який містить тільки один тип дужок – круглі.

7. Написати програму синтаксичного аналізу відповідностей відкриваючих і закриваючих дужок в арифметичному виразі, що має три набори дужок "(" i ")", "<" i ">", "[" i "]". Роздрукувати таблицю відповідностей дужок, причому в таблиці повинно бути зазначено, для яких дужок відсутні парні їм дужки. Для ідентифікації дужок використати їх порядкові номери у виразі.

Приклад: Для арифметичного виразу:

1 2 3 4 5 6

(a+b1)/2+6.5]*{4.8+sin(x)

має бути виведена таблиця виду:

Дужки:

відкриваюча закриваюча

1 2

- 3

5 6

4 -

Прочерки в таблиці означають відсутність відповідної дужки.

8. Написати програму, що визначає, чи має символьний рядок, що вводиться, правильну форму виду a D b D c D ... D z , де кожний рядок a, b, c, ..., z має форму рядка виду x C y, де x - рядок, що складається з літер A і B, а y - рядок, обернений до рядка x (наприклад, якщо x = ABABBA, то y повинен дорiвнювати ABBABA). Отже, рядок має правильну форму, якщо він складається з будь-якої кiлькостi подiбних рядків, що роздiленi символом "D". Визначити чи введений рядок правильний.

9. Мажоруючим елементом в послідовності A[1..N] називається елемент, що зустрічається в послідовності більш N/2 разів. В послідовності може бути не більше одного мажоруючого елемента. Визначити, чи є в послідовності мажоруючий елемент, і якщо є, то який.

Приклад: Послідовність 3, 3, 4, 2, 4, 4, 2, 4, 4 має мажоруючий елемент 4, тоді як в послідовності 3, 3, 4, 2, 4, 4, 2, 4 мажоруючого елемента немає.

Вказівки до розв’язання задачі: Створіть стек і додавайте або вилучайте зі стеку елементи за таким правилом:

  • на першому кроці покладіть в стек A[1];

  • на i-ом кроці (i=2, ..., N) повторіть такі дії:

якщо стек порожній, то покладіть в нього A[і]; інакше, якщо елемент A[і] співпадає з елементом, що знаходиться у вершині стеку, то додайте A[і] у стек; інакше вилучіть елемент з вершини стеку.

Якщо стек не порожній, то в ньому залишаться лише співпадаючі елементи. Якщо в послідовності є мажоруючий елемент, те він і залишиться в стеку після N-го кроку. Для перевірки (у випадку не порожнього стеку після виконання N-го кроку) чи є елемент у стеку мажоруючим (якщо в стеку більше одного елемента, то вони всі однакові), перегляньте послідовність ще раз і підрахуйте, скільки раз зустрічається в ній елемент, що залишився в стеку. Якщо це число більше N/2, то цей елемент є мажоруючим, інакше - мажоруючого елемента в послідовності немає.

10. Задано n однакових на вигляд каменів, деякі з яких насправді різні по вазі. Є прилад, що дозволяє по двох каменях визначити, однакові вони чи різні (але не показує, який тяжчий). Відомо, що серед цих каменів більшість (більше n/2) однакових. Зробивши не більше n зважувань, знайти хоча б один камінь з цієї більшості.

Вказівки до розвязання задачі: Дивіться вказівки до попередньої задачі.

Завдання 3.2:

Побудувати динамічну структуру даних стек на базі статичного масиву.

1. Реалізуйте за допомогою одного масиву з N елементiв два послідовних стеки. Стеки повинні рости з кінців масиву назустріч один одному. На вході задаються пари цiлих чисел (i,j), де i=(1;2), j – любе. Перше число (і) вказує на номер стеку (1 або 2), з яким буде виконуватись робота. Якщо друге число j>0, то воно додається в і – тий стек, якщо j<0, то з і - го стеку вилучається один елемент, j=0 – ігнорується. Перепишіть основні операції роботи зі стеками і продемонструйте динаміку стеків.

2. Реалізуйте стек, у якому замість двох функцій top i pop використовується тільки одна функція pop, яка робить ці дві дії одночасно, тобто і вилучає елемент зі стеку, і повертає його значення

3. Задайте послідовність, що складається з цифр 0 і 1 . Кожна цифра 1 додається в класичний стек, а кожна цифра 0 вилучає зі стека один елемент.

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

5. Напишіть програму для реалізації стека, який мiстить цiлi числа, за допомогою масиву data, в якому data[0] (а не окрема змiнна) використовуєтся для зберiгання вершини стека, а решта елементів масиву можуть містити елементи самого стека.

6. Напишіть програму, яка будує класичний стек (числа вводяться з клавіатури) і після цього перевіряє, чи цей стек буде “дзеркальним”.

7. Напишіть програму для послiдовного зберiгання двох стекiв в масивi з N елементiв (стеки розміщуються один за одним: перша половина масиву – перший стек, друга половина масиву – другий стек). На вході задаються пари цiлих чисел (i,j), 1  i  2. Число j пари (i,j) з j>0 додається в i -ий стек; число j пари (i,j), з j<=0, не використовується, але зі стека вилучається один елемент.

8. Реалізуйте стек із “проштовхуванням”: вершина стека завжди знаходиться в першій комірці масиву; при “заштовхуванні” в стек наступного елемента, він поміщається у вершину стеку, а всі решта елементів просуваються на одну позицію далі; при вилученні зі стека одного елемента всі решта елементів пересуваються назад.

9. Реалізуйте стек, у якому до опису стека додано ще дві змінні EMPTY i FULL, замість функції empty. За допомогою цих змінних в функціях push i pop виконати перевірку можливості додавання нового елемента до стека або вилучення елемента з вершини стека.

10. Реалізуйте стек, у якому вершина стека вказує на останній елемент стека, а не на перший вільний елемент масиву.