Estructura de Datos (Java) Objetivo: Aprenderá las principales estructuras de datos desde un punto de vista abstracto y las operaciones que se pueden realizar sobre ellas, aplicando en forma práctica los conceptos adquiridos mediante resolución de problemas. I.
Tipos de datos. I.1. Tipos de datos. I.1.1. Tipos de datos simples. I.1.1.1. Definición de bit, byte, carácter y palabra. I.1.1.2. Manipulación de bits. I.1.1.3. Representación de datos simples. I.1.2. Tipos de datos Abstractos. I.2.
II.
Estructura de datos. I.2.1. Definición. I.2.2. Clasificación. I.2.2.1. Lineales y no lineales. I.2.2.2. Dinámicas y estáticas.
Estructuras lineales. II.1. Arreglos. II.1.1. Definición. II.1.2. Unidimensionales. II.1.3. Bidimensionales. II.1.4. Multidimensionales. II.1.5. Resolución de problemas con arreglos. II.1.6. Clases para la implementación de arreglos. II.2. Pilas. II.2.1. Definición. II.2.2. Operaciones. II.2.3. Clases para la implementación de pilas. II.3. Colas. II.3.1. Definición. II.3.2. Tipos. II.3.2.1. Colas simples. II.3.2.2. Colas circulares. II.3.2.3. Colas dobles. II.3.3. Operaciones. II.3.4. Clases para la implementación de colas.
III.
Listas enlazadas. III.1. Listas enlazadas. III.1.1. Simples. III.1.2. Dobles. III.1.3. Circulares. III.1.4. Multilistas. III.1.5. Clases para la implementación de listas.
IV.
Estructura no lineales IV.1. Árboles. IV.1.1. Definición. IV.1.2. Representación en memoria de árboles. IV.1.2.1. Árboles generales. IV.1.2.2. Árboles binarios. IV.1.3. Recorrido de árboles binarios. IV.1.3.1. Preorden. IV.1.3.2. Inorden. IV.1.3.3. Postorden. IV.1.4. Balanceo de árboles binarios. IV.1.5. Clases para la implementación de árboles. IV.2. Grafos IV.2.1. Definición. IV.2.2. Tipos de grafos. IV.2.3. Representación de grafos en memoria. IV.2.4. Clases para la implementación de grafos.
Bibliografía: •
Estructura de datos, 2ª. Edición Cairo Mc Graw Hill, 2001
•
Estructura de datos en Java Mark Allen Weiss Mark Personal Educación
•
Estructura de datos, algoritmos y programación orientada a objetos Heileman Mc Graw Hill, 2001
•
Fundamentos de algoritmia Brassard y Bratley Prentice Hall
• Harvey M. Deitel/ Paul J. Deitel Cómo programar en Java, 5ª. Edición, 2004 Pearson, Prentice Hall
• Luis Joyanes Aguilar / Ignacio Zahonero Martínez Programación en Java 2 Algoritmos, Estructuras de Datos y Programación Orientada a Objetos, 2002 Mc Graw Hill
•
C++ guía de autoenseñanza. Schildt Mc Graw Hill, 2001
•
C# Manual de referencia Schildt Mc Graw Hill, 2003
Fechas de Exámenes Examen
Fecha
1er 2º. 3er 4º. Regularización Extraordinario I Calificación Final Otras Observaciones: • • •
Personificador Hora de entrada Asistencia a clase
•
Derecho a examen
•
Revisión equitativa
Regularización Extraordinario I
Unidades
Java
import Importación de paquetes con clases predefinidas. public class NombreDeLaClase { //
Este nombre debe de coincidir con el nombre físico del archivo fuente y debe tener extensión .java
Declaración de variables miembro de la clase public static tipo main (String[] args) { // También (String args[]) puede especificarse así. Declaración de variables locales Sentencias de la función main() [return tipo;] } Definición de métodos de la clase acceso static tipo NombreDelMétodo1 (Lista de Argumentos) { Declaración de variables del método 1 Sentencias del método 1 [return tipo;] } acceso static tipo NombreDelMétodo2 (Lista de Argumentos) { Declaración de variables del método 2 Sentencias del método 2 [return tipo;] } }
1
En Java existen dos formas de definir comentarios, estos son: Cometarios por Línea:
Se utilizan dos barras verticales // y después el comentario.
Ejemplo: Comentario por línea: // Mi primer programa en Java // Elaborado el 20 de Agosto de 2009 // En la materia de programación
Comentarios por Bloque:
Se utiliza una barra vertical y un asterisco, posteriormente se ponen los comentarios, los cuales pueden utilizar varias líneas y para terminar el comentario se emplea un asterisco y una barra vertical. /* comentario */.
Ejemplo: Cometario por Bloque: /* Mi primer programa en Java Elaborado el 20 de Agosto de 2005 En la materia de programación */ Tipo de datos en Java
Tipo
Tamaño en bits
boolean
1
char
16
byte
8
short
16
int
32
long
64
Rango de valores true o false Nota: El No. de bits puede variar según la plataforma ‘\u0000’ hasta ‘\uFFFF' Conjunto Unicode de ISO -128 a +127 -27 a 27 – 1 -32,768 a +32,767 -215 a 215 – 1 -2,147,483,648 a +2,147,483,647 -231 a 231 – 1 -9,223,372,036,854,775,808 a +9,223,372,036,854,775,807 -263 a 263 – 1
2
Tipo
Tamaño en bits
float
32
double
64
Rango de valores Rango negativo: -3.4028234663852886E+38 hasta -1.40129846432481707E-45 Rango positivo: 1.40129846432481707E-45 hasta 3.4028234663852886E+38 Rango negativo: -1.797693134862157E308 hasta -4.94065645841246544E324 Rango positivo: 4.94065645841246544E324 hasta 1.797693134862157E308
Tokens elementos léxico de los programas Existen 5 clase de tokens: identificadores, palabras reservadas, literales, operadores y otros. Identificadores Los identificadores pueden representar variables, constantes, métodos, nombres de archivos, etc. Diagrama de contexto de los identificadores:
Regla para formar un identificador: 1. 2. 3. 4. 5. 6.
Debe comenzar por una letra Después de la 1er. Letra puede contener letras, dígitos o guión de piso No están permitidos los espacios en blanco No deben formar palabras reservadas Java es sensibles a las mayúsculas y minúsculas En Java la longitud de los identificadores no tiene límite. 3
Variables tipo
;
identificador
, tipo
=
identificador
;
Expresión
, Constantes En Java puede distinguirse dos tipos de constantes: Constantes Literales Constantes Declaradas
o o
Constantes Declaradas Por medio del cualificador final permite dar nombres simbólicos a constantes. identificador
final tipo
=
Valor
;
Operadores Aritméticos Operador
Significado
Ejemplo
+ * / %
Suma Resta Multiplicación División Modulo
nEsto + nAquello nEsto – nAquello nEsto * nAquello nEsto / nAquello nEsto % nAquello
Nota:
El lenguaje Java extiende la definición del operador + para incluir la concatenación de cadenas.
4
Los operadores + y - tienen versiones unarias que seleccionan el signo del operando. Operador + -
Uso + op - op
Descripción Indica que el valor es positivo Indica que el valor es negativo
Además, existen dos operadores de atajos aritméticos, ++ y -Símbolo --
++
Sentencia abreviada
Sentencia no abreviada
a--
a=a-1
--a
a=a-1
a++
a=a+1
++a
a=a+1
Descripción Primero se utiliza el valor de la variable a y después se decrementa en uno Primero se decrementa en uno el valor de a y después se utiliza la variable a Primero se utiliza el valor de la variable a y después se incrementa en uno Primero se incrementa en uno el valor de a y después se utiliza la variable a
Operadores relacionales Operador Uso
Devuelve true si
>
op1 > op2
op1 es mayor que op2
>=
op1 >= op2
op1 es mayor o igual que op2
<
op1 < op2
op1 es menor que op2
<=
op1 <= op2
op1 es menor o igual que op2
==
op1 == op2
op1 y op2 son iguales
!=
op1 != op2
op1 y op2 son distintos
5
Operadores Lógicas Operador &&
Descripción And condicional
||
Or condicional
&
And lógico
|
Or lógico
^
Or exclusivo
!
Negación
Corto Circuito Si No
Operadores de Asignación Java proporciona varios operadores de asignación que permiten realizar operaciones aritméticas y lógicas.
Símbolo
Sentencia abreviada
Sentencia no abreviada
Descripción
=
a=b
a=b
El valor de b se asigna a la variable a
*=
a*=b
a=a*b
El valor de a se multiplica por b y se asigna a la variable a
/=
a/=b
a=a/b
El valor de a se divide por b y se asigna a la variable a
%=
a%=b
a=a%b
El valor de a se divide por b y el resto (o residuo) se asigna a la variable a
+=
a+=b
a=a+b
El valor de a se suma a valor de b y se asigna a la variable a
-=
a-=b
a=a-b
El valor de a se le resta el valor de b y se asigna a la variable a
6
Reglas de prioridad Prioridad
Operadores
Asociatividad
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
new (objeto) . [] () Agrupación ++ -- prefijo ++ -- postfijo ~ ! - + Unarios (tipo) Cast * / % +<< >> >>> < <= > >= instanceof == != & ^ | && || ? : condicional = *= /= %= += -= ,
I-D D-I I-D D-I D-I I-D I-D I-D I-D I-D I-D I-D I-D I-D I-D D-I D-I I-D
Selección Simple if (Expresión) Acción;
Doble if (Expresión) acción 1;
o
else acción 2;
if (Expresión) Acción;
if (Expresión) { acción1; acción 2; . . acción n;
if (Expresión) {acción1; acción2,…,acción n} ; o if (Expresión) { acción1; acción 2; . . acción n; }
} else { acción1; acción 2; . . acción n; }
7
Selección múltiple: switch (selector) { case constante 1: Acción 1; break; case constante 2: Acción 2; break; … default: Acción n; }
Ciclos for 1.
for (Inicialización; Condición; Incremento) sentencia;
2.
for (Inicialización; Condición; Incremento) { sentencia 1; sentencia 2; … sentencia n;
}
while 1.
2.
do while while (condición) sentencia; while (condición) { sentencia 1; sentencia 1; … sentencia n; }
1.
do sentencia; while (condición);
2.-
do { sentencia 1; sentencia 2; … sentencia n; } while (condición);
8
Estructura de un Método acceso static tipo NombreDelMétodo (Lista de Argumentos) { Declaración de variables del método Sentencias del método [return tipo;] Donde: acceso
static
Cada método tiene asociado un tipo que se utiliza para controlar el acceso al método. Entre estos se encuentran: public
Este método público se puede llamar de cualquier código que tenga acceso a la clase.
private
Este método privado solo puede ser llamada desde otro método de la clase en que se definió el método privado.
protected
Este método protegido se puede llamar desde otros métodos de la clase en que el método esta definido y por cualquier otro método de las clases que heredan de la clase en que está definido el método. También está disponible en cualquier objeto de las clases pertenecientes al mismo paquete que la clase en que está definido el método.
defecto
Si no especifica ningún tipo de acceso, se utiliza el acceso por defecto, esto significa que el método es accesible a todas las clases contenidas en le mismo paquete, pero no esta accesible fuera de ese paquete.
Declara el método como método de la clase y no como método del objeto (no hereda el método).
Nota: Un método declarado como static solo puede ser llamado por otro método static y hacer referencia a variables static.
9
Declaración de arreglos unidimensionales Al igual que con cualquier variable en Java, los arreglos se deben declarar antes de ser utilizados. Tipo [ ]
;
identificador
, Tipo
;
identificador [ ]
, Declaración de arreglos bidimensionales (matriz) Tipo [ ] [ ]
identificador
;
, identificador [ ] [ ]
Tipo
;
, Arreglos multidimencionales int cubo [ ][ ][ ] = new int [4][5][3];
3
y
4
z x 5
10
Declaración de clases. [public] class NombreDeLaClase { Declaración de variables miembro de la clase [acceso] [static] tipo identificador ; , [acceso] [static] tipo NombreDelMétodo1 (Lista de Argumentos) { Declaración de variables del método 1 Sentencias del método 1 [return tipo;] } [acceso] [static] tipo NombreDelMétodo2 (Lista de Argumentos) { Declaración de variables del método 2 Sentencias del método 2 [return tipo;] } }
Creación de objetos. Una vez que una clase ha sido definida, un programa puede crear una instancia de la clase denominado objeto. Un objeto se crea por medio del operador new aplicado a un constructor de clase. Formato para definir una referencia de un objeto: NombreDeClase identificadorObjeto; Formato para crear un Objeto: identificadorObjeto = new NombreDeClase(Lista de Argumentos);
11
Constructores Constructores por defecto Un constructor que no tiene parámetros se le llama constructor por defecto. Un constructor por defecto normalmente inicializa las variables con un valor por defecto class Punto { private int x; private int y; Punto () { x = 0; y = 0; }
//constructor por defecto
Punto (int x, int y) { this.x = x; this.y = y; } Regla: Java crea automáticamente un constructor por defecto cuando no existe otro constructor. Tal constructor inicializa las variables tipo int, float, double, long con cerro, las booleanas con false y las referencias con null. Precaución:
Tenga cuidado con la declaración de una clase que sólo tenga un constructor con argumentos. En ese caso si se omite un constructor sin parámetros no será posible utilizar el constructor por defecto. class Punto { private int x; private int y; Punto (int x, int y) { this.x = x; this.y = y; } …. } …. Punto primerPunto = new Punto();
// no es posible utilizar este constructor
12
Constructores alternativos A un constructor con parámetros se le denomina constructor alternativo class Punto { private int x; private int y; Punto () { x = 0; y = 0; }
// constructor por defecto
Punto (int x, int y) { this.x = x; this.y = y; }
// constructor alternativo
Constructores sobre cargados Al igual que la sobrecarga de métodos, se pueden sobrecargar los constructores. Esta técnica es muy utilizada porque proporciona medios alternativos para inicializar objetos nuevos de una clase. public class EquipoSonido { private int potencia; private int voltios; private int numCd; private String marca; EquipoSonido() { marca = “Sin Marca”; } EquipoSonido(String m) { marca = m; } EquipoSonido(String m, int p, int v) { marca = m; potencia = p; voltios = v; } …….. ……..
Otros temas: Herencia. Polimorfismo. Archivos.
13