terça-feira, 3 de abril de 2012

(Javascript) Lista Encadeada/Ligada em JS

Consegui implementar um sistema de lista encadeada em javascript, de forma bastante eficiente, conseguimos atingir velocidades em loopings extremas, segue um código test



<script>



// Criação da array especial com 2000 elementos
var arrSpecial = new Array(2000);

// Criar variáveis que possam ser passadas por referencia na função intervalChangeItter
var arrInit = new Object();
var arrFinal = new Object();

// Preparar propriedade do objeto com valor inicial -1
arrInit.referencia = -1;
arrFinal.referencia = -1;

// Colocar números a serem passados
intervalChangeItter(arrSpecial, 3, arrInit, arrFinal);
intervalChangeItter(arrSpecial, 7, arrInit, arrFinal);
intervalChangeItter(arrSpecial, 9, arrInit, arrFinal);
intervalChangeItter(arrSpecial, 10, arrInit, arrFinal);

// Executar o loop lista encadeada
document.write("Usando Lista Encadeada:<br/>")
for(var i = arrInit.referencia ; i != undefined; i = arrSpecial[i ]) {
document.write(i + "<br/>")
}

// Executar o for each
i = 0;
document.write("Usando Foreach:<br/>")
for(var i in arrSpecial) {
document.write(arrSpecial[i ] + "<br/>")
}

// Executar o for COMUM
i = 0;
document.write("Usando FOR comum:<br/>")
for(i = 0; i < arrSpecial.length; i++) {
document.write(arrSpecial[i ] + "<br/>")
}

// Funcao
function intervalChangeItter(array, valor, inicio, ultimoNumeroVar) {

if (array[valor] != undefined || valor == undefined)
return false;

if (inicio.referencia == -1) {
inicio.referencia = valor;
return true;
}

if (valor < inicio.referencia) {
array[valor] = inicio.referencia;
return inicio.referencia = valor, true;
}

if (array[inicio.referencia] == undefined) {
array[inicio.referencia] = valor
ultimoNumeroVar.referencia = valor
return true;
}

array[ultimoNumeroVar.referencia] = valor
ultimoNumeroVar.referencia = valor

return true;
}

</script>

Resultados:
64 ms-> Lista Encadeada
4911 ms -> Foreach
51893 ms-> For Comum

Rápido, não?
Quando puder coloco mais modificações e otimizações, por enquanto é isto


Nenhum comentário:

Postar um comentário