Помогите изменить с FIFO на LIFO
Вот условие этого кода: Приоритетная очередь.
Установление в очередь выполняется по приоритету, снятие - с младших адресов (начало очереди).
Очередь организована в массиве со смещением после каждого чтения и на массиве со смещением после достижения предела памяти, выделенной для очереди.
Приоритет - максимальное значение числового параметра, при совпадении параметра - FIFO
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
| #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");
} |
|