P. 1
Arreglos en Java

Arreglos en Java

|Views: 2|Likes:

More info:

Published by: Moises Pariona Cahuana on Oct 27, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

06/22/2015

pdf

text

original

1.

Desarrollar los siguientes temas y anexa un ejemplo para cada uno de ellos: a) Arreglos unidimensionales b) Arreglos bidimensionales c) Pilas d) Listas a. Listas doblemente ligadas b. Listas circulares 2. Explicar cómo funcionan los recorridos de árboles binarios en: a) Pre-orden b) Orden c) Post-orden

Arreglos unidimensionales (en Java).
Definición. Es una colección de datos del mismo tipo. Sirve para manejar un número “n” de elementos en común, ya sea de tipos definidos por el Lenguaje, (“int”, “float”, “String”, etc.) así como aquellos definidos por el programador. Los arreglos en Java son dinámicos, pero no extensibles, lo cual significa que deben ser creados con el tamaño que tendrán hasta el final de su vida. Características:  Son de tipos de datos complejos (en el sentido de que no son atómicos).  Agrupan varios (1 o más) fatos de un mismo tipo, llamando el tipo base del arreglo.  Son dinámicos, pero no extensibles, lo cual significa que deben ser creados con el tamaño que tendrán hasta el final de su vida.  Los índices del arreglo empiezan con 0 y terminan con el tamaño del arreglo -1.  Si el arreglo tiene n elementos, se denotan como a[0], a[1], … , a[n-1].  El índice en un arreglo empieza siempre desde CERO.  Los arrays se crean con el operador new seguido del tipo y número de elementos. Declaración de un arreglo. La sintaxis de declaración de arreglos en Java es: <tipo> [] <nombre> Para declarar, por ejemplo, un arreglo de números enteros utilizaremos la siguiente sentencia: int[] arrInt;

Una cadena de texto es un conjunto de caracteres. Creación de una referencia a un array. //preferible double x[]. Los arrays se pueden inicializar con valores entre llaves {. También los arrays de objetos se pueden inicializar con varias llamadas a new dentro de unas llaves {…} 3.} separados por comas. Para crear el arreglo (reservar su memoria e inicializarlo) deberemos recurrir al operador new: arrInt = new int[10]. se puede hacer de dos maneras: double[] x. una asignación de este tipo generará una excepción: ArrInt[25] = 1.  Java considera cada arreglo como un solo objeto.out.Instituto Politécnico Nacional ESIME Unidad Culhuacán El arreglo aún no ha sido creado. //escribe 15  El campo length está protegido. Tamaño de un arreglo. tipo nombre_array[]={valores}. no se puede modificar Inicializando el arreglo. Son soportados por la clase String: String cadena = „abcdefg‟ 2 . 1. O también se puede declarar de la siguiente forma: tipo nombre_array[]=new tipo[nº]. 2. sino meramente declarado. y que se relaciona con el manejo de los arreglos es que el lenguaje no permite la indexación de arreglos fuera de rango. sino que se tiene un array con dos nombres. apuntando al mismo y único objeto.. el tamaño puede pensarse como un parámetro al constructor de la clase. A partir de este momento se puede utilizar arrInt como un arreglo de cualquier otro lenguaje. Las líneas 4 y 5 se pueden unir en una sola: double[]x = new double[100]. Arreglos de caracteres y cadenas de texto. „abcdefg‟.length). 4. Si se igualan dos referencias a un array no se copia el array.  El número de elementos de un arreglo se conoce accediendo al campo length double [] v = new double [15] System. Una de las características que hacen de Java un entorno de programación seguro. o sea. Creación del array con el operador new x = new double[100].. 6.printl(v. 5. El tipo de datos del arreglo (int[] en este caso) es una clase y cada una de sus instancias debe ser creada explícitamente.

„e‟.„t‟.„o‟.„r‟.„r‟.„o‟}.„c‟.„i‟. Ejemplo: Código: Ejecución: 3 .Instituto Politécnico Nacional ESIME Unidad Culhuacán Los arreglos tipo char son secuencias de caracteres. con características de arreglos de otros tipos: String mas = “programador Java” char datos[] = {„D‟.„i‟.

es decir. Es un arreglo de arreglos.{51. mientras 2 //serán las columnas int tabla[][]={{51. Columna: [x][y]  Si A es un arreglo bidimensional A[2][4] es un valor especifico en el arreglo. 4 . un arreglo unidimensional donde cada elemento es un arreglo. tabla = new int[4][2]. Elemento Tabla[0][0] Tabla[0][1] Tabla[1][0] Tabla[1][1] Tabla[2][0] Tabla[2][1] Tabla[3][0] Tabla[3][1] Posición relativa en memoria 0 4 8 12 16 20 24 28 Inicializando el arreglo. //4 serán los renglones.55}}. Características:  Se hace utilizando anidamiento de la estructura de control for( )  Dos índices en lugar de uno  Dimensión: n × m  Fila.{54. Los arreglos bidimensionales son muy utilizados para el uso de matrices de datos. tabla = new int[4][2]. Definición. int tabla[][]={valores}.{54. <tipo datoelemento> <nombreArreglo>[][] También se puede declarar: <tipo datoelemento> [][] <nombreArreglo> int tabla[][]. Declaración de un arreglo bidimensional.Instituto Politécnico Nacional ESIME Unidad Culhuacán Arreglos bidimensionales (en Java).  Se pueden ver como matrices. y poder recorrer los datos guardados dentro de este tipo de arreglos.52}.55}.52}.

Instituto Politécnico Nacional Ejemplo: Código: ESIME Unidad Culhuacán Ejecución: 5 .

6 . Se conocen como colas LIFO (ultimo en entrar. En las pilas.Instituto Politécnico Nacional ESIME Unidad Culhuacán Etc. Pilas. Definición. primero en salir). los ítems se añaden y se eliminan en el mismo extremo.

5 }. System.println( array[ i++ ] ). public void clear().length. i = 0.isEmpty() ) { array[ i ] = ((Integer) stack. ESIME Unidad Culhuacán Aplicaciones de las pilas. } Inversión mediante pila del orden de un array.intValue(). for ( i = 0. public class Reverse { public static void main(String args[]) { int [] array = { 1. while ( !stack. 4. 2.push( new Integer( array[ i ] )). } } } 7 .Instituto Politécnico Nacional Operaciones con pilas. public interface Stack { public boolean isEmpty().  Proporcionan un medio ordenado de demorar la realización de las tareas secundarias que aparecen durante la ejecución del programa  Suelen ir asociadas a algoritmos recursivos  Tipos derivados: pilas de programas. int i. i++ ) stack. public void push( Object o).pop()). Stack stack = new ArrayStack().out. 3. i < array. public Objetct pop() throws EmptyStackExceptio. pila del analizador sintáctico (parser) Interfaz stack.

8 . public boolean agregarPila (Object o) { /* pregunto si la pila está llena. la posición en el array del elemento cima de la pila va bajando a medida que se insertan ítems. Las listas (List) aparecen en los interfaces de usuario para facilitar a los operadores la manipulación de muchos elementos. En esta implementación basada en arrays. */ if (puntero == pila. Definición. } } Listas (en Java). */ return false. porque se agregó el objeto. /* Incremento el puntero para que se desplace hacia la siguiente * posición. Ejemplo. */ pila[puntero]=o. y subiendo a medida que se sacan.Instituto Politécnico Nacional ESIME Unidad Culhuacán Implementación de pilas basada en arrays. */ return true. En cierto sentido. El inicio de la pila se hallará siempre en el elemento 0 del array.length) { /* Si es que está lleno no se pueden agregar más registros. */ puntero++. /* Caso Contrario */ } else { /* Significa que la pila aún no está llena y puedo seguir * agregando registros. En java este componente permite procesar visualmente un conjunto de elementos de tipo string. la pila se va formando "cabeza abajo" en el array. /* Retorno verdadero. por lo tanto retorno falso. Y agrego en la posición puntero.

print(n. n = primero. return this. } public Lista insertarCabezaLista(int entrada) { Nodo nuevo . public Lista() { primero = null. */ package ListaEnteros. nuevo.enlace = primero. } public void visualizar() { Nodo n. 9 . while (n != null) { System.out.Instituto Politécnico Nacional ESIME Unidad Culhuacán Su primer y más importante aspecto a recordar. el atributo primero. que apunta al primer nodo. Ejemplo: package ListaEnteros. int k = 0. // clase Nodo con las dos partes de un nodo y su constructor public class Nodo { int dato. public Nodo(int x) { dato = x. primero= nuevo. cuando se procese o programe. } } /* clase Lista con las operaciones: insertar por la cabeza y visualizar (recorre los nodos) para mostrar los datos. nuevo = new Nodo(entrada). es que el primer índice de la lista. enlace = null.dato + " "). Además. Nodo enlace. public class Lista { private Nodo primero. es el índice numero 0(cero).

nextInt() % 99 . k++.out.*.println("Elementos de la lista generados al azar").abs(r. } // recorre la lista para escribir sus elementos System. // número de nodos // Son insertados elementos en la lista for (. lista. según se tomen las direcciones de uno u otro puntero.print( (k%15 != 0 ? " " : "\n")).Instituto Politécnico Nacional ESIME Unidad Culhuacán n = n.insertarCabezaLista(d). k-. ó doblemente ligada es una colección de nodos en la cual cada nodo tiene dos punteros. Una lista doble. lista = new Lista(). r = new Random(). int d.*. System.visualizar(). public class ListaAleatoria { public static void main(String [] a) { Random r.) { d = r.util. Ejemplo: public class ListaEnlazada { public NodoListaEnlazada PrincipioFin. 10 . uno de ellos apuntando a su predecesor (li) y otro a su sucesor (ld). private int numNodos.enlace.out. // crea lista vacía k = Math. } } Listas doblemente ligadas. } } } // clase con método main import java. Lista lista. Definición. lista. int k. k > 0. import ListaEnteros.nextInt() % 55). Por medio de estos punteros se podrá avanzar o retroceder a través de la lista.

i < habPorAla. i++ ) // pasos 10-12 ( (Habitacion)llaveMaestra. // paso 1 // pasos 2-5 int numPiso = 1. porque el contenido de la habitación es genérico. for( int i=0. for( int i=0.insertAt( i.java. que será prácticamente el mismo que en el caso de los arrays: public class Hotel3 { // Número de habitaciones por ala public static final int habPorAla = 12. i++ ) // pasos 6-9 llaveMaestra. } ESIME Unidad Culhuacán El nodo especial PrincipioFin es sencillo. Como Java no soporta la sobrecarga de operadores por parte del usuario. La ListaEnlazada proporciona el método insertAt() que coge el índice en la lista. Pero nosotros sí sabemos lo que hay en la lista. tenemos que usarlo siempre en su forma normal. Los pasos 2 a 5 son equivalentes a los del primer ejemplo. En este momento. es decir.getAt(i) ).Instituto Politécnico Nacional // . una lista de llaves que cumple la convención que nosotros hemos establecido. así que informamos al sistema haciendo un moldeado a la llave de la habitación (este casting     11 . ( 0 == (i%2)) ? 2 : 1 ). los arrays y el operador [] son internos del lenguaje. Los pasos 6 a 9 son funcionalmente idénticos a los del ejemplo anterior con arrays. El contador se usa para optimizar los casos más habituales. donde el nuevo nodo ha de ser insertado. . Obsérvese que no es necesario colocar moldeo alguno para hacer algo a una clase descendiente que depende de uno de sus padres. Está representada por una lista genérica. llaveMaestra = new ListaEnlazada(). El segundo argumento es el objeto que será almacenado en la lista. Los pasos 10 a 12 provocan la misma salida que los pasos 10 y 11 del ejemplo con arrays. para simplificar el código. public static void main( String args[] ) { ListaEnlazada llaveMaestra. ahora Hotel3. . } }  El paso 1 es la llave maestra de la lista. El paso 10 coge la llave del juego que se indica en el método getAt(). En Java. Construimos e inicializamos una nueva ListaEnlazada. como primer argumento. pero con diferente sintaxis. new Habitacion( numPiso * 100 + i.printData(). i < habPorAla. que usaremos como juego de llaves maestras. Revisemos pues el código de nuestro Hotel. Podríamos acelerar el tiempo de compilación metiendo la lista genérica ListaEnlazada dentro de una ListaEnlazadaHabitacion. el sistema no sabe qué datos contiene la llave.

con una referencia fija al mismo. Listas circulares. Una lista circular es una lista lineal en la que el último elemento apunta al primero. diremos que hemos llegado al final de la misma cuando nos encontremos de nuevo en el punto de partido. //siguiente elemento //métodos private CElemento(){} //constructor private CElemento(Object d. Esta referencia puede ser al primer elemento de la lista. en cuyo caso también es conocida la dirección del primer elemento. El paso 12 usa la llave para imprimir la información. ya que se evitan casos especiales. desde luego. suponiendo. El área de datos puede ser un tipo predefinido o de un tipo definido por el usuario. también puede ser al último elemento. cada elemento de la lista puede definirse como una estructura de datos con dos miembros: una referencia al elemento siguiente y otra al área de datos. por ejemplo. que el punto de partida se guarda de alguna manera en la lista. el tipo de cada elemento de la lista puede venir definido de la forma siguiente: private class CElemento { //atributos private Object datos. Primero se tiene que definir la clase de objetos que van a formar parte de la misma. Entonces es posible acceder a cualquier elemento de la lista desde cualquier punto dado. private CElementos siguiente. Las operaciones sobre una lista circular resultan más sencillas. CElemento s)//constructor { datos = d. Según esto. La siguiente figura muestra como se ve una lista circular simplemente enlazada. } 12 . Por ejemplo.Instituto Politécnico Nacional ESIME Unidad Culhuacán generará un chequeo en tiempo de ejecución por el compilador. Cuando recorremos una lista circular. para asegurarse de que se trata de una Habitación). siguiente = s. Creación de una lista circular. Definición.

public class Elemento { private Elemento elementoSiguiente. Hay varios algoritmos para el manejo de estructuras en árbol y un proceso que generalmente se repite en estos algoritmos es el de recorrido de un árbol.size()-1). Este proceso cosiste en examinar sistemáticamente los nodos de un árbol de forma que cada nodo sea visitado solamente una vez. List list = new ArrayList().setSiguienteElemento(new Elemento()). Recorridos de árboles binarios. Se pueden utilizar tres formas para recorrer un árbol binario: pre-orden. } } Luego puedes crearte una lista a la cual le añadas los elementos. 13 . public Elemento getElementoSiguiente() { return elementoSiguiente.Instituto Politécnico Nacional } Ejemplo. Elemento elemento = (Elemento)list. inorden y post-orden.elementoSiguiente = elementoSiguiente.get(list. Esta lista es solo para poder acceder a los elementos de forma más fácil. dentro de esta clase puedes usar un Collection o un array o un List. } public void setElementoSiguiente(Elemento elementoSiguiente) { this. Código: ESIME Unidad Culhuacán Se debe declarar una clase que sea un nodo o elemento en la cual tengas una referencia al siguiente nodo de la lista. Al momento de crear un nuevo elemento lo asignas al elemento anterior. elemento.

Instituto Politécnico Nacional ESIME Unidad Culhuacán Recorrido en forma pre-orden. public class CArbolBinario { //atributos del árbol binario private CNodo raíz. D Ejemplo: Código: ///// clase árbol binario. R. private CNodo izquierdo. //se visita el subárbol izquierdo preorden( r. private CNodo derecho. In-orden: I. //raíz del árbol //nodo de un árbol binario private class CNodo { //atributos private Object datos. después la raíz y por último el subárbol derecho. primero se visita la raíz después el subárbol izquierdo y por último se visita el subárbol derecho. El recorrido en pre-orden produce la notación prefija. D 14 .izquiero). Primero se visita el subárbol izquierdo. El recorrido en in-orden produce la notación convencional. Cuando se utiliza la forma pre-orden. I.derecho). //se visita el subárbol derecho } } Recorrido en forma in-orden. Pre-orden: R. //métodos public CNodo(){} //referencia a los datos //raíz del subárbol izquierdo //raíz del subárbol derecho //constructor } //métodos del árbol binario public CArbolBinario(){} //constructor public void preorden(CNodo r) { if ( r != null ) { //escribir aquí las operaciones a realizar con el nodo //referenciado r preorden( r.

public class CArbolBinario { //atributos del árbol binario private CNodo raíz. D. R Ejemplo. //raíz del árbol //nodo de un árbol binario private class CNodo { //atributos private Object datos. // se visita el subárbol derecho } } Recorrido en forma post-orden. después el subárbol derecho y por último la raíz.Instituto Politécnico Nacional Ejemplo.derecho). Post-orden: I. private CNodo derecho. El recorrido en post-orden produce la notación postfija o inversa. Primero se visita el subárbol izquierdo. //raíz del árbol 15 . private CNodo izquierdo. Código: ///// Clase árbol binario. public class CArbolBinario { //atributos del árbol binario private CNodo raíz. Código: ///// clase árbol binario. //métodos public CNodo(){} ESIME Unidad Culhuacán //referencia a los datos //raíz del subárbol izquierdo //raíz del subárbol derecho //constructor } //métodos del árbol binario public CArbolBinario(){} //constructor public void inorden(CNodo r) { if ( r != null ) { inorden( r. //se visita el subárbol izquierdo //escribir aquí las operaciones a realizar con el nodo //referenciado r inorden( r.izquierdo).

private CNodo izquierdo. //se visita el subárbol derecho //escribir aquí las operaciones a realizar con el nodo //referenciado r } } 16 . //métodos public CNodo(){} ESIME Unidad Culhuacán //referencia a los datos //raíz del subárbol izquierdo //raíz del subárbol derecho //constructor } //métodos del árbol binario public CArbolBinario(){} //constructor public void postorden(CNodo r) { if ( r != null ) { postorden( r.derecho). private CNodo derecho.Instituto Politécnico Nacional //nodo de un árbol binario private class CNodo { //atributos private Object datos.izquierdo). //se visita el subárbol izquierdo postorden( r.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->