Beruflich Dokumente
Kultur Dokumente
Estructuras de Datos
Conceptos Fundamentales y
Lenguaje de Programación C
Por ejemplo:
– Registrar las transacciones de usuario con su tarjeta de débito,
para poder consultar las transacciones realizadas por esa
persona durante un mes.
– Almacenar información geográfica de una región para poder
obtener aquellos elementos que se ubican dentro de un
rectángulo de búsqueda
– Almacenar un mapa de una ciudad para poder encontrar el
camino más corto entre dos puntos dados del mapa.
¿Qué son las estructuras de datos?
man gcc
Estructuras de Datos Básicas
Lenguaje C
El primer programa en C:
La forma de usarlo en Linux para compilar el programa test.c es:
#include <stdio.h>
int main() {
printf(“Hola Mundo\n”);
return 0;
}
Estructuras de Datos Básicas
Tipos de Datos en Lenguaje C
La sentencia de declaración de variables es una de las más importantes
en lenguaje C.
Usando:
int x;
estamos declarando una variable x de tipo entero.
0 1 2 ... 999
A
Ejemplo:
emp[0].codigo = 1000;
emp[0].sueldo = 2540.87;
emp[1].codigo = …;
emp[1].sueldo = …;
Punteros
Punteros
Un puntero en los lenguajes de programación es una variable que puede
almacenar la dirección en donde se almacena otra variable.
Se dice que el puntero apunta a dicha variable.
int main() {
int *p; /*puntero que puede apuntar a una variable de tipo entero*/
int i;
i = 7;
p = &i;
(*p)++; /*es equivalente a *p = *p + 1; */
3000 7 i
3000 p
Punteros
Punteros
Gráficamente: Después del incremento
3000 8 i
3000 p
Punteros
Punteros
Otro ejemplo usando structs:
int main() {
struct empleado *p; /*puntero a una variable de tipo empleado*/
int A[10], i;
p = A; /*p apunta a la dirección base de A*/
for (i=0; i < 10; i++) {
*p = i;
p++; /*apunta al siguiente elemento del arreglo*/
}
return 0;
}
Almacenamiento de Datos en
Memoria Secundaria
Archivos
Los archivos en C son vistos como una secuencia de bytes, que
usualmente se almacena en memoria secundaria.
Permiten almacenar grandes volúmenes de información, dado que su
capacidad máxima está dada por el espacio disponible en disco.
Ejemplo en C:
#include <stdio.h>
int main() {
FILE *fp; /*descriptor de archivo*/
…
return 0;
}
Almacenamiento de Datos en
Memoria Secundaria
Archivos
Los punteros FILE * deben asociarse con un archivo usando la
función fopen.
Ejemplo en C:
#include <stdio.h>
int main() {
FILE *fp; /*descriptor de archivo*/
/*ahora asocia el puntero con el archivo salida.txt*/
fp = fopen(“salida.txt”, modo);
…
return 0;
}
En donde modo debe ser:
“r”, “w”, “a”, “r+”, “w+”, “a+”, dependiendo del modo en que se quiera
abrir el archivo, y del tipo de acciones que se quieran llevar a cabo sobre él.
Almacenamiento de Datos en
Memoria Secundaria
Archivos
La función fopen retorna el valor NULL cuando hubo un error al abrir
el archivo. El valor retornado se usa para detectar condiciones de error
e imprimir los mensajes adecuados:
#include <stdio.h>
int main() {
FILE *fp; /*descriptor de archivo*/
/*ahora asocia el puntero con el archivo salida.txt*/
fp = fopen(“salida.txt”, “r”);
if (fp == NULL) {
printf(“Error al abrir el archivo salida.txt\n”);
exit(1);
}
…
return 0;
}
Almacenamiento de Datos en
Memoria Secundaria
Archivos
La función fclose cierra el vínculo entre un puntero FILE * y un
archivo en disco. Permite usar el puntero con otro archivo.
#include <stdio.h>
int main() {
FILE *fp; /*descriptor de archivo*/
/*ahora asocia el puntero con el archivo salida.txt*/
fp = fopen(“salida.txt”, “r”);
if (fp == NULL) {
printf(“Error al abrir el archivo salida.txt\n”);
exit(1);
}
…
fclose(fp);
return 0;
}
Almacenamiento de Datos en
Memoria Secundaria
Archivos ASCII
Consisten de texto legible por un humano a través de un editor de texto
La función fprintf funciona de manera similar a printf, pero
indicando en qué archivo debe imprimirse la salida
#include <stdio.h>
int main() {
FILE *fp; /*descriptor de archivo*/
fp = fopen(“salida.txt”, “w”);
if (fp == NULL) { … }
fprintf(fp, “Hola mundo!!!\n”);
fclose(fp);
return 0;
}
Almacenamiento de Datos en
Memoria Secundaria
Archivos Binarios
Permiten almacenar datos usando el formato de bits que tienen en
memoria principal. Usualmente, no serán legibles para un humano.
La función fwrite permite escribir datos binarios en un archivo
#include <stdio.h>
int main() {
FILE *fp; /*descriptor de archivo*/
int i = 5, nItems;
fp = fopen(“salida.dat”, “w”);
if (fp == NULL) { … }
nItems = fwrite(&i, sizeof(int), 1, fp);
if (nItems != 1) {… /*mensaje de error*/…}
fclose(fp);
return 0;
}
Almacenamiento de Datos en
Memoria Secundaria
Archivos Binarios
La función fread permite leer datos binarios desde un archivo
#include <stdio.h>
int main() {
FILE *fp; /*descriptor de archivo*/
int i, nItems;
fp = fopen(“salida.dat”, “r”);
if (fp == NULL) { … }
nItems = fread(&i, sizeof(int), 1, fp);
if (nItems != 1) {… /*mensaje de error*/…}
printf(“El valor leido en la variable i es %d\n”, i);
fclose(fp);
return 0;
}
Almacenamiento de Datos en
Memoria Secundaria
Archivos Binarios
Ejemplo que almacena un arreglo de enteros en un archivo:
#include <stdio.h>
#define N 10
int main() {
FILE *fp; /*descriptor de archivo*/
}
La lista de parámetros puede ser vacía.
Las funciones terminan y regresan a su invocante al llegar al último }, o bien
se puede forzar el regreso con la sentencia return.
Funciones en Lenguaje C
Funciones en C: parámetros formales y reales
• Los parámetros formales de una función son los definidos en la lista de
parámetros de dicha función.
• Como parámetro real se usa el nombre del arreglo (recordar que el nombre
del arreglo se evalua a la dirección base del mismo).
• Además, se debe incluir un parámetro de tipo int que indique el tamaño del
arreglo
– C no tiene otra forma de conocer el tamaño de un arreglo.
Memoria Dinámica
Definición
Malloc y free en C