¿Cuáles son algunas estructuras de datos que debo aprender?

A2A.
Narendra Nath ya había especificado las estructuras de datos básicas (Array, LinkedList, Stack, Queues).
Le sugiero que también aprenda las siguientes estructuras de datos:

  1. Árbol de búsqueda binaria:
    Intenta implementarlo usando una matriz. Le enseñará el poder de la manipulación del índice de matriz. Cómo puede manipular la estructura del índice de matriz para acceder al elemento secundario izquierdo y derecho (Por ejemplo: si n es el índice del elemento primario en la matriz, entonces el índice secundario izquierdo es 2 * ny el índice secundario derecho es 2 * n + 1)

    Intente implementarlo usando punteros / referencias). Le enseñará el direccionamiento del puntero, para implementar una estructura tipo árbol.

  2. Heap (intente implementar Heap, maxHeap / minHeap). Los montones son fundamentales detrás de las estructuras de datos como Priority Queue (que usa minHeap). Building heap le enseñará cómo se puede utilizar la estrategia de indexación mencionada en la viñeta 1 para acceder de manera eficiente al elemento más pequeño o más grande en un conjunto
  3. Grafico:
    Impleméntelo una vez usando la matriz de adyacencia (matriz bidimensional),
    Impleméntelo una vez usando la lista de adyacencia (use vector si está usando C ++, o Vector of Vector si está usando Java). Aprenderá cómo usar la lista de adyacencia ayuda a optimizar los algoritmos DFS y BFS. Para cada implementación (matriz de adyacencia / lista de adyacencia) escriba el algoritmo DFS y BFS
  4. Estructura de datos hash:
    Implemente Hashing usando Array. Escriba una estrategia de sondeo lineal / sondeo cuadrático.
    Utilice una variedad de punteros / referencias para implementar la estrategia de sondeo de cubos
  5. Implemente Trie (frecuente en codificación / entrevistas técnicas en empresas basadas en productos):
    Puedes imaginar que los diccionarios se crean / mantienen
  6. Implemente Suffix Tree (frecuente en codificación / entrevistas técnicas en empresas basadas en productos):
    Es una variante comprimida de Trie.
  7. Árbol de segmentos / Árbol de Fenwick (Raramente se pregunta durante las entrevistas. Pero son divertidos de aprender):
    Verá cómo se usan para las consultas de rango. Como devolverme elemento mínimo entre i y j. O incluso consultas de actualización de rango. Agregue / reste el valor x a cada elemento entre i a j, luego devuelva el elemento Min / Max entre p a q.

Hay muchas estructuras de datos que no he cubierto. Todo lo anterior es muy importante desde el punto de vista del aprendizaje y también en la perspectiva de la entrevista de codificación.

Recuerde que leer un algoritmo (teoría) no es suficiente para aprender.
Durante mi segundo año, no he estudiado específicamente un libro para la estructura de datos. Había echado un vistazo a Comprar estructuras de datos usando C y C + Libro en línea a precios bajos en India una vez.
Solía ​​leer la teoría para cada una de las estructuras de datos anteriores de Data Structures: GeeksforGeeks y Wikipedia.
Después de leer la teoría, había implementado cada una de las estructuras de datos anteriores usando C ++. Me ayudó mucho en el proceso de aprendizaje y desarrolló un pensamiento mecánico dentro.
¡Funcionó para mí, seguramente funcionará para usted!
¡Feliz codificación!

Supongo que esta lista tiene el propósito de prepararse para entrevistas.

  • Matrices y cadenas (muy común, se usa en casi todas partes)
  • Listas vinculadas
  • Pilas y colas
  • Arboles
  • Gráficos

More Interesting

Cómo calcular el producto máximo de una cadena entera usando k multiplicaciones

¿Es posible hackear usando el lenguaje de programación C?

¿Qué series matemáticas debo saber para calcular la complejidad de cualquier algoritmo o pseudocódigo?

¿Es adecuado usar un algoritmo de hash perceptual para desarrollar un motor de búsqueda de imágenes?

¿Cuál es la mejor manera de depurar un algoritmo recursivo?

¿Por qué no puede haber un algoritmo de clasificación que tenga el mejor y el peor caso de N tiempo de ejecución (por ejemplo, lineal)?

Java (lenguaje de programación): ¿Es correcto este método para insertar un nuevo nodo en un árbol de búsqueda binario?

¿Cuál es la compensación tiempo-espacio en el diseño de algoritmos?

¿Cuál es el papel de la memoria de montón?

¿Qué calcula este algoritmo? ¿Cuál es su funcionamiento básico? ¿Cuántas veces se ejecuta la operación básica? ¿Cuál es la clase de eficiencia de este algoritmo?

¿Cómo podemos encontrar eficientemente la segunda caminata más corta entre dos vértices de un gráfico?

¿Debo compartir un nuevo algoritmo de clasificación que escribí? ¿Existe algún potencial monetario en un algoritmo? De ser así, ¿cómo capitalizo?

Cómo resolver radicales anidados como [math] (a + \ sqrt b \,) ^ {1/3} [/ math]

¿Vale la pena pagar 6 x $ 49 por una estructura de datos y especialización de algoritmos en Coursera?

¿Cuáles son los 10 algoritmos y estructuras de datos imprescindibles para un concurso de programación?