Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 3
на тему:
"Структура даних СТЕК"
з дисципліни:
" Програмування. Частина III. Структури даних та алгоритми "
Вибір варіанту:
№ варіанта = [(день народження) + (місяць народження) + (ASCII–код першої літери прізвища – велика латинська літера) ] % 20 + 1
(23 + 8 + 70 ) % 20 + 1 = 2
Львів – 2013
Мета роботи:
Вивчення фундаментальної абстрактної структури даних стек. Набуття практичних навичок побудови стека, дослідження динаміки його вмісту та використання стеків для розв'язання прикладних задач.
Постановка задачі:
2. Реалізувати стек, у якому до опису стека додано змінну EMPTY замість функції empty(). Переписати основні функції роботи зі стеком з врахуванням цієї змінної. Після обробки всієї заданої вхідної послідовності перевірити, чи елементи стека будуть відсортовані (по спаданню або по зростанню).
Код програми:
#include <string>
#include<iostream>
using namespace std;
template<class T>
class Stack
{
public:
Stack():tail(0), head(0)
{}
bool EMPTY;
~Stack()
{while(head)
{tail=head->next;
delete head;
head=tail;}}
void push(T val)
{
Node* Temp;
Temp=new Node;
Temp->elem=val;
if(tail==0)
{
tail=Temp;
}
else
{
Temp->next=tail;
tail=Temp;
}
}
T top()
{
if(tail==0)
{
throw std::string("Stack is empty!");
EMPTY=true;
}
return tail->elem;
}
void pop()
{
if(EMPTY==true)
{
throw std::string("Stack is empty!");
}
Node* delptr=tail;
tail=tail->next;
delete delptr;
}
void print()
{
if(EMPTY==0)
{
throw std::string("Stack is empty!");
}
for(Node* ptr=tail; ptr!=0; ptr=ptr->next)
{
std::cout<<ptr->elem<<' ';
}
std::cout<<'\n';
}
private:
struct Node
{
Node():elem(0), next(0)
{
}
Node* next;
T elem;
};
Node* head;
Node* tail;
};
/*__________________________________________________________*/
int main()
{
int i=0;
const int sizemass=6;
cout<<"Eter mass:\n";
int r[sizemass];
for(i=0;i<sizemass;i++)
cin>>r[i];
Stack<int> St;
for(int i=0;i<sizemass;i++)
{
if(r[i]>=0)
St.push(r[i]);
else
St.pop();
}
try
{
while (St.top() != 0)
{
std::cout<<"elements in stack: ";
St.print();
std::cout<<"element pop: ";
std::cout<<St.top()<<'\n'<<"Countdown: ";
St.pop();
St.print();
}
}
catch(const std::string& e)
{
std::cout<<e<<'\n';
}
return 0;
}
Результат виконання програми:
Рис1. Ескіз вікна з результатом виконання програми
Висновок: На цій лабораторній роботі я ознайомився з cструктурою даних стек. Дослідив принципи і методи роботи зі стеком.