10. Я реализовал очередь с приоритетами на базе пирамиды с использованием языка Си++ (см. книгу Строустрапа "Язык программирования Си++", Stroustrup. C++ Programming Language, выпущенную издательством Addison-Wesley в 1406 г.). Для членов, принадлежащих классу очередей с приоритетами (pnqueue), определяются следующие атрибуты:
class priqueue {
ini n, max size;
float Xx;
void swap(int,int>;
lnt heap<int,int); public:
priqueue(int);
void insert(float);
float extractminO;
>;
Определения под заголовком public доступны всем пользователям класса, тогда как определения, обозначенные private (переменные и процедуры), доступны только конкретному разработчику. В данном случае пользователи видят только процедуры insert и extractmin и (неявно) следующую процедуру, которая формирует элемент этого класса (имя процедуры совпадает с именем класса):
pri queue : :priqueue (int ш)
( if (ш , 1) error ("Ошибка в равмере"");
maxsize = m;
x = new floaUmaxsize+13;
n = 0;
)
Эта процедура проверяет максимальный размер приоритетной очереди, запоминает его в ячейке maxsize, выделяет новый массив и устанавливает начальное значение для п. При объявлении массива указывается размер maxsize + 1, так как массивы в языке Си++ считаются с нулевого элемента, а в пирамидах используется индексация с 1. В моей реализации использовалось макроопределение ASSERT для проверки инварианта структуры данных:
«define ASSERT(e) if (1(e)) error ("Утверждение не вытолнено")
Макроопределения в языке Си++ такие же, как и в языке Си. Класс приоритетных очередей имеет функцию типа private, которая имеет значение "истина" (возвращает на выхо-