1

Тема: З FIFO на LIFO

Допоможіть змінити з FIFO на LIFO

Ось умова цього коду:Пріоритетна черга.
Встановлення в чергу виконується за пріоритетом, зняття – з молодших адрес (початок черги).
Черга організована в масиві зі зсувом після кожного читання і на масиві зі зсувом після досягнення межі пам’яті,яка виділена для черги.
Пріоритет – максимальне значення числового параметра, при збігу параметра – FIFO

#include <iostream>
#include <iterator>
#include <functional>
#include <queue>
#include <algorithm>

using namespace std;

class PQ
{
private:   
priority_queue<int> q;
  int size;
public:
    PQ (int s):size(s){}
   ~PQ(){}

//priority_queue<int> input(priority_queue<int> q)//, istream& is=cin)
//{
//   cout << "Enter number to fill the queue:\n";// (any letter to stop):\n";
//   int v;
//   cin>>v;
//   q.push(v);
//   if(q.size()>size)
//   {int max=max_elem(q);
//       q=erase(q,max);
//          q.push(v);
//   }
//  // q = move(priority_queue<int>(istream_iterator<int>(is), istream_iterator<int>()));
//return q;
//}


void print(priority_queue<int> q)
{
   while(!q.empty())
   {
      cout << q.top() << " ";
      q.pop();
   }
   cout << endl;
}


int max_elem(priority_queue<int> q)
{
   int max = q.top();
   q.pop();
   while (!q.empty())
   {
      if(max < q.top())
         max = q.top();
      q.pop();
   }
   return max;
}


//int average(priority_queue<int> q)
//{
//   size_t size = q.size();
//   int temp = 0;
//   while (!q.empty())
//   {
//      temp += q.top();
//      q.pop();
//   }
//   return temp / size;
//}

priority_queue<int> erase(priority_queue<int> q, int elem)
{
   priority_queue<int> result;
   while (!q.empty())
   {
      if(q.top()==elem)
          q.pop();
      else
      {
         result.push(q.top());
         q.pop();
      }
   }
   return result;
}
void menu ()
{

    cout<<"Priority Queue Menu: "<<endl;
cout<<"1. заполнить очередь с 10 elemens\n"<<endl;
  cout<<"2. добавить элемент\n"<<endl;
  cout<<"3. Показать \n"<<endl;

int t;
  cin>> t;
  switch ( t ) {
    case 1:
         for (int a=0;a<10;a++){
        int x;
        cin>>x;
          q.push(x);}
    break;
  case 2:
//input(q);
       cout << "Введите номер, чтобы заполнить очереди:\n";// (any letter to stop):\n";
   int v;
   cin>>v;
    if(q.size()>14)
   {int max=max_elem(q);
       q=erase(q,max);
       q.push(v);}
   else q.push(v);
    break;
  case 3:
     print(q);
        system("pause");
    break;
  default:
    cout<<"Ошибка, плохой вход\n"<<endl;
    break;}}};

int main()
{

    PQ pq(15);

    do{
pq.menu();
system("cls");
}while("ON");
/*  input(pq);
   print(pq);*/
   //cout << "Min element is: " << min_elem(pq) << endl;
   //int aver = average(pq);
   //cout << "Average is: " << aver << endl;
   //pq = erase(pq, aver, greater<int>());
   //print(pq);
   system("pause");
}