#include <iostream>
#define N 9
using namespace std;
struct Film
{
string name;
string genre;
string time;
};
struct Queue
{
int head = 0, tail = 0;
Film Films[N];
};
bool empty(Queue* m)
{
if (m->head == m->tail)
{
return true;
}
else
{
return false;
}
}
int size(Queue* m)
{
return (m->head - m->tail + 1 + N) % N;
}
Film front(Queue* m)
{
if (!empty(m)) return m->Films[m->head];
}
void push(Film element, Queue* m)
{
if ((m->tail + 1) % (N + 1) != m->head)
{
m->Films[m->tail] = element;
m->tail = (m->tail + 1) % (N + 1);
}
else
{
cout << "STACKOVERFLOW" << endl;
}
}
void pop(Queue* m)
{
if (!empty(m)) m->head = (m->head + 1) % (N + 1);
else cout << "STACKUNDERFLOW" << endl;
}
void print(Queue* m)
{
Queue new_m = *m;
Film new_message;
if (empty(&new_m))
{
cout << "The stack is empty." << endl;
}
else while (!empty(&new_m))
{
new_message = front(&new_m);
cout << "Massage (Name: " << new_message.name << ", Genre: " << new_message.genre << ", Time: " << new_message.time << ")" << endl;
pop(&new_m);
}
cout << endl;
}
int main()
{
Queue messages;
Film new_message;
cout << "---Task 1---" << endl;
cout << "Messages:" << endl;
for (int i = 0; i < 7; i++)
{
cout << "Enter new message Name/Genre/Time: ";
cin >> new_message.name >> new_message.genre >> new_message.time;
push(new_message, &messages);
}
cout << "Result:" << endl;
print(&messages);
cout << "---Task 2---" << endl;
cout << "Messages:" << endl;
for (int i = 0; i < 4; i++)
{
cout << "Enter new message Name/Genre/Time: ";
cin >> new_message.name >> new_message.genre >> new_message.time;
push(new_message, &messages);
}
cout << "Result:" << endl;
print(&messages);
cout << "---Task 3---" << endl;
cout << "Messages:" << endl;
for (int i = 0; i < 6; i++) pop(&messages);
cout << "Result:" << endl;
print(&messages);
cout << "---Task 4---" << endl;
cout << "Messages:" << endl;
for (int i = 0; i < 2; ++i) {
new_message = front(&messages);
new_message.time;
push(new_message, &messages);
}
cout << "Result:" << endl;
print(&messages);
cout << "---Task 5---" << endl;
cout << "Messages:" << endl;
for (int i = 0; i < 6; i++) pop(&messages);
cout << "Result:" << endl;
print(&messages);
}