МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
Лабораторна робота № 3
Структура даних СТЕК
№ варіанта = [(день народження) + (ASCII–код першої літери прізвища – велика латинська літера) ] % 21 + 1= (26+75)%21+1=18
1 Мета роботи:
Вивчення фундаментальної абстрактної структури даних стек. Набуття практичних навичок побудови стека, дослідження динаміки його вмісту та використання стеків для розв'язання прикладних задач.
2 Постановка задачі:
Написати програму, у якій числа вхідної послідовності циклічно розподіляються по трьом стекам. Всі додатні числа додаються в стек, а кожне від'ємне число вилучає зі стеку один елемент. Показати динаміку вмісту кожного стека. Після обробки всієї заданої вхідної послідовності визначити у якому стеку сума всіх чисел буде найбільшою.
3 Алгоритм роз’вязку задачі:
Стек організовуємо у вигляді шаблонного класу. Це дає можливість працювати з усіма стандартними типами даних. Спочатку по черзі вносимо перший елемент в перший стек, другий елемент в другий стек, третій елемент в третій стек, і так робимо по порядку.
4 Динаміка вмісту стеку:
5 Результати виконання програми:
Висновки:
На цій лабораторній роботі я ознайомився з cтруктурою даних стек. Дослідив принципи і методи роботи зі стеком.
Додатки:
#include <iostream>
#include <conio.h>
using namespace std;
class stack {
int i, st1[10],st2[10],st3[10], max1,max2,max3; int k, k1,k2,k3;
public:
void start() {k=1,k1=1,k2=1,k3=1,max1=max2=max3=0;}
void push(int j) {
i=j;
if (k%3==1){
max1=i+max1;
st1[k1]=i; k1++ ;}
else if (k%3==2) {
max2=i+max2;
st2[k2]=i; k2++ ;}
else if (k%3==0) {
max3=i+max3;
st3[k3]=i; k3++;}
k++;
}
void pop() {
if (k%3==1) {
max1=max1-i;
st1[k1]=0; k1--;
}
else if (k%3==2) {
max2=max2-i;
st2[k2]=0;k2--;}
else if (k%3==0){
max2=max2-i;
st3[k3]=0; k3--; }
}
void show_dynam() {
if (k1>1) {
cout<<" 1 stek :";
for (int i=1;i<k1;i++)
cout<< st1[i];
cout<<endl;
}
if (k2>1) {
cout<<" 2 stek :";
for (int i=1;i<k2;i++)
cout<< st2[i];
cout<<endl;
}
if (k3>1) {
cout<<" 3 stek :";
for (int i=1;i<k3;i++)
cout<< st3[i];
cout<<endl;
}
cout<<"__________"<<endl;
}
int max_suma() {
int temp=-10000;
if (temp<max1) temp=max1;
if(temp<max2) temp=max2;
if (temp<max3) temp=max3;
return temp;
}
int empty() { if (k==0) return 1; else return 0;}
int show() { return st1[k-1]; }
int size() { return k; }
int top() { return st1[k-1]; }
} ;
int main()
{
int ar[10]={2, 5, 7, 2, 3, 4, -6, 7, 2,9}, dubl, temp=0, temp2;
stack ob;
ob.start();
for (int i=0;i<10;i++) {
if (ar[i]>=0) ob.push(ar[i]); else ob.pop();
ob.show_dynam();
}
cout<<"max znachennja ="<<ob.max_suma();
getch();
return 0;
}