Listas lineales

35
Listas lineales

Transcript of Listas lineales

Listas lineales

Tipo abstracto de datos lista lineal

Un tipo abstracto de datos lineal es un tipo abstracto de datos que se

puede representar como una secuencia de elementos

{𝑎1, … 𝑎𝑖, …, 𝑎𝑗, …, 𝑎𝑛 }

donde un conjunto finito (y corto), de elementos son elementos

destacados y la única relación entre dos elementos 𝑎𝑖 y 𝑎𝑗 , si la

hubiere, es la de ser el antecesor de o el sucesor de.

Tipos abstracto de datos lineales

• Secuencias (Arreglos)

• Colas

• Pilas

• Vectores

• Matrices

• Listas ligadas

Arreglos

• Un array o arreglo (lista o tabla) es una secuencia de datos del

mismo tipo.

• Los datos se llaman elementos del array y se numeran

consecutivamente 0, 1, 2, 3 ...

• El tipo de elementos almacenados en el array puede ser cualquier

dato simple de Java o de un tipo previamente declarado como una

clase.

• Normalmente, el array se utiliza para almacenar tipos tales como

char, int o float.

Arreglos

• Un array puede contener, por ejemplo, la edad de los alumnos de

una clase o las temperaturas de cada día de un mes en una ciudad

determinada.

• Cada ítem del array se denomina elemento.

• Los elementos de un array se numeran, como ya se ha comentado,

consecutivamente 0, 1, 2, 3,...

• Estos números se denominan valores índice o subíndice del array.

Arreglos

• Si el nombre del array es a, entonces a[0] es el nombre del

elemento que está en la posición 0, a[1] es el nombre del

elemento que está en la posición 1, etc.

• En general, el elemento i-ésimo está en la posición i-1, de

modo que si el array tiene n elementos, sus nombres son a[0],

a[1],...,a[n-1]

Arreglos

• Gráficamente, se representa así el array a con

seis elementos.

Declaración de un array

• Un array se declara de modo similar a otros tipos de

datos, excepto que se debe indicar al compilador que

es un array, lo que se hace con los corchetes.

– int [] v;

– float w[];

Declaración de un array

• Los corchetes se pueden colocar de dos formas:

– A continuación del tipo de datos

– A continuación del nombre del array

• Así, la sintaxis de declaración de variables array en Java

es:

– tipo [] identificador;

– tipo identificador[];

Declaración de un array

• El primer formato indica que todos los

identificadores son arrays del tipo.

• En el segundo formato, array es sólo el

identificador al que le siguen los [].

Distintas declaraciones de arrays

1. char cad[], p;

cad es un array de tipo char, p es una variable de tipo char

2. int [] v, w;

tanto v como w son declarados arrays unidimensionales de tipo

int.

3. double [] m, t[], x;

m y x son array de tipo double; t es un array de array con

elementos de tipo double.

Creación de un array

• Java considera que un array es una referencia a un

objeto.

• En consecuencia, para que realmente se cree

(instancie) el array, usa el operador new junto al tipo

de los elementos del array y su número.

Creación de un array

• Por ejemplo, para crear un array que guarde las notas

de la asignatura de música en un aula de 26 alumnos:

– float [] notas;

– notas = new float[26];

• Se puede escribir en una misma sentencia:

– float [] notas = new float[26];

Arrays de diferentes tipos de datos

1. int a[] = new int [10];

a es un array de 10 elementos de tipo int

2. final int N = 20;

float [] vector;

vector = new float[N];

Se ha creado un array de N elementos de tipo float.

• Para acceder al tercer elemento y leer un valor de entrada:

– vector[2] = (Float.valueOf(entrada.readLine())).floatValue();

Acceso a elementos de diferentes arrays

1. int []mes = new int[12];

2. float salarios[];

3. salarios = new float[25];

mes[4] = 5;

4. salario[mes[4]*3];

3. final int MX = 20;

Racional []ra = new Racional[MX];

ra[MX - 4];

1. mes contiene 12 elementos: el primero, mes[0], y el último, mes[11].

2. Declara un array de tipo float.

3. Crea el array de 25 elementos.

4. Accede al elemento salario[15].

5. Declara un array de 20 objetos Racional

6. Accede al elemento ra[16]

Tamaño de los arrays

• Java considera cada array como un objeto que, además de

tener capacidad para almacenar elementos, dispone del

atributo length con el número de elementos.

double [] v = new double[15];

System.out.print(v.length); //escribe 15, número de elementos de v.

Uso del atributo length

• Haciendo uso del atributo length se calcula la suma de los

elementos de un array de tipo double.

double suma (double [] w)

{

double s = 0.0;

for (int i = 0; i < w.length; i++)

s += w[i];

return s;

}

Inicialización de un array

• Los elementos del array se pueden inicializar con

valores constantes en una sentencia que, además,

determina su tamaño.

• Estas constantes se separan por comas y se encierran

entre llaves, como en los siguientes ejemplos.

Inicialización de un array

int numeros[] = {10, 20, 30, 40, 50, 60}; /* Define un array de 6 elementos

y se inicializan a las constantes */

int n[] = {3, 4, 5} // Define un array de 3 elementos

char c[] = {'L','u','i','s'}; // Define un array de 4 elementos

Ejercicio

• Escribir un programa en Java o C++ que lea un

número NUM de enteros en un array, multiplique

los elementos del array por su valor ordinal y

visualice los valores del array y el producto.

Copia de arrays

• En Java, los nombres de arrays son referencias

a un bloque de memoria distribuida según el

número de elementos; por ello, si se hace una

asignación entre dos variables array, éstas se

refieren al mismo array.

Ejercicio

• Escribir un programa en Java o C++ que :

– Defina dos arrays de tipo double, v y w con 15 y 20 elementos

respectivamente.

– En el array v se guardan los valores de la función 𝑒2𝑥−1para x ≥ 1.0;

– El valor de x se incrementa en 0.2 para cada elemento del array v

– En el array w se inicializa cada elemento al ordinal del elemento.

– A continuación se copian los 10 últimos elementos de v a partir del elemento

11 de w.

– Por último, se imprimen los elementos de ambos arrays.

Arrays multidimencionales

• Los arrays vistos anteriormente se conocen como arrays unidimensionales

(una sola dimensión) y se caracterizan por tener un solo subíndice.

• Estos arrays se conocen también por el término listas.

• Los arrays multidimensionales son aquellos que tienen más de una

dimensión y, en consecuencia, más de un índice.

• Los más usuales son los de dos dimensiones, conocidos también por el

nombre de tablas o matrices.

• Sin embargo, es posible crear arrays de tantas dimensiones como

requieran sus aplicaciones, ya sean tres, cuatro o más.

Array de dos dimensiones

• Un array de dos dimensiones (m × n) equivale a una

tabla con múltiples filas y múltiples columnas.

Array de dos dimensiones

• Un array de dos dimensiones es en realidad

un array de arrays, es decir, un array

unidimensional, y cada elemento no es un

valor entero, de coma flotante o carácter, sino

que cada elemento es otro array.

Declaración del array bidimensional

• La sintaxis para la declaración de un array de dos dimensiones

es: <tipo de datoElemento> <nombre array> [][];

o bien

<tipo de datoElemento> [][]<nombre array>;

Ejemplos de declaración de matrices :

char pantalla[][];

int puestos[][];

double [][]matriz;

Declaración del array bidimensional

• Para reservar memoria y especificar el número de filas y de

columnas se utiliza el operador new.

• Así, a partir de las declaraciones anteriores

pantalla = new char[80][24]; // matriz con 80 filas y 24 columnas

puestos = new int[10][5]; // matriz de 10 filas por 5 columnas

final int N = 4;

matriz = new double[N][N]; // matriz cuadrada de N*N elementos

Inicialización de arrays multidimensionales

• La inicialización se hace encerrando entre llaves la lista de constantes,

separadas por comas, que forma cada fila, como en los ejemplos

siguientes:

1. int tabla1[][] = { {51, 52, 53},{54, 55, 56} };

Define una matriz de 2 filas por 3 columnas cada una.

O bien con este formato más amigable:

int tabla1[][] = { {51, 52, 53}, {54, 55, 56} };

2. int tabla2[][] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}

};

Inicialización de arrays multidimensionales

Acceso a los elementos de arrays bidimensionales

• El acceso a los elementos de arrays

bidimensionales sigue el mismo formato que

el acceso a los elementos de un array

unidimensional.

• En este caso, con las matrices deben

especificarse los índices de la fila y la columna.

Acceso a los elementos de arrays bidimensionales

• Con dos bucles anidados se accede a todos los

elementos de una matriz. Su sintaxis es:

int fila, col;

for (fila = 0; fila < NumFilas; ++fila)

for (col = 0; col < NumCol; ++col)

Procesar elemento Matriz[fila][col];

Ejercicio

• Codificar un programa en Java o C++ para dar

entrada y posterior visualización de un array

de dos dimensiones.

Suma de Matrices

• Si las matrices A=(aij) y B=(bij) tienen la misma

dimensión, la matriz suma es:

– A+B=(aij+bij).

• La matriz suma se obtiene sumando los

elementos de las dos matrices que ocupan la

misma posición.

Suma de Matrices

Ejercicio

• Escribir un programa en Java o C++ que sume o reste dos

matrices.

– El programa debe preguntar por el tamaño de las matrices m x n

– Después deberá leer los datos de la matriz A y posteriormente los

datos de la matriz B

– Debe presentar dos opciones a elegir suma y/o resta

– Después de finalizar el cálculo imprimir las tres matrices

• A, B, C=A+B