Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Nivel 9
Estructuras lineales
encadenadas
Cardinalidad
indefinida
=
Número
variable de
estudiantes
Modelo del mundo con una
estructura contenedora
Modelo del mundo con una
estructura contenedora
estudiantes
Representación gráfica de un
objeto de tipo Curso con una
estructura contenedora
: Curso
0 1 2 3 …
estudiantes =
: Estudiante
nombre = “Alicia”
nota = 4.5
Modelo del mundo con una
estructura contenedora
Representación gráfica de un
objeto de tipo Curso con una lista
simplemente encadenada
: Estudiante
nombre = “Alicia”
: Curso nota = 4.5
siguiente
cabeza
…
Modelo del mundo con una lista
simplemente encadenada
Qué son las listas?
Encadenamiento sencillo
Declaración en java de la clase Curso
}
Creación de un curso nuevo
: Curso
public class Curso cabeza =
{
cabeza = null;
Al comienzo,
cabeza es null
}
: Curso
cabeza = null
Declaración en java de la clase
Estudiante
public class Estudiante
{
// El nombre del estudiante
private String nombre;
…
Creación de un nuevo Estudiante
public Estudiante( String nombreE, double notaE )
{
nombre = nombreE;
nota = notaE; : Estudiante
siguiente = null; nombre = “Alicia” Al comienzo,
nota = 4.5 siguiente es null
} siguiente = null
…
siguiente del último
elemento de la lista
SIEMPRE es null
Operaciones sobre listas
simplemente encadenadas
• Recorrido
• Ej.: Calcular el promedio del curso, contar cuántos
estudiantes están por encima del promedio
• Búsqueda
• Ej.: Cambiar la nota de un estudiante dado el nombre
• Eliminación
• Eliminar un estudiante
Calcular el promedio del curso
• Cómo se calcula el promedio de las notas
de los estudiantes?
Calcular el promedio del curso
• Cómo se calcula el promedio de las notas
de los estudiantes?
R// Recorriendo la lista, acumulando las notas,
dividiendo al final por el número de estudiantes
Calcular el promedio del curso
• Cómo se calcula el promedio de las notas
de los estudiantes?
R// Recorriendo la lista, acumulando las notas,
dividiendo al final por el número de estudiantes
cabeza
}
Buscar la posición de un estudiante dado el nombre
(retorna -1 si no existe)
}
Cambiar la nota de un estudiante dado su nombre.
public void cambiar nota ( String nombre, double notaNueva )
{
}
Devolver la lista de estudiantes en un arraylist.
public ArrayList darEstudiantes ( )
{
}
Insertar un estudiante
• Cómo se inserta un estudiante en la lista?
R// Primero se crea, luego se “encadena” en la
posición que se desea insertar
: Curso
cabeza
…
Insertar un elemento al inicio de la
lista
1. Se crea el objeto
: Estudiante
nombre = “Alicia” Al comienzo,
nota = 4.5 siguiente es null
siguiente = null
: Curso
cabeza
…
Insertar un elemento al inicio de la
lista
1. Se crea el objeto
2. Se encadena con el que era antes el primero
: Estudiante
nombre = “Alicia” siguiente ya no es
null, ahora apunta al
nota = 4.5
que era antes el
: Curso siguiente primero de la lista
cabeza
…
Insertar un elemento al inicio de la
lista
1. Se crea el objeto
2. Se encadena con el que era antes el primero
3. Se cambia la “cabeza” de la lista para que ahora sea el
nuevo elemento
: Estudiante
nombre = “Alicia”
nota = 4.5
: Curso siguiente
cabeza
…
Insertar un elemento al inicio de la
lista
public void agregarEstudianteInicio( String nombre, double nota )
{
Estudiante nuevoEstudiante = new Estudiante( nombre, nota );
nuevoEstudiante.cambiarSiguiente( cabeza );
cabeza = nuevoEstudiante;
}
Se crea el objeto
Insertar un elemento al inicio de la
lista
public void agregarEstudianteInicio( String nombre, double nota )
{
Estudiante nuevoEstudiante = new Estudiante( nombre, nota );
nuevoEstudiante.cambiarSiguiente( cabeza );
cabeza = nuevoEstudiante;
}
Se encadena con
el que era antes el
primero
Insertar un elemento al inicio de la
lista
public void agregarEstudianteInicio( String nombre, double nota )
{
Estudiante nuevoEstudiante = new Estudiante( nombre, nota );
nuevoEstudiante.cambiarSiguiente( cabeza );
cabeza = nuevoEstudiante;
}
Se cambia la
“cabeza” de la
lista para que
ahora sea el
nuevo elemento
Insertar un elemento al final de la
lista
public void agregarEstudianteFinal( String nombre, double nota )
{
}
Eliminar un estudiante
• Cómo se elimina un estudiante de la lista?
R// Primero se busca en la lista, luego se saca de
la lista (encadenando directamente el anterior
con el siguiente)
: Curso
cabeza
…
Eliminar un elemento
1. Se busca el objeto a eliminar
: Curso
cabeza
…
Eliminar un elemento
1. Se busca el objeto a eliminar
2. Se saca de la lista (encadenando directamente el anterior
con el siguiente)
: Curso
cabeza
…
Eliminar un elemento
1. Se busca el objeto a eliminar
2. Se saca de la lista (encadenando directamente el anterior
con el siguiente)
: Curso
cabeza
…
Eliminar un elemento
1. Se busca el objeto a eliminar
2. Se saca de la lista (encadenando directamente el anterior
con el siguiente)
…
Eliminar un elemento de la lista
public void eliminarEstudiante( String nombre )
{
}
public void eliminarEstudiante( String nombre )
{
if( cabeza != null && nombre.equals( cabeza.darNombre( ) ) )
cabeza = cabeza.darSiguiente( );
}
Insertar un elemento en una lista ordenada
ascendentemente por nombre
public void insertarEstudiante ( String nombre, double nota)
{
}
Eliminar el elemento de una
posición dada
public void eliminarEstudiante ( int pos )
{
}
Eliminar un elemento en una lista ordenada
ascendentemente por nombre
public void eliminarEstudiante ( String nombre )
{
}
Ordenar la lista ascendentemente por nota
con el método de selección
public void ordenarPorNota ( )
{
}
Listas doblemente
encadenadas
Caso de Estudio: La Agenda
Modelo del mundo con una lista
doblemente encadenada
Encadenamiento
doble
Encadenamiento
sencillo
Representación gráfica
Operaciones sobre listas
doblemente encadenadas
• Recorrido
• Ej.: Contar el número de días de una agenda
• Búsqueda
• Ej.: Buscar el día dada la fecha
• Eliminación
• Eliminar un Día de la agenda
Hoja de trabajo sobre la
agenda
Nuevos componentes de
interfaz: JComboBox,
JRadioButton, JTextArea,
JComboBox
http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html
Combo Box
– Permite al usuario seleccionar uno de varios
valores.
– Tiene dos formas: no editable y editable.
Combo box
editable
Combo box
no editable
(por defecto)
Pros y Contras del combo box
– Ocupa un espacio pequeño en la interfaz
(menos que las listas o los radio buttons). Son
entonces mas apropiados cuando el espacio
es limitado y hay varias posibilidades de
escogencia.
– Las listas son mas apropiadas que los combo
box cuando hay demasiados items (mas de
20) o cuando el usuario tiene la posibilidad de
seleccionar múltiples items.
Combo Box – Creación
dentro de un panel
private JComboBox cbbCitas; Declaración como atributo
privado del panel
Habilitación / Deshabilitación
cbbCitas.setEnabled( true );
(opcional)
http://java.sun.com/docs/books/tutorial/uiswing/components/button.html#radiobutton
Radio Button
– Radio buttons son grupos de botones en los
cuales, por convención, sólo un botón puede
ser seleccionado al mismo tiempo.
– Otras formas de desplegar al usuario
escogencias (selecciones posibles) son los
combo box y las listas.
Radio Button – Creación dentro de un panel
private JRadioButton radio1; Declaración como atributo
privado del panel
Habilitación / Deshabilitación
radio1.setEnabled( false ); (opcional)
grupoPrioridad.add( radio1 );
Radio Button – Otros
métodos
Selecciona una de las opciones del
setSelected( true / false ); grupo
radio1.setSelected( true );
http://java.sun.com/docs/books/tutorial/uiswing/components/textarea.html
JTextArea
– Es una zona de múltiples líneas de texto
– Debe ser puesta dentro de un JScrollPane si
se quiere scroll
JTextArea – Creación dentro de un panel
private JTextArea txtDescripcion; Declaración como atributo privado del panel
setLineWrap( boolean )