¿Alguien puede darme una idea para escribir un programa que use varias estructuras de datos?

¿Estás tratando de familiarizarte con cómo construir estas estructuras, o simplemente cómo usarlas en algo? Si es lo primero, ¿por qué no simplemente implementar la estructura e intentar proporcionar la misma API que las implementaciones estándar (por ejemplo, busque la API Java para sus clases estándar que implementan List, Queue, etc.)

Si desea crear una aplicación solo para ver cómo usaría estas estructuras, intente algo simple, para concentrarse en la estructura particular que le interesa (y así no tiene que lidiar con más de una a la vez) :

  • Lista: un ejemplo común que varios idiomas han implementado es una lista de tareas pendientes. Debe administrar agregar elementos a la lista, eliminarlos, tal vez editarlos.
  • Pila: ¿Qué hay de implementar un “juego” de Towers-of-Hanoi (realmente solo una demostración de los pasos necesarios para resolverlo)? O una calculadora RPN como los viejos HP de hace años y años.
  • Cola: ¿qué tal una cola de trabajo? Varias partes del programa podrían poner trabajos en la cola, y varios trabajadores podrían eliminar trabajos de la cola.
  • Árbol binario: ¿qué tal implementar un diccionario, en el menor espacio posible? Esto podría hacerse con un árbol.

La otra cosa que puede hacer es ir a un lugar como HackerRank, que tiene muchos problemas que requieren la creación de un programa (generalmente solo una parte de uno) que utilizará una u otra de las estructuras que le interesan.

¿Alguien puede darme una idea para escribir un programa que use varias estructuras de datos?

Quiero implementar estructuras de datos en C (Listas, pilas y colas, árboles binarios y gráficos) en un programa (un servidor, una calculadora u otra cosa).

Si está decidido a seguir esta ruta, le sugiero que escriba una aplicación que muestre el uso de varias estructuras para la misma cosa y compare el rendimiento de ciertas operaciones.

Por ejemplo, podría insertar 100,000 elementos aleatorios en diferentes estructuras de datos en diferentes subprocesos y mostrar gráficamente qué tan avanzada está cada operación, o cuánto tiempo tomó la operación si la operación no está completa.

¿Que sugieres?

Pero, realmente, lo que sugiero es algo completamente diferente a eso.

Para mí no tiene sentido decir: “¿Puedes pensar en una aplicación en la que pueda incluir todas estas estructuras de datos?” Cualquier aplicación que vaya a hacer eso naturalmente (en lugar de forzarla a cumplir los requisitos, como hice ) va a ser enorme. No una persona que pasa un par de semanas, sino un equipo que pasa años-persona.

Parece que su objetivo es familiarizarse con estas estructuras y permitirse escribir sus propias implementaciones, lo que creo que es un gran objetivo.

El siguiente paso, en lugar de preguntar “¿Qué aplicación debo escribir para hacer eso?” Sería preguntar “¿Cuál es una buena manera de hacer eso?” Y eso te daría una respuesta completamente diferente.

Creo que tiene sentido probar cada estructura de datos. Escriba pruebas para asegurarse de que su código funciona, haga funcionar la estructura de datos y asegúrese de que todas sus pruebas pasen. Luego usa cada uno de ellos. Intente escribir una cola de trabajo simple donde realice y ejecute una cosa a la vez. Siga adelante y use una cola para eso. Luego cambie el diseño, donde cada elemento recibe una prioridad asignada. Mire cómo usar un montón máximo para eso en su lugar.

Piensa en la abstracción. No solo desea escribir código para una cola, sino también un código que lo abstraiga: idealmente, su código que inserte elementos en la cola o el montón máximo no debería tener que cambiar (aparte de agregar la prioridad).

Buena suerte.

Escribe una aplicación como Facebook.

Escribe un compilador.

More Interesting

¿Cuáles son los algoritmos más utilizados en los que puedo confiar para mejorar mis habilidades de resolución de problemas?

Si uno es un desarrollador JS (comprende algoritmos, estructuras de datos, patrones), ¿qué tan difícil sería cambiar al desarrollo Java o C ++?

¿De qué juez en línea puedo aprender algoritmos estándar y estructuras de datos?

¿Qué tan difícil es el algoritmo de verificación de traducción de Duolingo? ¿Existen otras herramientas de código abierto similares por ahí?

¿Qué es la clasificación interna y la clasificación externa?

¿Por qué algún algoritmo tiene la misma salida?

¿Qué estructuras de datos y algoritmos básicos se deben aprender antes de comenzar la programación competitiva?

¿Qué tan complejo debe ser un algoritmo criptográfico para estar sujeto a las regulaciones de exportación de criptografía?

¿Cuál es el mejor enfoque para adivinar los diacríticos árabes mediante programación?

¿Existe una mejor complejidad que O (n log n) para ordenar?

¿Cómo recomienda Foursquare las sugerencias de mis amigos de Facebook?

Cómo encontrar el segundo número más pequeño de 3 entradas sin usar la matriz

Cómo aprender algoritmos y programación competitiva de manera rápida y efectiva cuando te estás haciendo viejo

¿Cómo es posible que algún algoritmo sea más rápido que cualquier otro algoritmo similar para algunos valores de la variable de entrada y más lento para otros valores?

Cómo hacer que los algoritmos sean eficientes