Modulo1. Introducción Estructuras de Datos PDF
Modulo1. Introducción Estructuras de Datos PDF
Modulo1. Introducción Estructuras de Datos PDF
ESTRUCTURA DE DATOS
ESTRUCTURA DE DATOS
Programas de Educación a Distancia
Universidad de Cartagena
2017; [N°] Pág.; 21.5 X 27.9 cm
ESTRUCTURAS DE DATOS
No está permitida la reproducción total o parcial de este libro o por cualquier medio o método de éste sin previa autorización de la
Universidad de Cartagena, del Autor(a) y la Empresa Editorial. Ni su tratamiento informático, ni la transmisión de ninguna forma o
por cualquier medio, ya sean electrónicos, mecánicos, por fotocopia, por registro u otros métodos, sin el permiso previo y por escrito
de los titulares del Copyright.
CONTENIDO
Pág.
UNIDAD I.
Resolución de Ejercicios
Protocolos
Trabajo de Investigación
Proyecto de clase
1
Fuente: Autoría Propia. Ref. Web: https://www.mindmeister.com/es/580337973/m-dulo-estructura-de-datos
AUTOEVALUCIÓN
Las palabras:
Intencional de datos quiere decir que vamos a tener una intensión con los datos,
es decir, no vamos a mezclar datos de diferentes tipos, sino, mantenerlos
organizados para almacenarlos y hacer una excelente búsqueda luego de esta
información.
Una estructura de datos es una agrupación de éstos que se trata como una unidad en
su conjunto.
Las estructuras de datos pueden ser homogéneas (todos los datos son del mismo tipo)
o heterogéneas (constituidas por datos de tipos diferentes).
Las estructuras de datos homogéneas más representativas son los vectores, las tablas
y, en general, las matrices n-dimensionales. El ejemplo más representativo de
estructuras de datos heterogéneas son los registros
Los tipos de datos que utilizaremos en este módulo y usando como lenguaje de
programación, java son:
2
Fuente: Autoría Propia. Ref. Web: https://www.mindmeister.com/629689949/estructura-de-datos-tipos-de-datos-clasificaci-n
Se dice que una estructura de datos es dinámica cuando inicialmente (en el momento
de la compilación) no tiene espacio asignado para almacenar información. Durante la
ejecución del programa el sistema (en tiempo de ejecución, run time) asigna y
libera espacio en memoria, en función de las necesidades.
3
Fuente: Ref. Web: http://www.angelfire.com/my/jimena/estructuras/materia1.html
4
Este concepto toma su suporte físico en el mecanismo de direccionamiento indirecto tal como se maneja en los lenguajes de bajo
nivel.
se declara una variable (puntVector) de tal forma que, al realizar la operación new se
reserve el espacio necesario para almacenar un vector de 100 caracteres.
Aunque, como se ha indicado, una variable de tipo puntero apunta a una zona de
memoria (nodo) existe una situación excepcional consistente en no apuntar a ninguno.
En Java se utiliza para esto la constante null.
Sobre las variables referencia, se realizan las operaciones propias del tipo de datos a
que pertenezcan.
Lineales. Cada estructura se relaciona únicamente con una sola estructura. Por
ejemplo, la lista enlazada mostrada en la Ilustración 5.
5
Fuente: Ref. Web: http://www.angelfire.com/my/jimena/estructuras/materia1.html
6
Fuente: Ref. Web: http://www.angelfire.com/my/jimena/estructuras/materia1.html
7
Fuente: Ref. Web: http://www.angelfire.com/my/jimena/estructuras/materia1.html
41
Este tipo de operaciones deberá hacerse con especial cuidado pues, si no se han tomado previamente las
precauciones oportunas, podría perderse la información almacenada en el nodo inicialmente apuntado por
<puntero1> (se perderá si no tenemos otra referencia a esa información)
1.5.1. Objetivos
1.5.2. Introducción
Sabemos que los datos de un programa se almacenan en las variables y por lo general
toma los espacios de memoria al azar pero en el caso en que necesitemos los datos,
estos deben ser del mismo tipo llamados elementos, y pueden ser datos simples de
java, o de una clase previamente declarada como tal.
Un Arreglo tiene la misma definición de un Arreglo de datos Primitivos, estos difieren en
la instancia que poseen, más claramente, estos se crean en base a una clase ya
existente y definida con sus atributos y métodos correspondientes, recordando: Una
clase es la definición de un objeto, ya que esta posee los atributos (características) y
funciones (métodos) que describen un objeto. La definición de un Arreglo de Objetos es
la misma que un Arreglo de datos Primitivos, su sintaxis es de la siguiente forma:
Los arreglos se crean con el operador new seguido del tipo y número de elementos y se
puede acceder al número de elementos de un arreglo con la variable miembro implícita
length (por ejemplo, v.length).
Se accede a los elementos de un arreglo con los corchetes [] y un índice que varía de =
a Length-1.
Los elementos de un arreglo se inicializan al valor por defecto del tipo correspondiente
(cero para valores numéricos, la cadena vacía para Strings, false para boolean, null
para referencia.
Un Arreglo por lo general, forma parte de los valores que hacen referencia
implícitamente con la ayuda de los valores de índice. Es por ello que con el fin de
acceder a los valores almacenados en un Array; se están tomando la ayuda de
índices. Supongamos que tenemos un Array que contiene números enteros "n",
entonces vamos a tener su primer elemento está indexado con el valor "0" y el último
número entero será referenciado por "n-1" valor indexado.
Ahora supongamos que un Array que se compone de 12 elementos con cada elemento
es la celebración de un valor distinto. Tendremos el primer elemento que hace
referencia por un [0], es decir, el primer valor del índice. Hemos llenado los 12 valores
distintos en el Array de cada referencia como:
a[0]=1
a[1]=2
...
a[n-1]=n
...
a[11]=12
"Finito”, porque se requiere definir el tamaño del array (definir el tamaño antes de
ser utilizado).
Ej. : El array Notas que almacena las notas de los 25 alumnos de una clase es de
tamaño 25.
"Homogéneos”, porque todos los elementos del array son del mismo tipo.
Ejemplo:
Para declarar un arreglo tiene que indicar su tipo, un nombre único y la cantidad de
elementos que va a contener.
Un array (arreglo) en
Java es una estructura
de datos que nos
permite almacenar un
conjunto de datos de
un mismo tipo. El
tamaño de los arrays
se declara en un
primer momento y no
puede cambiar luego
durante la ejecución
del programa, como sí
puede hacerse en otros
lenguajes. Veremos
ahora cómo declarar
arrays estáticos de una
dimensión.
8
Fuente: Autoría Propia.
En las estructuras de datos homogéneas todos los datos son del mismo tipo. Como
ejemplo veremos los vectores, las tablas y, en general, las matrices n-dimensionales.
Un array (arreglo) es una estructura de datos que contiene una colección de datos
del mismo tipo, estas son usadas como contenedores que almacenan uno o más datos
relacionados, en lugar de declarar cada dato de manera independiente.
Por medio de los arreglos veremos cómo crear un elemento que nos permite definir una
“variable” que contenga diferentes datos del mismo tipo asociados al mismo
identificador.
Para poder trabajar con arreglos, se debe crear el arreglo definiendo cual es el tipo de
datos que va a contener y cuál es el tamaño del mismo (cantidad de datos que puede
almacenar), de ese modo si definimos que el arreglo va a ser de tipo byte, solo podrá
almacenar datos de tipo byte, no se puede mesclar en dicho arreglo datos int, short o
long por ejemplo.
Declaración de Arreglos
Se declara de modo similar a otros tipos de datos, excepto que se debe indicar al
compilador que es un arreglo y esto se hace con corchetes.
Donde tipo_dato define el tipo de dato de cada uno de los valores que puede contener
el arreglo.
El tipo de variable puede ser cualquiera de los admitidos por Java y que mostraremos a
continuación. Ejemplos de otras formas de declaración e inicialización con valores por
defecto de arrays usando todos los tipos de variables Java, serían:
Ejemplo:
Cuando creamos un array de nombre “a” y de dimensión “n” (int[ ] a = new int[n])
estamos creando n variables que son a[0], a[1], a[2], ..., a[n-1].
Los arrays se numeran desde el elemento cero, que sería el primer elemento, hasta el
n-1 que sería el último elemento. Es decir, si tenemos un array de 5 elementos, el
primer elemento sería el cero y el último elemento sería el 4. Esto conviene tenerlo en
cuenta porque puede dar lugar a alguna confusión. Disponer de un valor con índice cero
puede ser de utilidad en situaciones como considerar cada variable asociada a una hora
del día, empezando a contar desde la hora cero hasta la 23 (total de 24 horas), cosa
que es habitual en algunos países. En lugar de 1, 2, 3,..., 24 estaríamos usando 0, 1, 2,
..., 23.
arrayCaracteres[numero_elemento];
// Lectura de su valor.
char x = arrayCaracteres[2];
El objeto array, aunque podríamos decir que no existe como tal, posee una variable, la
cual podremos utilizar para facilitar su manejo.
Construcción de Arreglos
Ejemplo Forma 1:
String arregloA[];//Declaración del arreglo
arregloA=new String[4];//Creación o construcción del arreglo
o Forma 2: Esta forma se usa cuando sabemos con exactitud cuáles son los
valores que va a contener el arreglo, aquí el proceso de construcción e inicialización se
hace directo y se realiza de la siguiente manera:
Ejemplo Forma 2:
String arregloA[];//Declaración del arreglo
//Declaración, Inicialización y Creación del arreglo
String nombres[]={"Carlos","Julian","Cristian","Miguel"};
Inicializar Arreglos
rectangulos[0]=new Rectangulo(10, 20, 30, 40);
x= new int [100];
Esta variable nos devuelve el número de elementos que posee el array. Hay que tener
en cuenta que es una variable de solo lectura, es por ello que no podremos realizar una
asignación a dicha variable.
Por ejemplo esto nos serviría a la hora de mostrar el contenido de los elementos de un
array:
char array[];
array = new char[10];
Ejemplo 1:
Run:
El valor más pequeño es: 1
Run:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Ejemplo 3:
Run:
26
73
48
26 73 48 52 76 72 37 67 62 73
26 73 48 52 76 72 37 67 62 73
Ejemplo 4:
Run:
Apuestas realizadas: 1085088
Tarea: modificar los programas a excepción del número dos, de tal manera que los
vectores se han de 10 elementos y se introduzcan por teclado los valores.
Muchas veces nos vamos a encontrar ante la disyuntiva de tener que copiar los
elementos de un array en otros. Normalmente será para manipular el contenido del
mismo guardando en uno de los arrays los datos originales.
En este sentido nada que objetar, ya que es muy buena práctica de programación. Pero
todo buen programador tiene que tener en mente el concepto de "reutilización". No
"reutilización" cómo copia (o fusilamiento -argot de muchos programadores-) del código.
Sino "reutilización" pensando en que alguien ya puede haberse encontrado el problema
y haberle dado ya una solución.
Para poder reutilizar tenemos que ser conscientes de lo que el entorno en el que
estamos nos ofrece. Y en el caso de Java, es la librería del sistema la que nos ofrece
una función para la copia de arrays. Como vemos en el siguiente código:
System.arrayCopy(aOrigen,inicioArrayOrigen, aDestino,
inicioArrayDestino,numeroElementosACopiar);
} //Cierre de la clase
java.util
Class Arrays
java.lang.object
|------ java.util.Arrays
Esta clase contiene varios métodos para manipular arrays (por ejemplo
para ordenar un array o buscar un valor u objeto dentro de él) y para
comparar arrays.
import java.util.Arrays;
public class TestCompararArrays {
public static void main (String [ ] Args) {
int [ ] miArray1 = {2, -4, 3, -7};
for (int i=0; i<miArray1.length; i++) {
System.out.print ("miArray1[" + i +"]= " + miArray1[i]+"; ");}
System.out.println ("");
int [ ] otroArray = {2, -4, 3, -7};
for (int i=0; i<otroArray.length; i++) {
System.out.print ("otroArray[" + i +"]= " + otroArray[i]+"; ");}
System.out.println ("¿Son el mismo objeto? ... " + (miArray1==otroArray) );
System.out.println ("¿Tienen el mismo contenido (relación de igualdad)? ... " +
Arrays.equals(miArray1, otroArray) );
otroArray = miArray1; //otroArray pasa a ser el mismo objeto que miArray1
for (int i=0; i<otroArray.length; i++) { System.out.print ("otroArray[" + i +"]= " +
otroArray[i]+"; "); }
System.out.println ("¿Son el mismo objeto? ... " + (miArray1==otroArray) );
System.out.println ("¿Tienen el mismo contenido (relación de igualdad)? ... " +
Arrays.equals(miArray1, otroArray) );
} //Cierre del main
} //Cierre de la clase
import java.util.Arrays;
//Test copia arrays con igualdad sin identidad aprenderaprogramar.com
public class TestCopiaConIgualdadSinIdentidad {
public static void main (String [ ] Args) {
int [ ] miArray1 = {2, -4, 3, -7};
for (int i=0; i<miArray1.length; i++) {
System.out.print ("miArray1[" + i +"]= " + miArray1[i]+"; ");}
System.out.println();
int [ ] otroArray = {1, 2, 4, 8};
for (int i=0; i<otroArray.length; i++) {
System.out.print ("otroArray[" + i +"]= " + otroArray[i]+"; ");}
System.out.println ("¿Son el mismo objeto? ... " + (miArray1==otroArray)
);
System.out.println ("¿Tienen el mismo contenido (relación de igualdad)? ...
" + Arrays.equals(miArray1, otroArray) );
//Realizamos una asignación elemento a elemento
for (int i=0; i < otroArray.length; i++) {
otroArray[i] = miArray1[i];}
for (int i=0; i < otroArray.length; i++) {
Ejemplo 4. Copiar contenidos entre arrays sin establecer relación de identidad (Usando
el método copyOf de la clase Arrays, aplicable a tipos primitivos y a objetos).
Copia el array especificado, truncando o rellenando con ceros (si fuera necesario) de
manera que la copia tenga el tamaño especificado.
import java.util.Arrays;
//Test uso de copyOf método clase Arrays aprenderaprogramar.com
public class TestUso_copyOf_1 {
public static void main (String [ ] Args) {
int [ ] miArray1 = { 2, -4, 3, -7 };
for (int i=0; i<miArray1.length; i++) {
System.out.print ("miArray1[" + i +"]= " + miArray1[i]+"; ");
}
System.out.println ("");
int [ ] otroArray = { 1, 2, 4, 8 };
for (int i=0; i<otroArray.length; i++) {
System.out.print ("otroArray[" + i +"]= " + otroArray[i]+"; ");
}
System.out.println ("¿Son el mismo objeto? ... " + (miArray1==otroArray) );
System.out.println ("¿Tienen el mismo contenido (relación de igualdad)? ... " +
Arrays.equals(miArray1, otroArray) );
Hemos comprobado que el método copyOf de la clase Arrays realiza una copia
elemento a elemento entre los contenidos de dos arrays pero no hace que los
punteros apunten al mismo objeto. Prueba a variar la longitud que se le pasa como
parámetro al método copyOf, por ejemplo:
Comprueba que los resultados son el alargamiento del array y su relleno con ceros, o el
acortamiento con pérdida de los datos (truncamiento) que no caben debido al recorte de
la longitud. En el caso de alargamiento o expansión del array cuando se trata de un
array que no sea de enteros, si son tipos numéricos se rellenan los excedentes con
ceros, si son booleanos se rellenan los excedentes con false, si son char se rellenan de
caracteres vacío, y si son objeto se rellenan los excedentes con null.
1.6.4. Rellenar un array con un valor u objeto. Método fill de la clase arrays
La clase Arrays tiene un método, denominado fill, sobrecargado, que permite rellenar un
array con un determinado valor u objeto. En el caso de arrays de enteros la signatura
es:
static void fill (int[ ] a, int val)
Arrays.fill (permitido, true); Como rellenamos con un true, resultado será un array de
booleanos. De otra manera, no habría coincidencia de tipos. Ejemplo de código:
import java.util.Arrays;
public class TestMetodoFillArrays {
public static void main (String [ ] Args) { //main cuerpo del programa ejemplo
aprenderaprogramar.com
int [ ] miArray = new int[10];
Arrays.fill(miArray, 33);
for (int tmp: miArray) { System.out.print (tmp + ","); } //Recorrido del array con un
for each
} } //Cierre del main y de la clase
En caso de que el array tenga contenidos previos al aplicarle el fill, todos sus elementos
quedarán reemplazados por el elemento de relleno. No obstante, hay otro método que
permite especificar los índices de relleno de modo que se pueda preservar parte del
contenido previo del array:
static void fill (int[ ] a, int fromIndex, int toIndex, int val)
Escribe un fragmento de código utilizando esta signatura del método fill y comprueba
sus resultados.
EJERCICIO
Crea un programa Java donde declares un array de enteros tipo int miArray1 cuyo
contenido inicial sea {2, -4, 3, -7}. Muestra su contenido por pantalla. Copia el contenido
de este array a un ArrayList denominado lista1 y muestra su contenido por pantalla.
¿Qué tipo de datos almacena el array? ¿Qué tipo de datos almacena el ArrayList?
double[] notas = {2.3, 8.5, 3.2, 9.5, 4, 5.5, 7.0}; //array de 7 elementos
for (int i = 0; i < 7; i++) {
Por ejemplo:
double[] notas = {2.3, 8.5, 3.2, 9.5, 4, 5.5, 7.0}; //array de 7 elementos
for (int i = 0; i < notas.length; i++) {
System.out.print(notas[i] + " "); //se muestra cada elemento del array
}
Programa que lee por teclado la nota de los alumnos de una clase y calcula la
nota media del grupo. También muestra los alumnos con notas superiores a la
media. El número de alumnos se lee por teclado.
Este programa crea un array de elementos de tipo double que contendrá las notas
de los alumnos. El tamaño del array será el número de alumnos de la clase.
1.6.6. Recorrer un Array en java con for-each. Bucle for para colecciones
A partir de java 5 se incorpora una instrucción for mejorada para recorrer arrays y
contenedores en general.
Mediante este bucle solo podemos acceder a los elementos del array. No podemos
hacer modificaciones en su contenido.
import java.util.*;
public class Recorrerforeach1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double [] temperatura = new double[10];
int i;
for(i = 0; i<temperatura.length;i++){
System.out.print("Elemento " + i + ": ");
temperatura[i] = sc.nextDouble();
}
for(double t: temperatura){
System.out.print(t + " ");
}
System.out.println();
}
}
Esto se hace por lo general para facilitar la búsqueda de los elementos del array.
Así se clasifica en: los diccionarios, las agendas telefónicas, los casilleros de
bibliotecas, relación de amigos, etc.
Lectura de un Arreglo:
DIFERENCIAS
Scanner BufferedReader
Scanner tratado entrada dada como BufferedReader acaba de leer línea por línea dada
testigo. de entrada como cadena.
BufferedReader como línea de corriente / Cadena
Scanner por sí mismo proporciona Un BufferedReader es una clase simple significado
analizar capacidades como nextInt (), de leer de manera eficiente de la corriente de
nextFloat (). subalterno. Generalmente, cada solicitud de lectura
hecha de un lector como un FileReader causa una
solicitud de lectura correspondientes que deben
introducirse en la corriente subyacente. Cada
invocación de read () o readLine () podría causar
bytes a leer desde el archivo, convertidos en
personajes, y luego regresó, lo que puede ser muy
ineficiente. La eficiencia se mejoró sensiblemente
si un lector está deformado en un BufferedReader.
Un escáner por otro lado tiene mucho Usando BufferedReader debe escribir código
más queso construido en él; puede adicional y sólo puede leer y almacenar String.
hacer todo lo que un BufferedReader
puede hacer y al mismo nivel de
eficiencia también. Sin embargo,
además de un escáner puede analizar
la secuencia subyacente para los tipos
y cadenas primitivos utilizando
expresiones regulares. También puede
tokenize la corriente subyacente con el
delimitador de su elección. También
puede hacer exploración en avance de
la corriente subyacente sin tener en
cuenta el delimitador!
El escáner no está sincronizado. Un BufferedReader está sincronizado, por lo que las
escáner no se hilo de seguridad, tiene operaciones de lectura en un BufferedReader con
que ser sincronizado externamente. seguridad se puede hacer desde varios
subprocesos.
Scanner vienen con JDK desde la
versión 1.5 más alto.
Allons enfants de la
Patrie, Le jour de
gloire est arrivé!
Contre nous de la
tyrannie,
L'étendard sanglant est
levé,(bis) Entendez-vous
9
Este concepto está heredado de los antiguos “Archivos” (o archivadores) que contenían “Archivos” (de papel) cada una de las
cuales representaba una información unitaria: Archivos de películas, personas, asignaturas….
Entre cada una de las líneas existen “códigos invisibles” cuyo efecto es hacer
saltar al inicio de la línea siguiente. Estos códigos se generan automáticamente al
pulsar la tecla “Intro”. Así mismo, para indicar el final del Archivo de texto, el
usuario deberá haber pulsado la tecla de función “F6”.
import java.io.*;
public class PruebaArchivoSalida {
public static void main (String [ ] args) throws IOException {
FileWriter fich_s = new FileWriter ("archivo.txt");
BufferedWriter bw = new BufferedWriter (fich_s);
PrintWriter salida = new PrintWriter (bw);
BufferedReader linea = new BufferedReader (new InputStreamReader(System.in));
String lineaLeida;
10
La ruta, nombre y extensión del Archivo se eligen libremente (con las restricciones propias del siste ma operativo). En el
ejemplo se han utilizado:
Ruta: (por omisión) la misma que el programa. Nombre: archivo.
Extensión txt (para poder visualizarlo mediante el bloc de notas –notepad- de Windows).
11
Dicho Archivo estará gestionado por el sistema operativo. Con frecuencia se cambia de ubicación los Archivos (físicos) y
de no seguir esta filosofía, esto implicaría re-escribir parte del código cada vez que un Archivo cambiase de ubicación.
Proceso:
Leer (transferir a la variable correspondiente) el contenido de una línea del
Archivo y prepararse para la siguiente.
<variable tipo String> = <buffer lectura>.readline();
Terminación:
12
Para mayor información consultar el manual de programación
import java.io.*;
public class PruebaArchivoEntrada {
public static void main (String [ ] args) throws IOException { String
lineaLeida;
FileReader fichLeido = new FileReader ("archivo.txt");
BufferedReader entrada = new BufferedReader (fichLeido);
Para poder guardar objetos (por ejemplo, del tipo RegistroAlumno visto en
apartados anteriores) en un Archivo hay que hacerlos “serializables”. Mediante la
serialización, un objeto se convierte en una secuencia de bytes con la que se
puede reconstruir posteriormente manteniendo el valor de sus variables. Esto
permite guardar un objeto en un archivo o mandarlo por red. Una clase se serializa
añadiendo en su definición:
implements Serializable
Para poder leer y escribir objetos que se han declarado como serializables se
utilizan las clases ObjectInputStream y ObjectOutputStream, que cuentan con los
métodos writeObject() y readObject().
<nombre Archivo>.close()
El programa principal:
13
Por simplicidad no se han considerado situaciones excepcionales (“por excepción”). Por ejemplo: No tiene sentido utilizar la opción
[2]: “Cargar tabla de registros”, si no existe el Archivo en disco. Tampoco lo tiene utilizar la opción [3]: “Calcular calificación media”, si
no se ha ejecutado (con éxito) previamente la opción [2].
import java.io.*;
resul = 0;
for (i = 0; i < 6; i++) {
System.out.println (alumnos [i].aCadena ());
resul = resul + alumnos [i].calificacion;} return
resul/6;
}
Escritura de un Arreglo:
Es uno de los métodos de ordenación más conocidos y uno de los primeros que
aprenden los programadores.
Ejemplo:
/*
* Realizar un programa que solicita al usuario una lista de números por teclado y las
ordena con el Método Burbuja (Descendentemente)
*/
package ejemplo6;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
*
* @author Astrid
*/
public class Ejemplo6 {
/**
* @param arg
* @throws java.io.IOException
*/
public static void main(String arg[]) throws IOException
{
/*creacion del objeto para leer por teclado*/
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
/*ingreso del tamaño de arreglos*/
System.out.print("\n Ingrese Numero de Datos a Ingresar : ");
int tam = Integer.parseInt(in.readLine());
/*creacion del arreglo*/
int arr[] = new int[tam];
System.out.println();
/*lectura del arreglo*/
int j = 0;
for (int i = 0 ; i < arr.length;i++)
Versión del Módulo: 1 - Página 59 de 76
Facultad de Ingeniería - Programa de Ingeniería del Software Mod. a Distancia
Avenida del Consulado #Calle 30 No. 48 – 152,
Edificio Facultad de Ingeniería Tercer Piso
Teléfono: (575) 6752040, (5) 6752024 ext. 208 Fax: 6752040 – Apartado Aéreo 1382
www.unicartagena.edu.co - Cartagena de Indias D. T. y C. - Colombia
PROGRAMA INGENIERA DE SOFTWARE
Modalidad de Educación a Distancia
MODULO - ESTRUCTURA DE DATOS
{
j+=1;
System.out.print("Elemento " + j + " : ");
arr[i] = Integer.parseInt(in.readLine());
}
burbuja(arr);
}
Run:
Elemento 1 : 9
Elemento 2 : 8
Elemento 3 : 6
Elemento 4 : 5
Elemento 5 : 3
Elemento 6 : 1
9
Ejemplo 2:
/*
* Realizar un programa que permita ordenar una lista de números y de cadenas de
caracteres
*/
package ejemplo5;
/**
*
* @author Astrid
*/
public class Ejemplo5 {
/**
* @param args
*/
public static void main(String[] args) {
//ordenamos el array
intercambio(lista);
//ordenamos el array
intercambioPalabras(lista_String);
}
}
}
}
}
}
}
}
}
Run:
Array de números sin ordenar:
126
185
51
187
146
0
125
139
9
11
/*
* Programa que permite ordenar nombres por la ordenación de Burbuja
* utilizando la API estándar de JAVA llamada: método sort de la clase Arrays
*/
Versión del Módulo: 1 - Página 64 de 76
Facultad de Ingeniería - Programa de Ingeniería del Software Mod. a Distancia
Avenida del Consulado #Calle 30 No. 48 – 152,
Edificio Facultad de Ingeniería Tercer Piso
Teléfono: (575) 6752040, (5) 6752024 ext. 208 Fax: 6752040 – Apartado Aéreo 1382
www.unicartagena.edu.co - Cartagena de Indias D. T. y C. - Colombia
PROGRAMA INGENIERA DE SOFTWARE
Modalidad de Educación a Distancia
MODULO - ESTRUCTURA DE DATOS
package ejemplo7;
import java.util.Arrays;
/**
*
* @author Astrid
*/
public class Ejemplo7 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//Array de String
//String[] nombres = {"Pepe", "Juan", "Alex","Julian", "Francisco", "Luis"};
//A este método se le puede pasar cualquier array de cualquier tipo, ya
//probamos un tipo referencia con el tipo String, así que a continuación
//podras ver el método sort en acción con un array de tipo primitivo int.
int[] nombres = {4, 2, 6, -3, 10, 11, 166, 1};
//Ordena el array
Arrays.sort(nombres);
//Mostramos el array ya ordenado
//for (String i : nombres) {
for (int i : nombres) {
System.out.print(i + ", ");
}
}
}
Run:
-3, 1, 2, 4, 6, 10, 11, 166
temperaturas
0 1
0 7 15
1 8 17
2 6 13
3 5 14
4 7 14
5 6 16
6 5 13
Acceso:
o Al conjunto. Por ejemplo asignar una matriz a otra del mismo tipo:
matriz2 = matriz1.
Como en el caso de los vectores, esta instrucción no copia el contenido de matriz1
en matriz2, sino que hace que matriz2 apunte a la misma posición de memoria que
matriz1.
o A un elemento de la matriz:
<variable_tipo_matriz>[<índice1>] [<índice2>];
(Con lo que se podrá realizar cualquier operación acorde con el tipo del elemento
correspondiente). Por ejemplo: temperaturas [3] [1] = temperaturas [3] [1] + 2;
Ejemplo.
import java.io.*;
public class PruebaMatrices {
static BufferedReader linea=new BufferedReader(new
InputStreamReader(System.in));
public static void leerMatriz (int [][] temperaturas) throws
NumberFormatException, IOException{
int i,j;
for (i = 0;i < 7; i ++)
for (j = 0; j < 2; j ++) {
Versión del Módulo: 1 - Página 67 de 76
Facultad de Ingeniería - Programa de Ingeniería del Software Mod. a Distancia
Avenida del Consulado #Calle 30 No. 48 – 152,
Edificio Facultad de Ingeniería Tercer Piso
Teléfono: (575) 6752040, (5) 6752024 ext. 208 Fax: 6752040 – Apartado Aéreo 1382
www.unicartagena.edu.co - Cartagena de Indias D. T. y C. - Colombia
PROGRAMA INGENIERA DE SOFTWARE
Modalidad de Educación a Distancia
MODULO - ESTRUCTURA DE DATOS
System.out.println ("Valor dia: " + i + " extremo: " + j + ": ");
temperaturas [i] [j] = Integer.parseInt (linea.readLine ());
}
}
public static int min (int [][] temperaturas) {
int resul, i;
resul = temperaturas [0] [0];
for (i = 1; i < 7; i++)
if (temperaturas [i] [0] < resul)
resul = temperaturas [i] [0];
return resul;
}
public static int maxDif (int [] [] temperaturas) {
int resul, i, dif;
resul = 0;
dif = temperaturas [0][1]- temperaturas [0][0];
for (i = 1; i < 7; i++) {
if (temperaturas [i][1] - temperaturas [i][0] > dif) { dif =
temperaturas [i][1] - temperaturas [i][0]; resul = i;
}
}
return resul;
}
public static void main(String[] args) throws NumberFormatException,
IOException{
int [][] temperaturas = new int [7][2];
int minimaTemperatura, diferenciaTemperaturas;
leerMatriz (temperaturas); minimaTemperatura =
min (temperaturas); diferenciaTemperaturas =
maxDif (temperaturas); System.out.println
("Resultados:");
System.out.println ("Temperatura minima: " + minimaTemperatura);
System.out.println ("Dia extremo: " + diferenciaTemperaturas);
}
}
Por extensión, lo explicado para una y dos dimensiones se puede aplicar al caso de
matrices N-dimensionales.
Por ejemplo, la figura siguiente muestra un registro (alumno) cuyos campos son: el
número de matrícula (numeroMatricula), apellidos (apellidos), nombre (nombre),
dirección de correo electrónico (eMail), año de nacimiento (anio) y calificación
(calificacion).
alumno
Para manejar este tipo de estructuras en Java15, se construye una clase dentro de
la cual se definen los datos que van a formar parte de la estructura, así como uno
o varios
constructores, como se puede ver en el siguiente ejemplo (correspondiente a la
figura):
class RegistroAlumno {
14
Con frecuencia uno de los campos (o combinación de ellos) se utiliza como identificativo del registro. A dicho campo (o
conjunto) se le denomina clave (key).
15
Existen otras operaciones. Consultar el manual del lenguaje.
Acceso:
variable2_RegistroAlumno = variable1_RegistroAlumno;
<variable>.<campo>;
Con lo que se podrá realizar cualquier operación acorde con el tipo del
elemento correspondiente. Por ejemplo: alumno.eMail =
“esanchez@servidor.es”;
Import java.io.*;
class RegistroAlumno {
public RegistroAlumno () {
numeroMatricula= null;
apellidos = null;
nombre = null;
eMail= null; año
= 1980;
calificacion = 0;
}
public String aCadena () {
return numeroMatricula + " " + apellidos + " " + nombre + " " + eMail + " " +
año + " " + calificacion;
}
public String numeroMatricula;
public String apellidos;
public String nombre;
public String eMail; public
int año;
public float calificacion;
public void cargarRegistro () throws IOException {
BufferedReader linea = new BufferedReader (new InputStreamReader (System.in));
System.out.println ("Numero de matricula: ");
numeroMatricula = new String (linea.readLine ());
System.out.println ("Apellidos: ");
apellidos = new String (linea.readLine ());
System.out.println ("Nombre: ");
nombre = new String (linea.readLine ());
System.out.println ("Correo electronico: ");
eMail = new String (linea.readLine ());
System.out.println ("Año de nacimiento: "); año
= Integer.parseInt (linea.readLine());
System.out.println ("Calificación: ");
import java.io.*;
public class PruebaRegistro {
static void cargarTabla (RegistroAlumno [ ] alumnos) throws IOException {
int i;
for (i = 0; i < 6; i++) {
System.out.println ("Datos del alumno N: "+ i);
alumnos [i].cargarRegistro ();
}
}
static float mediaCalif (RegistroAlumno [ ] alumnos) {
float resul = 0;
int i;
for (i = 0; i < 6; i++) {
System.out.println(alumnos [i].aCadena ());
resul = resul + alumnos [i].calificacion;
}
return resul/6;
}
public static void main (String [ ] args) throws IOException {
RegistroAlumno [ ] alumnos = new RegistroAlumno [6];
float media;
int i;
for (i = 0; i < 6; i++)
REFERENCIAS BIBLIOGRÁFICAS
BIBLIOGRAFIA
FUENTES DOCUMENTALES
INSUASTY R, Luis Delfín, Guía “A”,”B”,”C”,”D” de aprendizaje
autónomo. Bogotá Colombia, Unad- Cafan
MAURREN, Priestley . Técnicas y estrategias del pensamiento crítico.
México D.F. 1996 (reimp .2000). Trillas.
ARCEO B, Frida y Otro. Estrategias Decentes Para un Aprendizaje
Significativo. Mexico D,F 1999. McGraw-HILL
KENNETH C, louden . Lenguajes de programación (segunda edición).
México D.F 2004. Thompson
AGUILAR, Luis. Fundamentos de programación, algoritmos, estructura
de datos y Objetos (tercera edición). España. 2003. McGRAW-HILL.
AGUILAR, Luis. Programación en C++, Algoritmos, estructura de datos
y Objetos España. 2000. McGRAW-HILL.
DEYTEL Y DEYTEL. Como programar C++ (segunda Edición). México
D.F. 1999. Prentice Hall. McGRAW-HILL
FARREL, Joyce, introducción a la programación lógica y diseño. México
D.F 2000. Thompson
Sitios Web
http://www.geocities.com/david_ees/Algoritmia/curso.htm (Curso de
algoritmia)
http://www.ilustrados.com/publicaciones/EpZVVEZpyEdFpAKxjH.php
(Lenguajes de Programación)
http://www.ilustrados.com/buscar.php (Algoritmos)
http://www.inf.utfsm.cl/~mcloud/iwi-131/diapositivas.html
(Algoritmos)
http://www.ucsm.edu.pe/rabarcaf/vonuep00.htm (Diccionario
académico)
http://www.funlam.edu.co/bired/index.asp-offset=0.htm (Aprendizaje
Autónomo)