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 originalfunction Queue (){
this.elements = []
this.begin = 0;
}
Queue.prototype.enqueue = function (element) {
this.elements.push(element);
}
Queue.prototype.dequeue = function () {
var value = this.elements[this.begin];
if (!this.elements.length) {
this(); // si la cola tiene 1 elemento dejarla vacía y resetear indices begin y end
} else if (this.elements.hasOwnProperty(this.begin)) {
delete this.elements[this.begin++];
}
return value;
}
El hasOwnProperty hace lo que parece.