Типичная задача:
Разработать подпрограммы работы с приоритетной очереди. Постановка запросов в очередь выполняется подряд в конец очереди, снятие - по приоритета. Очередь реализовать на массиве.
Текст программы:
#include<conio.h>
#include<iostream.h>
#include<mem.h>
#include<stdlib.h>
int och[512]; //очередь на 512 запросов
int point=-1; //указатель на очередь
int addel (int a) // добавление запроса в очередь
{
if (point<511) och[point++]=a;
else
{
cout << "enough queue\n" //очередь переполнена
return 0;
}
return 1;
}
void delel (void) //чтения запроса из очереди
{
if (point>=0)
{
int max=och[0], nmax=0; // поиск запроса с максимальным параметром
for(int i=1; i<point; i++)
if (max<och[i]) max=och[i], nmax=i;
cout<<"read "<<max<<endl;
point--; //зсув черги
for(i=nmax; i<point; i++) och[i]=och[i+1];
}
}
void printoch (void) //содержимое очереди
{
if (point>=0)
{
cout<<": ";
for (int i=0;i<point;i++)
cout<<och[i]<<" ";
cout<<"\n";
}
}
void main (void)
{
int op,f;
clrscr();
do
{
op = random (2); // 0-запись запроса, 1 - чтение
f = random (15); // запрос
if (op) delel();
else if (! addel(f)) exit(1);
printoch ();
getch();
}
while (1);
}
Фрагмент результатов работы программы
. . .
12 5 3 0 14 6 1 14 июня 2 марта
read 14
12 5 3 0 6 1 14 6 2 марта
read 14
12 5 3 0 6 1 6 3 февраля
12 5 3 0 6 1 6 2 3 7
read 12
5 3 0 6 1 6 2 3 7
. . .