Cómo usar estructuras de datos como listas enlazadas en preguntas de entrevistas de Javascript

Creo que deberías hacer preguntas basadas en problemas reales, por ejemplo

  1. En los navegadores de safari más antiguos, la pila de ejecución era muy pequeña, lo que siempre solía provocar un desbordamiento de la pila. En tales casos, implementar nuestra propia pila y dividir un problema recursivo en uno iterativo fue un buen beneficio que nos permitió aumentar drásticamente el límite, ya que nuestra implementación de la pila se basaría en matrices.
  2. Supongamos que tiene una aplicación basada en mapas o tuberías y desea encontrar la ruta más corta, etc.

El mayor problema que enfrento es hacer un análisis asintótico para el caso del código JS. Sin saber qué sucede durante la compilación (V8, rhino o algún otro JIT). Es imposible decir la complejidad del tiempo o el espacio. Si internamente todo es un Hashmap (para matrices más pequeñas) ?, ¿Se puede basar algo como una matriz en el código compilado?

No me enfrento a este problema en Java o Python.

En lo que respecta a la lógica, todo es igual, puede preguntar cualquier cosa, pero cómo se almacena en la memoria depende del entorno.

Para implementar la estructura de datos en cualquier lenguaje de programación, debe tener una comprensión teórica clara sobre ese DS y qué operaciones están expuestas a través de su ADT.

Por ejemplo, en el caso de ADT de Lista Vinculada, las operaciones podrían ser para su construcción, agregar elemento al comienzo de la lista, agregar elemento al final de la lista, eliminar el primer y último elemento, eliminar un elemento dado en particular, etc.

(addFirst (), addLast (), removeFirst (), removeLast (), remove (val))

Una vez que haya terminado con esto, puede implementar esto en cualquier idioma.

En el caso de Java, cree una interfaz que especifique todos estos métodos y luego cree una clase de implementación para esa interfaz.

En JavaScript, puede usar Node.js como plataforma.

  • En primer lugar, cree funciones de constructor para LinkedList y su nodo.

  • Defina la implementación de todas las operaciones del ADT como funciones JS y adjunte aquellas con el prototipo de LinkedList:

En el código anterior, se definen las operaciones addFirst y addLast. Del mismo modo, defina todas las operaciones del ADT.

En el caso de Node.js, podemos poner todo este código dentro de un archivo que dice LinkedList.js y, al final, exportar la función de constructor LinkedList:

module.exports = LinkedList;

Finalmente, escriba el código del probador (LinkedListTester.js) para verificar la implementación:

Implementación de la lista vinculada:

Ejemplo 7.1:
función LinkedList () {
this.length = 0;
Nodo de función (v, n) {
if ((typeof v === ‘number’) && ((n! = null && n instanceof LinkedList.Node) || n === null)) {
this.value = v;
this.next = n;
}
sino if ((typeof v === ‘number’) && n === undefined) {
this.value = v;
this.next = null;
}
más
lanzar un nuevo error (‘argumentos inválidos’);
}
LinkedList.Node = Node;
}
Ejemplo 7.4:
LinkedList.prototype.addHead = function (value) {
this.head = new LinkedList.Node (valor, this.head);
this.length ++;
};

Este código es de ” Resolución de problemas en estructuras de datos y algoritmos usando JavaScript “. Este libro es fácil de seguir y está escrito para el punto de vista de la entrevista . Además, estos libros tienen el último capítulo sobre Diseño de sistemas , que también se requiere en las entrevistas.

Los enlaces de los libros en Amazon están abajo:

Algoritmos de estructuras de datos usando JavaScript.

.

Hay idiomas tradicionales para aprender DS y Algo. Los enlaces de los libros en Amazon están abajo:

1. Resolución de problemas en estructuras de datos y algoritmos utilizando C

2. Resolución de problemas en estructuras de datos y algoritmos usando C ++

3. Resolución de problemas en estructuras de datos y algoritmos utilizando Java

4. Resolución de problemas en estructuras de datos y algoritmos con C #

5. Resolución de problemas en estructuras de datos y algoritmos usando Python

6. Resolución de problemas en estructuras de datos y algoritmos con Visual Basic .Net

He escrito un artículo exactamente sobre esto. Se guía a través de la creación de una Lista vinculada en JavaScript, la teoría detrás de ella y sus ventajas y desventajas en comparación con una matriz. Espero eso ayude.

Estructuras de datos JS: Lista vinculada – codeburst

En una entrevista, me resulta difícil creer que le pidan que implemente uno desde cero sin acceso a Internet. Me preguntaron cómo resolver problemas con ellos. Aprender cómo funcionan, cómo usarlos y sus beneficios / inconvenientes debería ser suficiente para la mayoría de las entrevistas de software.

Bueno, esto variará de una entrevista a otra y de una pregunta a otra.

Por ejemplo, me pidieron que reconstruyera un árbol binario dado una representación de matriz de los recorridos en orden y posteriores del árbol. Para este problema, el entrevistador estaba probando mi conocimiento de los recorridos, no mi conocimiento de la implementación de un árbol binario. Le recomiendo que pregunte sobre todo sobre lo que puede hacer suposiciones . Le pregunté si podía suponer que ya teníamos una clase de árbol de búsqueda binaria y que teníamos acceso a los miembros de la clase, etc. Estas eran buenas suposiciones, pero primero tuve que preguntar.

Un segundo ejemplo es que una vez me pidieron que diseñara una estructura de datos que admitiera inserciones, eliminaciones y búsquedas, todo en tiempo de registro (n). Reconocí que un árbol AVL encajaría en la factura, pero no podía simplemente asumir que ya había una clase de árbol AVL escrita, ya que el objetivo de la pregunta era verme implementar la estructura de datos.

Siempre desea preguntar si puede asumir que existe una clase determinada. Sin preguntar, su mejor opción es asumir que no tiene acceso a estas clases.