Vous êtes sur la page 1sur 13

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas

Departamento de Informtica

CLASE 2 Arreglos
Si tomamos la decisin de tratar cada tipo de problema con datos simples, pronto nos daramos cuenta del enorme desperdicio de tiempo, almacenamiento y velocidad. Es por eso que para algunas situaciones la mejor solucin son los datos estructurados.

Definicin
Conjunto finito, ordenado, de elementos homogneos. Los elementos de un arreglo pueden ser a su vez otro arreglo. Tambin se les llama tablas. Los arreglos pueden ser unidimensionales y multidimensionales.

Arreglo Unidimensional (vector)


Es un tipo de datos estructurado que est formado de una coleccin finita y ordenada de datos del mismo tipo (homogneos). Es la estructura natural para modelar listas de elementos iguales. El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un ndice para cada elemento del arreglo que nos da su posicin relativa. Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se debe proporcionar la direccin base del arreglo, la cola superior y la inferior. Representacin en memoria: Los arreglos se representan en memoria de la siguiente forma: X: array [15] of integer

Vec(1) Vec(2) Vec(3) Vec(4) Vec(5)

_________________________________________________________________
Estructura de Datos y Archivos Clase N 2 1

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

Subndices (ndices): Designan la posicin de un elemento dentro del arreglo. Para hacer referencia al elemento se menciona el nombre del vector y el ndice. La notacin A (L:U) indica que los ndices estn comprendidos entre L (lmite inferior del arreglo) y U (lmite superior del arreglo). Rango: Nmeros de elementos de un arreglo. Frmula para hallar el rango de una arreglo unidimensional, donde A es el nombre del arreglo: A (L:U) = U-L+1

Arreglos Multidimensionales:
Arreglos bidimensionales: Un arreglo de dos dimensiones es un arreglo donde cada elemento es, a su vez, otro arreglo. Subndices (ndices): se necesitan dos ndices, uno para designar la fila o rengln, otro para la columna. Se dice que un arreglo B(1:M,1:N), tiene M cantidad de filas y N cantidad de columnas. Tambin se dice que el arreglo B es de dimensin M*N. La notacin B (L1: U1, L2: U2), indica que las filas de B estn comprendidas entre L1 (lmite inferior) U1 (lmite superior), ambos inclusive, y las columnas entre L2 y U2. Rango: El nmero de elementos de B (L1: U1, L2: U2) = (U1- L1 + 1) * (U2 L2+1) Seccin trasversal: Se obtiene al mantener constante uno de los ndices mientras se hace variar el otro ndice. Se denota comnmente con un asterisco (*). La notacin B (*,4) indica que la columna 4 permanece inalterable. B (*,4)= B (1,4) B (2,4) B (3,4) B (4,4)..B (M, 4). Transpuesta: Se obtiene invirtiendo las posiciones del ndice. Si B es dimensin M*N, la transpuesta de B (B T), ser de dimensin M*N. Extensiones a ms dimensiones: Subndices: debe especificar un ndice para cada dimensin. Rango: Nmeros de elementos de un arreglo multidimensional. _________________________________________________________________
Estructura de Datos y Archivos Clase N 2 2

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

B (L1:U1, L2:U2, L3:U3,..Ln:Un)= (U1-L1+1)*(U2-L2+1)*(U3-L3+1)*..*(Un-Ln+1)

Formas de Almacenamiento
Los diferentes esquemas de representacin se evalan en base a las siguientes caractersticas: Simplicidad de acceso a los elementos Facilidad de recorrer a travs de varios caminos Eficiencia de almacenamiento Facilidad de crecer

Arreglos unidimensionales Cuando el Lmite inferior = uno Para calcular la direccin de inicio se debe conocer: La direccin de inicio del espacio reservado para almacenar el arreglo (localidad base) (B). El tamao de cada elemento en el arreglo (bytes) (S).

Localidad del elemento I= B + (I -1) * S Generalizacin del lmite inferior Para calcular la direccin del inicio se debe conocer, adems el valor del lmite (L), diferente de uno. Localidad del elemento I= B + (I -L) * S Arreglos multidimensionales Se debe linealizar un arreglo multidimensional, debido a que la memoria de la computadora es lineal.

_________________________________________________________________
Estructura de Datos y Archivos Clase N 2 3

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

Orden por rengln: Se almacena en orden consecutivo, cada una de las filas: la primera fila, en primer lugar, luego la segunda, hasta la ltima.
A(1,1) A(1,2) A(1,3) A(1,4) A(1,5) A(1,6) A(2,6) A(3,6) A(4,6)

A(2,1) A(2,2) A(3,1) A(3,2)

A(2,3) A(2,4) A(2,5) A(3,3) A(3,4) A(3,5)

A(4,1) A(4,2)

A(4,3) A(4,4) A(4,5)

Arreglo bidimensional de orden 4*6 Almacenamiento por rengln: 1ra. Fila


1, 1 1, 2 1, 3 1, 4 1, 5 1, 6 2, 1 2, 2

2da. Fila
2, 3 2, 4 2, 5 2, 6 3, 1 3, 2

3ra. Fila
3, 3 3, 4 3, 5 3, 6

Almacenamiento por columna: 1ra. Col.


1, 1 2, 1 3, 1 4, 1 1, 2

2da. Col.
2, 2 3, 2 4, 2 1, 3

3ra. Col
2, 3 3, 3 4, 3

4ta. Col.
1, 4 2, 4 3, 4 4, 4

5ta. Col
1, 5 2, 5

Arreglos Triangulares
Es un arreglo bidimensional cuadrado donde todos los elementos por encima (inferior) y por debajo (superior) de la diagonal principal son cero.

Arreglo Triangular Superior Diagonal principal: {1, -3, 2}

Arreglo Triangular Inferior Diagonal principal: {2, 2,6}

_________________________________________________________________
Estructura de Datos y Archivos Clase N 2 4

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

El nmero mximo de elementos diferentes de ceros es N*(N+1)/2, donde N es la dimensin del arreglo. Arreglos estrictamente triangulares: Arreglos triangulares donde los elementos de la diagonal principal tambin son ceros.

_________________________________________________________________
Estructura de Datos y Archivos Clase N 2 5

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

Linealizacin: Como no es deseable almacenar gran cantidad de ceros, una alternativa es almacenar los elementos del tringulo inferior o superior en un arreglo unidimensional. 3 0 0 0 0 0 4 1 0 0 0 0 6 4 2 0 0 0 7 0 4 0 0 0 3 1 9 2 5 0 9 5 1 4 2 4

Arreglo triangular superior Inicial Vector Valor 1 1 1 3 1 2 2 4 1 3 3 6 1 4 4 7 1 5 5 3 1 6 6 9 2 2 7 1 2 3 8 4 2 4 9 0 2 2 5 6 1 5 3 3 2 3 4 4 3 5 9 3 6 1 4 4 0 4 5 2 4 6 N 4

Espacio compartido: Otra alternativa para ahorrar espacio, es almacenar dos arreglos de la misma dimensin, uno inferior y otro superior, pueden compartir el espacio reservado para uno de ellos. Arreglo triangular superior 3 0 0 0 0 0 4 1 0 0 0 0 6 4 2 0 0 0 7 0 4 0 0 0 3 1 9 2 5 0 9 5 1 4 2 4

_________________________________________________________________
Estructura de Datos y Archivos Clase N 2 6

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

Arreglo triangular inferior 0 0 1 6 3 5 0 0 5 4 7 7 0 0 0 2 3 1 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0

Almacenamiento en espacio compartido 3 0 1 6 3 5 4 1 5 4 7 7 6 4 2 2 3 1 7 0 4 0 0 0 3 1 9 2 5 5 9 5 1 4 2 4

Cambio de acomodo: Un problema surge cuando el arreglo deja de ser triangular. Una alternativa es no permitir la actualizacin. Otro mtodo es reconocer el cambio en las caractersticas del arreglo y transferirlo a su propio espacio.

Arreglos dispersos
Son arreglos en los que existen gran cantidad de ceros alrededor del 90%. Linealizacin: Pueden ser almacenados en un vector a travs de las tcnicas de orden por rengln y por columna.

_________________________________________________________________
Estructura de Datos y Archivos Clase N 2 7

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

Representacin vectorial: Almacenar en un vector los elementos diferentes de cero. 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 5 0 0 0 1 4 0 0 Arreglo disperso

Representacin vectorial del arreglo disperso Vector V(1) V(2) V(3) V(4) V(5) V(6) Rengln 1 2 3 4 5 5 Columna 4 2 6 6 2 5 Valor 7 1 1 4 1 5

Representacin de listas ligadas: Cada nodo contiene una indicacin del rengln y columna en el cual aparece la entrada diferente de cero, el valor de la entrada, y dos apuntadores. Un apuntador es hacia el siguiente nodo en el mismo rengln y el otro es para el siguiente nodo en la misma columna. Por ejemplo: El siguiente arreglo de 5*4 1 0 2 0 0 0 -3 0 0 0 0 0 1 14 0 0 0 0 0 0

_________________________________________________________________
Estructura de Datos y Archivos Clase N 2 8

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

Se puede representar de la siguiente manera: cada nodo cabecera participa en dos listas ligadas: una para su rengln y otra para su columna. En este ejemplo hay 4 columnas y 5 filas.
C1 Nodos Cabecera F 1 C 1 V 1 F 2 F 3 C 1 V 2 C 2 V -3 F 3 C 3 V 1 C2 C3 C4

F1

F2

F3

F4

14

F5

ARRAYS EN JAVA En Java los arrays son un objeto. Como tales se crean mediante el comando new (se ver su uso en el tema 5). La sintaxis en la definicin de un array es la siguiente: Tipo_datos[] nombre_array = new Tipo_datos[tamao_array]; Tipo_datos es el tipo de los datos que se almacenarn en el array (int, char, String... o cualquier objeto). Tamao_array es tamao que le queremos dar a este array. Veamos un ejemplo: int[] edades = new int[10]; En este ejemplo hemos definido un array llamado edades, en el que podremos almacenar 10 datos tipo entero. El primer elemento de un array se sita en la posicin 0, exactamente igual que en C. Si quisisemos realizar un bucle que recorriese los elementos de este array escribiramos un cdigo del tipo:

_________________________________________________________________
Estructura de Datos y Archivos Clase N 2 9

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

public class Ejemplo5b{ public static void main(String[] args) { int[] edades = new int[10]; for(int i= 0; i< 10; i++){ edades[i] = i; System.out.println(Elemento + i + edades[i]); } int sum = 0; for(int i= 0; i< 10; i++){ sum = sum + edades[i]; } System.out.println(Suma + sum); } } TIPOS ENUMERADOS Esta caracterstica del lenguaje slo est disponible a partir de las versiones superiores de java. Los tipos de datos enumerados son un tipo de dato definido por el programador (no como ocurre con los tipos de datos primitivos). En su definicin el programador debe indicar un conjunto de valores finitos sobre los cuales las variables de tipo enumeracin debern tomar valores. La principal funcionalidad de los tipos de datos enumerados es incrementar la legibilidad del programa. La mejor forma de comprender lo qu son es vindolo; para definir un tipo de dato enumerado se emplea la sintaxis: modificadores enum NombreTipoEnumerado{ VALOR1,VALOR2,.. } Los posibles valores de "modificadores" sern vistos en el tema 5. El caso ms habitual es que modificadores tome el valor "public". El nombre puede ser cualquier nombre vlido dentro de Java. Entre las llaves se ponen los posibles valores que podrn tomar las variables de tipo enumeracin, valores que habitualmente se escriben en letras maysculas. Un ejemplo de enumeracin podra ser: public enum Semana {LUNES, MARTES, MIRCOLES, JUEVES, VIERNES, SBADO, DOMINGO} _________________________________________________________________
Estructura de Datos y Archivos Clase N 2 10

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

Las definiciones de los tipos enumerados deben realizarse fuera del mtodo main y, en general, fuera de cualquier mtodo; es decir, deben realizarse directamente dentro del cuerpo de la clase. En el tema 5 se explicar detalladamente qu es una clase y qu es un mtodo. Para definir una variable de la anterior enumeracin se empleara la siguiente sintaxis: Semana variable; y para darle un valor a las variables de tipo enumeracin stas deben asignarse a uno de los valores creados en su definicin. El nombre del valor debe ir precedido del nombre de la propia enumeracin: variable = Semana.DOMINGO; Veamos un ejemplo de programa que emplea enumeraciones: public class Ejemplo5c { //definimos un tipo enumerado //los tipos enumerados deben definirse siempre fuera //del main y, ms en general, fuera de cualquier mtodo public enum Semana {LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO}; public static void main(String[] args) { //definimos una variable que pertenece al tipo enumerado Semana //y le damos el valor que representa el da martes Semana hoy = Semana.MARTES; //si el da se cayese en el fin de semana no hay que trabajar //obsrvese como gracias a la numeracin del programa es fcil de entender if(hoy == Semana.DOMINGO || hoy == Semana.SABADO){ System.out.println("Hoy toca descansar"); } else { System.out.println("Hoy toca trabajar"); } _________________________________________________________________
Estructura de Datos y Archivos Clase N 2 11

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

} }

_________________________________________________________________
Estructura de Datos y Archivos Clase N 2 12

UNIVERSIDAD AUTNOMA DE ASUNCIN Facultad de Ciencias y Tecnologas


Departamento de Informtica

Bibliografa
LOOMIS, Mary. Estructura de Datos y Organizacin de Archivos, 2da. Edicin. 1991. Mxico. Editorial Prentice-Hall Hispanoamericana S.A. Tutorial de javaHispano http://javahispano.org

_________________________________________________________________
Estructura de Datos y Archivos Clase N 2 13

Vous aimerez peut-être aussi