LISTAS DOBLES
●La unidad de una lista enlazada es el Nodo el cual es una
clase.
●La clase Nodo, tiene tres atributos básicos:
Información:
objeto que guarda los datos correspondientes a sus atributos, como
código, apellidos, nombres, etc.
Siguiente: objeto apuntador al siguiente nodo, es un objeto del mismo tipo
de la clase
Nodo.
Anterior: objeto apuntador al anterior nodo, es un objeto del mismo tipo de
la clase
Nodo.
Representación gráfica:
Lista vacía:
Inicio = null
Operación
de Recorrido: de izquierda a derecha y de derecha a izquierda.
Ventajas:
●Al identificar a un nodo, automáticamente se identifica el
anterior y el siguiente.
●El recorrido se puede realizar en ambos sentidos.
Desventajas:
●Requiere de espacio de memoria extra para el apuntador del
anterior.
●Las operaciones de inserción y eliminación
requieren mayor cuidado que las listas simples.
Considere la clase Empleado con los siguientes atributos:
código(cadena), nombre(cadena), sueldo(real).
Diseñe la clase NodoEmpleado con los siguientes atributos:
un objeto info de tipo Empleado, un objeto siguiente de tipo NodoEmpleado
y un objeto anterior de tipo NodoEmpleado.
Diseñe la clase ListaDobleEmpleados con los siguientes
atributos: un objeto inicio de tipo NodoEmpleado, un contador de
empleados tipo entero. También considere los siguientes métodos de
administración: agregaAlFinal(), elimina(), busca(), getN().
Diseñe la clase PanelEmpleados con el siguiente atributo:
un objeto lde de tipo ListaDobleEmpleados y con la siguiente
interface gráfica:
Solución:
package ListaDoble;
public class Empleado {
private String Codigo,
Nombre;
private double Sueldo;
public Empleado() { }
public Empleado (String
Codigo,String Nombre,double Sueldo){
this.Codigo =
Codigo;
this.Nombre =
Nombre;
this.Sueldo = Sueldo;
}
public String getCodigo() {
return Codigo;
}
public void setCodigo(String Codigo) {
this.Codigo = Codigo;
}
public String getNombre() {
return Nombre;
}
public void setNombre(String Nombre) {
this.Nombre = Nombre;
}
public double getSueldo() {
return Sueldo;
}
public void setSueldo(double Sueldo) {
this.Sueldo
= Sueldo;
}
} // Fin de la clase Empleado
package ListaDoble;
public class NodoEmpleado {
private
Empleado unEmpleado;
private NodoEmpleado
ApuntSgte;
private NodoEmpleado
ApuntAnt;
public
NodoEmpleado(Empleado unEmpleado){
this.ApuntAnt=null;
this.unEmpleado = unEmpleado;
this.ApuntSgte=null;
}
public void
setUnEmpleado(Empleado unEmpleado){
this.unEmpleado =
unEmpleado;
}
public void
setApuntSgte(NodoEmpleado ApuntSgte){
this.ApuntSgte =
ApuntSgte;
}
public Empleado
getUnEmpleado(){
return unEmpleado;
}
public NodoEmpleado
getApuntSgte(){
return ApuntSgte;
}
public NodoEmpleado
getApuntAnt() {
return ApuntAnt;
}
public void
setApuntAnt(NodoEmpleado ApuntAnt) {
this.ApuntAnt =
ApuntAnt;
}
} // Fin de la Clase
NodoEmpleado
package ListaDoble;
import javax.swing.JTextArea;
public class
ListaDobleEmpleados {
private NodoEmpleado
inicio;
private int Contador;
public
ListaDobleEmpleados(){
inicio=null;
}
public NodoEmpleado
getInicio() {
return inicio;
}
public void
setInicio(NodoEmpleado inicio) {
this.inicio =
inicio;
}
public int getContador()
{
return Contador;
}
public void
setContador(int Contador) {
this.Contador =
Contador;
}
//Metodos de
administracion
public void agrega(Empleado
unEmpleado){
NodoEmpleado nuevo;
nuevo= new
NodoEmpleado(unEmpleado);
//final
if(inicio==null)
inicio=nuevo;
else{
NodoEmpleado
aux=inicio;
while(aux.getApuntSgte()!=null)
aux=aux.getApuntSgte();
aux.setApuntSgte(nuevo);
nuevo.setApuntAnt(aux);
}
}
public Empleado
busca(String Codigo){
NodoEmpleado
Auxiliar = inicio;
while(Auxiliar!=null){
if(Codigo.equals(Auxiliar.getUnEmpleado().getCodigo()))
return
Auxiliar.getUnEmpleado();
else
Auxiliar =
Auxiliar.getApuntSgte();
}
return null;
}
public void elimina(String
Codigo) {
NodoEmpleado
aux=inicio;
while(aux!=null){
Empleado
p=aux.getUnEmpleado();
if(p.getCodigo().equals(Codigo)){
aux.getApuntSgte().setApuntAnt(aux.getApuntAnt());
aux.getApuntAnt().setApuntSgte(aux.getApuntSgte());
}
aux=aux.getApuntSgte();
}
}
public int getN() {
NodoEmpleado aux =
inicio;
int c = 0;
while(aux != null) {
c++;
aux =
aux.getApuntSgte();
}
return c;
}
public void listainversa(JTextArea salida){
salida.setText("Codigo\tNombre\tSueldo\n");
NodoEmpleado
aux=inicio;
while(aux.getApuntSgte()!=null) aux=aux.getApuntSgte();
while(aux!=null){Empleadoe=aux.getUnEmpleado();salida.append(e.getCodigo()+"\t"+e.getNombre()+"\t"+e.getSueldo()+"\n");aux=aux.getApuntAnt();}
}
} // Fin de la clase ListaDobleEmpleados
Panel Lista Doble Empleados
package
ListaDoble;
import
javax.swing.JOptionPane;
public class PanelPrincipal
extends javax.swing.JPanel {
private ListaDobleEmpleados lde;
public PanelPrincipal() {
initComponents();
lde = new ListaDobleEmpleados();
}
private void
btnAgregaActionPerformed(java.awt.event.ActionEvent evt) {
if(lde.busca(txtCodigo.getText())!=null){
mensaje(" Codigo ya existe");}
else
{
lde.agrega( new
Empleado(leeCodigo(),leeNombre(),leeSueldo()) ); }
lista();
limpia();
}
public String leeCodigo() { return txtCodigo.getText();}
public String leeNombre(){ return txtNombre.getText();}
public double leeSueldo() {
return Double.parseDouble(txtSueldo.getText());
}
public void mensaje(String s) {
JOptionPane.showMessageDialog(this,s);}
public void imprime(String s){
txtSalida.append(s+"\n");
}
public void limpia(){
txtCodigo.setText("");
txtNombre.setText("");
txtSueldo.setText("");
txtCodigo.requestFocus();}
public void lista(){
txtSalida.setText("Codigo\tNombre\tSueldo\n");
NodoEmpleado i=lde.getInicio();
while(i!=null){
Empleado
e =i.getUnEmpleado();
imprime(e.getCodigo()+"\t"+
e.getNombre()+"\t"+
e.getSueldo());
i=i.getApuntSgte();
}
}
private void
btnBuscaActionPerformed(java.awt.event.ActionEvent evt) {
Empleado
e=lde.busca(leeCodigo());
if(e==null){
mensaje("Codigo No existe");
}
else {
txtNombre.setText(e.getNombre());
txtSueldo.setText(e.getSueldo()+"");
}
}
private void
btnEliminaActionPerformed(java.awt.event.ActionEvent evt) {
if(lde.busca(txtCodigo.getText())==null)
JOptionPane.showMessageDialog(this,
"Existe ya este codigo.\nIngrese otro codigo.");
else{
lde.elimina(txtCodigo.getText());
}
}
private void
btnListaActionPerformed(java.awt.event.ActionEvent evt) {
lista();
}
private void
btnListaInversaActionPerformed(java.awt.event.ActionEvent evt) {
lde.listainversa(txtSalida);
}
private javax.swing.JButton btnAgrega;
private javax.swing.JButton btnBusca;
private javax.swing.JButton btnElimina;
private javax.swing.JButton btnLista;
private javax.swing.JButton
btnListaInversa;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane
jScrollPane1;
private javax.swing.JTextField txtCodigo;
private javax.swing.JTextField txtNombre;
private javax.swing.JTextArea txtSalida;
private javax.swing.JTextField txtSueldo;
} // Fin en la programación del Panel
Diseño de la clase Principal (Frame)
Programando en el Frame para ejecutar
el programa.
package
ListaDoble;
public class
Principal extends javax.swing.JFrame {
public Principal() {
initComponents();
add(new PanelPrincipal());
pack();
}
public static void
main(String args[]) {
java.awt.EventQueue.invokeLater(new
Runnable() {
public void run() {
new
Principal().setVisible(true); }
});
}
} // Ejecute el Programa
0 comentarios:
Publicar un comentario