El título de la respuesta me llamó la atención porque me gusta la simplicidad y enseño CS, por lo que parece ser algo sobre lo que me gustaría escribir.
El comentario a esta pregunta dice que tiene 12 años y que comprende C ++, matrices, funciones y punteros. Mi primer comentario es que lo que sabes es probablemente C, no C ++, lo cual es algo bueno porque, y es solo mi humilde opinión, debes mantenerte alejado de C ++ al menos por un tiempo, si alguien dice una palabra sobre esto, puedes argumente que Linux está codificado en C y vea si alguien tiene un problema con eso.
Volviendo al tema … Si desea aprender sobre algoritmos y estructuras de datos, C es el mejor ejemplo de una máquina de puntero, que es la forma abstracta de decir que tiene un patio de juegos de estructuras de datos. Con la asignación de memoria y los punteros, puede construir cualquier estructura de datos, puede comenzar con listas vinculadas, luego listas enlazadas dobles, luego pilas, colas, colas dobles, colas prioritarias, etc. Incluso puede inventar sus propias estructuras de datos, eso está bien. Tengo varios descargos de responsabilidad sobre esto, pero primero necesito escribir algo sobre libros.
- ¿Qué técnica general siguen los autores al escribir libros técnicos en LaTeX?
- ¿Aproximadamente cuánto más rápido es el GCD binario que el algoritmo euclidiano para la aritmética de precisión fija en las computadoras actuales?
- Cómo resolver el problema ADDGP en SPOJ
- ¿Qué estructuras de datos y algoritmos de programación heredados se enseñan en la universidad pero que no se usan después de la academia? ¿Aún debemos aprenderlos?
- ¿Cuál es la mejor manera de extrapolar una señal dispersa que proviene de un filtro de Kalman?
Es muy difícil para alguien que no lo conoce determinar lo que puede o no puede aprender, así que mi recomendación es que busque en Google y lea Wikipedia sobre las estructuras de datos que acabo de enumerar y cree sus propias versiones en C. Creo podrá comprenderlos bastante bien y, a medida que siga codificando y probando, podrá seguir buscando más estructuras de datos para jugar. Omita los que no entiende, vuelva más tarde para verificarlos.
Y ahora es el momento de comenzar mis renuncias.
Descargo de responsabilidad n. ° 1: Probablemente esta NO sea la forma correcta de aprender sobre algoritmos y estructuras de datos, pero la idea es permitirle aprender, si codifica muchas de esas estructuras de datos básicas, comprenderá bien la asignación de memoria, los punteros, persiguiendo pérdidas de memoria y muchas otras cosas que son realmente muy útiles.
“La práctica no hace la perfección, la práctica perfecta hace la perfección. Tenemos que practicar cómo practicar”.
Descargo de responsabilidad # 2: Nada (y no quiero decir nada) de lo que codifique ahora servirá para un propósito real en el futuro, tenga esto en cuenta al codificar, si necesita usar una de estas estructuras de datos sabiamente usará un biblioteca estándar; pero eso no significa que perderá su tiempo porque estoy 100% seguro de que el ejercicio mejorará sus habilidades de codificación y también mejorará su capacidad para comprender los temas.
Descargo de responsabilidad # 3: incluso si usa el STL, manténgase alejado de las listas vinculadas 🙂
Descargo de responsabilidad # 4: ¿Dije que debería mantenerse alejado de C ++ y usar C simple? Sí, dije eso antes. Yo lo mantengo.
Finalmente, un consejo importante: cuando codifica estructuras de datos que son comunes, lo está haciendo porque quiere aprender y no porque desea reinventar la rueda, pero no hay nada de malo en reinventar ruedas si le gustan las ruedas. Me gusta decir que si planeas hacer ruedas super duper en el futuro, primero debes comenzar a reinventar la rueda. Pero ese no fue mi consejo, el consejo es: use lápiz y papel mientras codifica para mantener sus estructuras claras de forma gráfica, asegúrese de saber siempre hacia dónde apuntan sus punteros y por qué, esté limpio primero, sea eficiente después.
Me doy cuenta de que he escrito una respuesta larga que probablemente solo tenga sentido para el OP, pero después de considerarlo, eventualmente podría ser útil para otra persona en su misma posición e incluso si ese no es el caso si fuera útil para alguien, entonces estoy contento con el resultado.
Que te diviertas.