Ver Mensaje Individual
  #5 (permalink)  
Antiguo 10/01/2015, 13:57
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 11 meses
Puntos: 206
Respuesta: Implementación pila de manera eficiente.

Puedes usar push() y un array para añadir. "end" no lo necesitas, un simple this,length que no sea cero te servirá para saber si el array está vacío o no (aunque devuelva un tamaño no creíble). Es también O(1) porque internamente el objeto Array mantiene el atributo length con el índice numérico más grande que exista en el array + 1, que va actualizando en memoria cada vez que se inserta o elimina un elemento, como también hace PHP.

En cuanto a al eficiencia, con javascript nada es lo que parece. Me he llevado muchos palos por hacer suposiciones.

Y ya que estamos con la eficiencia, un this(); es más rápido que un Queue.call(this).

Código Javascript:
Ver original
  1. function Queue (){
  2.    this.elements = []
  3.    this.begin = 0;
  4. }
  5.  
  6. Queue.prototype.enqueue = function (element) {
  7.    this.elements.push(element);
  8.    
  9. }
  10.  
  11. Queue.prototype.dequeue = function () {
  12.    var value = this.elements[this.begin];
  13.    if (!this.elements.length) {
  14.       this(); // si la cola tiene 1 elemento dejarla vacía y resetear indices begin y end
  15.    } else if (this.elements.hasOwnProperty(this.begin)) {
  16.       delete this.elements[this.begin++];
  17.    }
  18.    return value;
  19. }

El hasOwnProperty hace lo que parece.

Última edición por marlanga; 10/01/2015 a las 14:23