2.3.2 Tipos de Datos Estructurados

Anuncio
2.3.2 Tipos de Datos
Estructurados
Arreglos, Registros, Strings y
Uniones
Tipo Arreglo
l
l
l
Es un tipo estructurado consistente en un conjunto
ordenado de elementos que se identifican por su
posición relativa mediante un índice.
Existe un tipo asociado a los elementos y al índice.
Índice se escribe entre:
l
l
l
Arreglos Multidimensionales
l
Pascal permite sólo dos dimensiones
C y C++
Verificación de rango del índice mejora fiabilidad
(Pascal y Java lo hacen).
Inicialización de Arreglos
l
ANSI C y C++
char *mensaje = “Hola mundo\n”;
char *dias[] = {“lu”, ”ma”, “mi”, “ju”, “vi”, “sa”, “do”};
TYPE
matriz = ARRAY [subindice, subindice] OF real;
l
paréntesis redondo (Basic) o
cuadrado (Pascal, C, C++ y Java).
l
Java
real matriz [DIM1][DIM2];
int[] edades = { 7, 12, 18, 21, 25 };
l
Operadores con Arreglo
l
l
l
Pascal y C y no tienen soporte especial (sólo
selector con subíndice [])
C++ permite definir una clase arreglo por el
usuario y operadores tales como subíndice,
asignación, inicialización, etc.
Java define los arreglos como tipos
especiales de objetos. Permite uso de
subíndice, cálculo del largo y otros métodos.
Pascal no lo permite
Operadores con Arreglo
l
l
l
C/C++ no tiene chequeo de rango para los
índices. Tampoco permite averiguar el largo
de un arreglo.
Pascal provee chequeo de rango
Java provee chequeo de rango y permite
conocer el largo del arreglo.
int[] arr = {1,2,3,4,6,7,2,3};
for(int i=0;i<arr.length ;i++)
{
...
}
1
Implementación de Arreglos
l
La memoria es un arreglo unidimensional de celdas:
l
l
l
Un arreglo es una abstracción del lenguaje
Un arreglo debe ser mapeado a la memoria
l
C++ provee mapas y multimapas a travé de
la STL (Standard Template Library)
l
l
Arreglo no ordenado de elementos que son
accedidos por una clave
Cada elementos corresponde a un par ordenado
(clave, dato)
PERL provee esta estructura con el nombre de
hash:
%dias = (
1 => “Enero”,
…
12 => “Diciembre”
);
print $ dias{7};
Puede influir en la forma más eficiente de
recorrido.
Arreglos Asociativos
l
l
Arreglos bidimensionales se almacenan
como fila de columnas, o viceversa
l
l
l
Ejemplo: dirección de lista[k]
dir(lista[0]) + (k)*tamaño
dir(lista[bajo]) + (k-bajo)*tamaño
l
Arreglos Asociativos
Mapas: una clave, un valor.
Multimapas: un clave, múltiples valores.
Java provee interfaces para diccionarios e
implementaciones de tablas hash.
Arreglos Asociativos
l
Hashing
l
l
l
Ubicación de un elemento dentro del arreglo por una
función matemática sobre la clave.
Los arreglos son casos especiales, donde la clave es el
índice y la función matemática es la identidad.
Permite que las claves sean estructuras más complejas.
clave
f(clave )
posición
Tipo Registro
l
Permite composición heterogénea de
elementos de datos
Cada elemento se identifica por un nombre
(campo o miembro)
l
l
l
Introducido por COBOL (data division)
En C equivale a struct
Concepto de clase en O-O soporta registros (e.g.
C++ y Java)
Ejemplo:
Registros en C y C++ (struct)
struct empleado_t {
struct {
char primer[10];
char paterno[10];
char materno[10];
} nombre;
int sueldo;
}
empleado_t
pelao, guaton;
guaton.sueldo = 550000;
strcpy( pelao.nombre.primer, “Juan”);
2
Ejemplo: Registros en Pascal
Cadena de Caracteres (String)
TYPE
empleado_t =
RECORD
nombre :
RECORD
primer: PACKED ARRAY [1.10] OF char;
paterno: PACKED ARRAY [1.10] OF char;
materno: PACKED ARRAY [1.10] OF char;
END {nombre};
sueldo : integer
END;
VAR
pelao, guaton : empleado_t;
l
l
l
l
l
l
l
l
l
Perl hace uso de expresiones regulares
l
l
l
Ejemplo:
/[A-Za-z][A-Za-z\d]+/ permite calzar un
identificador
/^(\s+)\ s+(s+)\ s+(\s+)$/ permite calzar tres
palabras
Algunos lenguajes lo proveen como tipo (Java y
Perl )
Otros sólo como arreglo de carácteres (C, C++ y
Pascal)
¿Puede el largo variar dinámicamente?
Ejemplo de String en C
Asignación
Comparación
Concatenación
Largo
Transformación (e.g. de string a entero)
Strings: Calce de Patrones
(Pattern matching)
l
l
Mejora la facilidad de escritura
¿Es una cadena un tipo primitivo?
l
BEGIN
…
pelao.sueldo := 550000;
Strings: Operaciones Básicas
Principalmente para la comunicación máquinausuario y para manipulación de textos
char str[20];
…
if (strcmp(str ,”Hola”){
…
else {
…
}
Diseño de String
l
Diseño de string considera:
l
l
l
l
Largo estático (Pascal y Java)
Largo dinámico limitado (e.g. C y C++)
Largo dinámico (Perl )
Último es el más flexible, pero es más
costoso de implementar y ejecutar.
3
Tipo Union
l
l
l
l
l
Permite almacenar diferentes tipos de datos en
diferentes tiempos en una misma variable.
Reserva espacio de memoria igual al mayor
miembro definido.
Todos los miembros comparten la memoria y
comienzan desde la misma dirección.
Su uso es en general poco seguro.
Java no provee este tipo de estructura
Ejemplo: C y C++
union direccion {
char dominio[20];
int IP[4];
};
IP
Dominio
4
Descargar