Montículos
Tipo Montículo
Sección titulada «Tipo Montículo»tipo Montículo = registro    Tamaño_montículo : 0..Tamaño_máximo    Vector_montículo : vector [1..Tamaño_máximo] de Tipo_Elementofin registroInicializar Montículo ( M )
Sección titulada «Inicializar Montículo ( M )»procedimiento Inicializar_Montículo ( M )    M.Tamaño_montículo := 0fin procedimientoMontículo Vacío ( M )
Sección titulada «Montículo Vacío ( M )»función Montículo_Vacío ( M ) : test    return M.Tamaño_montículo = 0fin funciónFlotar ( M, i ) (privado)
Sección titulada «Flotar ( M, i ) (privado)»procedimiento Flotar ( M, i ) (* privado *)    mientras i > 1 y M.Vector_montículo[i div 2] < M.Vector_montículo[i]    hacer intercambiar M.Vector_montículo[i div 2] y M.Vector_montículo[i];        i := i div 2    fin mientrasfin procedimientoInsertar ( x, M )
Sección titulada «Insertar ( x, M )»procedimiento Insertar ( x, M )    si M.Tamaño_montículo = Tamaño_máximo entonces        error Monticulo lleno    sino        M.Tamaño_montículo := M.Tamaño_montículo + 1;        M.Vector_montículo[M.Tamaño_montículo] := x;        Flotar ( M, M.Tamaño_montículo )fin procedimientoHundir ( M, i ) (privado)
Sección titulada «Hundir ( M, i ) (privado)»procedimiento Hundir ( M, i ) (* privado *)    repetir        HijoIzq := 2*i;        HijoDer := 2*i+1;        j := i;        si HijoDer <= M.Tamaño_montículo y M.Vector_montículo[HijoIzq] > M.Vector_montículo[i]        entonces i := HijoIzq;        intercambiar M.Vector_montículo[j] y M.Vector_montículo[i];    hasta j = i (* Si j=i el nodo alcanzó su posición final *)fin procedimientoEliminarMax ( M )
Sección titulada «EliminarMax ( M )»función EliminarMax ( M ) : Tipo_Elemento    si Montículo_Vacío ( M ) entonces        error Montículo vacío    sino        x := M.Vector_montículo[1];        M.Vector_montículo[1] := M.Vector_montículo[M.Tamaño_montículo];        M.Tamaño_montículo := M.Tamaño_montículo - 1;        si M.Tamaño_montículo > 0 entonces            Hundir ( M, 1);        devolver xfin funciónCreación de montículos — O(n)
Sección titulada «Creación de montículos — O(n)»procedimiento Crear_Montículo ( V[1..n], M )    Copiar V en M.Vector_montículo;    M.Tamaño_montículo := n;    para i := M.Tamaño_montículo div 2 hasta 1 paso -1        Hundir(M, i);    fin parafin procedimiento   Pablo Portas López  © 2025 licensed under CC BY 4.0  