Estructura de Datos en Ingeniería Informática
Estructura de Datos en Ingeniería Informática
Introducción al curso
INF2240 – Estructura de datos
Escuela de Ingeniería Informática
Pontificia Universidad Católica de Valparaíso
Necesidades humanas
Lo primero que se debe plantear en
un curso ligado a tecnologías e
Ingeniería ingeniería es: ¿Porqué son
importantes las tecnologías de
información para la Ingeniería?
Ciencia
1
11/3/20
Sistema
10
10
2
11/3/20
Especificación de problemas
— Los problemas siempre se piensan enfocados en entregar soluciones, y
actualmente asociadas fuertemente al manejo de información.
Entradas Salidas
Procesamiento
11
11
12
12
3
11/3/20
Análisis de algoritmos
— Busca establecer la calidad de un programa y
compararlo con otros que resuelvan el mismo
problema, sin necesidad de desarrollarlos.
— Permite evaluar el diseño de las estructuras de
datos de un programa, midiendo su eficiencia.
— Se basa en: Las características estructurales del
algoritmo que respalda al programa.
13
13
Eficiencia
14
14
4
11/3/20
Análisis de Algoritmos:
Complejidad,
José Mañas, 1997
Análisis de Algoritmos,
Amalia Duch, 2007
15
15
5
11/3/20
16
17
17
1
11/3/20
18
18
19
19
2
11/3/20
02
Datos Información Conocimiento
01 03 20
20
01
Estratégico
Categorías de información: ¿A quién
02
va dirigida?, ¿Para quién es útil?
Táctico
03
Operacional
04
21
05
21
3
11/3/20
22
22
23
23
4
11/3/20
Cap. 18 Joyanes
Cap. 2 Joyanes
24
24
5
11/3/20
Arreglos y matrices
INF2240 – Estructura de datos
Escuela de Ingeniería Informática
Pontificia Universidad Católica de Valparaíso
25
Estructuras de dato
26
26
1
11/3/20
Información
Procesamiento
Transformación y
tratamiento.
Información
Dato Interpretación y cruce
con la experiencia.
Lo más básico y
elemental.
Decisiones
Etapa posterior.
27
27
Estructuras de dato
28
28
2
11/3/20
Estructuras estáticas
29
29
Arreglos unidimensionales
30
30
3
11/3/20
Arreglos unidimensionales
31
31
Arreglos unidimensionales
— Recordar que:
– Cada arreglo se reconoce por un identificador y cada dato se almacena en una
posición indexada.
– Un arreglo de largo N, tiene posiciones indexadas mediante enteros desde 0
hasta N-1. Nombre de la colección
Posición
Contenido de la colección
en la posición k-ésima
32
32
4
11/3/20
Arreglos unidimensionales
#include <stdio.h>
#define limite 10
main()
{
/*Declaracion*/
int arregloDeEnteros[limite];
int i;
/*Llenado de la coleccion*/
for(i=0; i<limite; i++)
{
printf("Ingrese un valor para llenar el arreglo:");
scanf("%d", &arregloDeEnteros[i]);
}
/*Despliegue de la coleccion*/
for(i=0; i<limite; i++)
{
printf("[%d]", arregloDeEnteros[i]);
}
}
Código en
Github
https://goo.gl/ClO8DX
33
33
Eliminación en un arreglo
34
34
5
11/3/20
Arreglos unidimensionales
arregloDeEnteros: 1 5 7 ……………… 10
35
35
Arreglos bidimensionales
36
36
6
11/3/20
Arreglos bidimensionales
Sea Matriz[n][m]
Columna 0 Columna m-1
Fila 0
Matriz [2][0]
37
Arreglos bidimensionales
#include <stdio.h>
#define cantFilas 10
#define cantColumnas 15
main()
{
/*Declaracion*/
int matrizDeEnteros[cantFilas][cantColumnas];
int i, j;
/*Llenado de la coleccion*/
for(i=0; i<cantFilas; i++)
{
for(j=0; j<cantColumnas; j++)
{
printf("Ingrese un valor para llenar la matriz:");
scanf("%d", &matrizDeEnteros[i][j]);
}
}
/*Despliegue de la coleccion*/
for(i=0; i<cantFilas; i++)
{
for(j=0; j<cantColumnas; j++)
{
printf("[%d]", matrizDeEnteros[i][j]);
} Código en
}
} Github
https://goo.gl/JBoF1B
38
38
7
11/3/20
Arreglos multidimensionales
39
39
Actividad personal
40
40
8
11/3/20
41
41
9
11/3/20
42
Arreglos compactos
43
43
1
11/3/20
44
44
arregloDeEnteros: 1 5 7 ……………… 10
Se compacta el arreglo
45
45
2
11/3/20
Lógica de control
46
46
pLibre
47
47
3
11/3/20
pLibre
#include <stdio.h>
#define tam 100
main()
{
int pLibre=0, i, arreglo[tam];
Código en
Github
https://goo.gl/CPNm6p
48
48
ultPosicion
49
49
4
11/3/20
ultPosicion
#include <stdio.h>
#define tam 100
main()
{
int ultValor=0, i, arregloDeValores[tam];
Código en
Github
https://goo.gl/oD6tTW
50
50
5
11/3/20
Punteros
INF2240 – Estructura de datos
Escuela de Ingeniería Informática
Pontificia Universidad Católica de Valparaíso
51
Punteros
— Un puntero es una variable que representa la posición (en vez del valor) de
otro dato, tal como una variable o un elemento de un arreglo.
— Los punteros son usados generalmente para traspasar información entre
una función y sus puntos de llamada.
— Proporcionan una forma de devolver varios valores desde una función a
través de los argumentos de la función.
— Permiten que referencias a otras funciones puedan ser especificadas como
argumentos de una función.
52
52
1
11/3/20
Punteros
53
53
Operadores
54
54
2
11/3/20
Ejemplos
55
Video de punteros
56
56
3
11/3/20
57
Definición de un struct
— Antes de declarar variables del nuevo tipo estructura es necesario definir los
campos (datos) que contendrá la estructura y,
— asignarle un nombre para identificarla como un nuevo tipo de dato.
— Para ocupar el nuevo tipo de dato definido es necesario declarar variables
de ese tipo.
58
58
1
11/3/20
Definición de un struct
59
59
— Acceso a campos
– Es importante destacar que los campos de un struct deben ser definidos y
pensados de forma funcional:
variableTipoStruct.campoDelStruct
— Acceso en colecciones
Nombrecolección[indice].campo
60
60
2
11/3/20
Punteros a struct
— Con ello, el paréntesis es necesario por la mayor prioridad del operador (.)
respecto a (*).
61
61
Uso de char*
62
62
3
11/3/20
Uso de char*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define cantidad 5
struct Persona
{
char *nombre;
char *carnetIdentidad;
int edad;
};
main()
{
à
Código en
Github
https://goo.gl/jIDE9n
63
63
Uso de char*
main()
{
int i, size;
char buffer[50];
scanf("%d", &personas[i].edad);
Código en
}
} Github
https://goo.gl/jIDE9n
64
64
4
11/3/20
Arreglo de struct
array[0] Array[49]
array:
……
65
65
Arreglo de struct
array[0] Array[49]
array:
……
66
66
5
11/3/20
Ejercicio
— Utilizando el struct antes definido, genere un programa que llene los datos y
luego ordene el arreglo de forma ascendente por el campo edad.
— Considere 3000 personas.
struct Persona
{
char *nombre;
char *carnetIdentidad;
int edad;
};
67
67
} } } }
68
6
11/3/20
69
Ejemplo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define cantidad 5
struct Persona
{
char *nombre;
char *carnetIdentidad;
int edad;
};
main()
{
à
Código en
Github
https://goo.gl/sFJd2Z
70
70
7
11/3/20
Ejemplo
main()
{
int i, size;
char buffer[50];
71
Video de arreglo de
punteros
72
72