Académique Documents
Professionnel Documents
Culture Documents
Estructuras dinámicas
E v a \0
G i l \0
23
? nombre
E v a \0 … aux
D11FF34 nombre
D11FF34
strcpy(nombre,aux);
D11FF34 nombre E v a \0
Administración de Sistemas Informáticos D11FF34 17/10/08 13:16
int LeerAlumno(struct reg_alumno *a) else
{ {
char aux[80]; strcpy(a->apellidos,aux);
printf("Nombre del alumno: "); printf("Edad: ");
gets(aux); scanf("%d",&a->edad);
a->nombre=(char *) fflush(stdin);
malloc((strlen(aux)+1)*sizeof(char)); return 0;
if (a->nombre==NULL) }
return 1; }
else }
{
strcpy(a->nombre,aux);
printf("Apellidos: ");
gets(aux);
a->apellidos=(char *) malloc
((strlen(aux)+1)*sizeof(char));
if (a->apellidos==NULL)
return 1;
int *v;
int tamanio = 20;
v = (int *) malloc (tamanio * sizeof(int));
…
0 1 2 3 19
v
donde block representa el vector actual y size el nuevo tamaño (en bytes)
necesario. La función, en caso de que no devuelva NULL, copiará todos los
datos de block en el nuevo vector dinámico.
tamanio = 25;
v = (int *) realloc (v, tamanio*sizeof(int));
1 7 9 …
0 1 2 3 19
1 7 9 …
0 1 2 3 24
int *v;
int tamanio = 20;
v = (int *) calloc (tamanio, sizeof(int));
0 0 0 0 0 0 …0
0 1 2 3 19
v
– Los vectores deben ser declarados en tamaño en el programa fuente, de modo que
si se elige uno mayor que el necesario, entonces se malgasta espacio de memoria,
y si se hace pequeño, podría no ejecutarse el programa.
– La operación de añadir datos al final del vector es un proceso rápido; sin embargo,
las inserciones y eliminaciones en el interior del vector son lentas y complejas, ya
que puede ser necesario desplazar cada elemento del éste para hacer espacio al
nuevo elemento, o bien cerrar el espacio dejado por una eliminación.
Si a esta dificultad se añaden los casos en que las operaciones anteriores sean
frecuentes, se puede deducir que en estos casos las estructuras más idóneas
son las estructuras dinámicas de datos.
struct nodo
{
struct nombre_estructura informacion;
struct nodo *siguiente;
struct nodo *anterior;
};