/**
* Clase que representa un montículo
**/
class Heap {
/**
* Crea un nuevo montículo
* @param {array} vector Array de elementos del montículo
* @param {number} contador Número de elementos del montículo
* @param {number} max Número máximo de elementos del montículo
* @constructor
*/
constructor(){
this.vector = {};
this.contador = 0;
this.max = 100;
}
/**
* Indica si el montículo está vacío
* @returns si el contador es igual a 0
*/
estaVacio() {
return this.contador == 0;
}
/**
* Devuelve el número de elementos del montículo
* @returns número de elementos del montículo
*/
getContador() {
return this.contador;
}
/**
* Flota un elemento del montículo para restaurar la propiedad del montículo
* @param {number} i Elemento a flotar
*/
flotar(i) {
while((i>1)&&(this.vector[Math.floor(i/2)]this.vector[i])) {
i = hd;
}
if((hi<=this.contador) && (this.vector[hi]>this.vector[i])) {
i = hi;
}
this.intercambiar (this.vector[p], this.vector[i]);
} while (p == i);
}
/**
* Inserta un elemento en el montículo
* @param {number} elemento Elemento a insertar
*/
insertar(elemento) {
if (this.contador == this.max) {
console.log ("Error, montículo lleno");
}
else {
this.contador = this.contador + 1;
this.vector[this.contador] = elemento;
this.flotar(this.contador);
}
}
/**
* Devuelve el primer elemento del montículo
* @returns Primer elemento del montículo
*/
primero(){
if (this.contador == 0){
return "error";
}
else {
return this.vector[0];
}
}
/**
* Extrae el primer elemento del montículo
* @returns Primer elemento del montículo
*/
obtenerCima(){
var e;
if (this.contador != 0) {
e = this.vector[0];
this.vector[0] = this.vector[this.contador];
this.contador = this.contador -1;
this.hundir(0);
return e;
}
else {
return "error";
}
}
/**
* Intercambia dos elementos del montículo
* @param {number} i Elemento a intercambiar
* @param {number} j Elemento a intercambiar
*/
intercambiar(i,j){
var temp = 0;
temp = this.vector[i];
this.vector[i] = this.vector[j];
this.vector[j] = temp;
}
}