extract( var pq ) : integer;
case pq is nil:
Error;
case pq is boolean array:
Find last true entry;
if only one entry remains then transform to SingleEntry;
case pq is single element:
return element;
pq := nil;
case pq is full node:
return maximum;
if bottom queue corresponding to maximum is single element
then extract from top queue;
max := max of bottom[ max of top ];
else extract from bottom;
max := max of bottom;
end;
|