Una de las aplicaciones más interesantes y potentes de la memoria dinámica y de los punteros son, sin duda, las estructuras dinámicas de datos. Las estructuras básicas disponibles en C y C++ (structs y arrays) tienen una importante limitación: no pueden cambiar de tamaño durante la ejecución. Los arrays están compuestos por un determinado número de elementos, número que se decide en la fase de diseño, antes de que el programa ejecutable sea creado.
En muchas ocasiones se necesitan estructuras que puedan cambiar de tamaño durante la ejecución del programa. Por supuesto, podemos crear arrays dinámicos, pero una vez creados, tu tamaño también será fijo, y para hacer que crezcan o disminuyan de tamaño, deberemos reconstruirlos desde el principio.
Las estructuras dinámicas nos permiten crear estructuras de datos que se adapten a las necesidades reales a las que suelen enfrentarse nuestros programas. Pero no sólo eso, como veremos, también nos permitirán crear estructuras de datos muy flexibles, ya sea en cuanto al orden, la estructura interna o las relaciones entre los elementos que las componen.
Las estructuras de datos están compuestas de otras pequeñas estructuras a las que llamaremos nodos o elementos, que agrupan los datos con los que trabajará nuestro programa y además uno o más punteros autoreferenciales, es decir, punteros a objetos del mismo tipo nodo.
Una estructura básica de un nodo para crear listas de datos seria:
struct nodo \{
int dato;
struct nodo *otronodo;
};
El campo "otronodo" puede apuntar a un objeto del tipo nodo. De este modo, cada nodo puede usarse como un ladrillo para construir listas de datos, y cada uno mantendrá ciertas relaciones con otros nodos.
Para acceder a un nodo de la estructura sólo necesitaremos un puntero a un nodo.
Durante el presente curso usaremos gráficos para mostrar la estructura de las estructuras de datos dinámicas. El nodo anterior se representará asi:
Las estructuras dinámicas son una implementación de TDAs o TADs (Tipos Abstractos de Datos). En estos tipos el interés se centra más en la estructura de los datos que en el tipo concreto de información que almacenan.
Dependiendo del número de punteros y de las relaciones entre nodos, podemos distinguir varios tipos de estructuras dinámicas. Enumeraremos ahora sólo de los tipos básicos:
Al final del curso también veremos estructuras dinámicas en las que existen nodos de distintos tipos, en realidad no es obligatorio que las estructuras dinámicas estén compuestas por un único tipo de nodo, la flexibilidad y los tipos de estructuras sólo están limitados por tu imaginación como programador.
Excelente contribución tanto para los profesores como a los estudiantes, los felicito por tan grandiosa iniciativa.
excelente trabajo muy buen trabajo.
Esta muy bueno y completo el apunte............ pero hace falta un pequeño example sobre el tema
Muy buena contribucion esta pagina de verdad que sirve para los alumnos que estudian informaticaa =) MUCHAS GRACIAS
Excelente página. Os felicito.
Excelente página, es muy explicativa y muy completa, me leí todo el curso de C++ desde lo más básico del C, hasta el manejo de excepciones de C++, me di el trabajo de leer todo con calma, para entender correctamente los temas, ahora estoy terminando de ver arboles y ya tendría listo el curso de E.D.D.
Yo estudio para informatica, pero realmente en este curso he aprendido a programar, pues en mi universidad es muy lamentable la calidad de los profesores, por ejemplo todos enseñan a reservar memoria con el operador new, pero nadie dice que hay que liberarla, eso me parece una actitud muy irresponsable como programadores que son los profesores, por eso no me fío mucho de lo que dicen, por lo menos en programación prefiero ser autodidacta en mis conocimientos, ya que al parecer, hay muchos profesores que no aprendieron bien como funciona c++, en fin, muchas gracias por haberme enseñado bien, aqui es donde estoy aprendiendo realmente a programar, saludos y muchas gracias.
lei todo el curso de c++ con clase.net pero no encontre nada de Sublistas, en la U me pidieron algo sobre Lista con SubLista, utilizando dos Estructuras.
Struct Lista{
char dato1[10];
struct Lista *siguiente;
struct Sublista *sig;
};
Struct Sublista{
char dato2[10];
struct Sublista *sig;
};
Podrian ayudarme a crear la insercion o talvez orientarme como hacer dicha insercion!.
ya logre hacerlo, era una estructura anidada.
© Abril de 2001, Salvador Pozo Coronado, salvador@conclase.net