martes, 3 de marzo de 2009

TAD Lista

Una lista es un conjunto de N nodos l1, l2, … ln, con n >= 0, cuyas propiedades estructurales esenciales incluyen sólo las posiciones lineales (unidimensionales) relativas de los nodos; para ella se definen operaciones como las siguientes:
  • Tener acceso a un nodo.
  • Insertar y eliminar un nodo en la lista.
  • Combinar dos o más listas en una.
  • Dividir una lista en dos o más listas.
  • Determinar la cantidad de nodos de la lista.
  • Ordenar la lista de acuerdo a un criterio.
  • Buscar un elemento bajo una condición.

Listas Simples

La lista enlazada básica es la lista enlazada simple la cual tiene un enlace por nodo. Este enlace apunta al siguiente nodo en la lista, o al valor Null o a la lista vacía, si es el último nodo.


Listas Dobles

Un tipo de lista enlazada más sofisticado es la lista doblemente enlazada o lista enlazadas de dos vías. Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta al valor Null o a la lista vacía si es el primer nodo; y otro que apunta al siguiente nodo siguiente, o apunta al valor Null o a la lista vacía si es el último nodo.




Operaciones en Java

  • List() , crear una nueva lista.
  • List(int rows), crea una nueva lista con rows líneas.
  • List(int rows, boolean multipleMode), crea una nueva lista con rows líneas, y se le dice que, según el valor booleano multipleMode, se podrán elegir uno o más elementos de la lista.
  • void add(String item) para colgar, al final de la lista o en cierta posición, un nuevo componente.
  • void addActionListener(ActionListener l), para asociar un ActionListener a la lista.
  • void addItemListener(ItemListener l), para asociar un ItemListener a la lista.
  • String getItem(int index), para tener el elemento en posición indicada.
  • int getItemCount(), para obtener el número de los elementos.
  • String[] getItems(), para obtener todos los elementos.
  • EventListener[] getListeners(Class listenerType) , para obtener los oyentes asociados a la lista del tipo que queremos.
  • Dimension getMinimumSize(), da el tamaño mínimo de la lista.
  • Dimension getPreferredSize(), da el tamaño preferido para la lista.
  • int getRows(), dice el número de líneas al momento visibles en la lista.
  • int getSelectedIndex(), da el índice del elemento seleccionado.
  • void makeVisible(int index), visualiza el item en la posición indicada.
  • void remove(int position), void remove(String item), elimina los elementos indicados por el índice o la etiqueta.
  • void removeAll(), elimina todos los elementos de la lista.
  • void removeActionListener(ActionListener l) & void removeItemListener(ItemListener l), eliminan los oyentes de sucesos definidos para la lista.
  • void replaceItem(String newValue, int index), modifica el elemento ESPECIFICADO
  • void select(int index), selecciona el elemento indicado en la lista.
  • void setMultipleMode(boolean b), dice a la lista si es posible seleccionar sólo un elemento o más de uno.
Ejemplo Java

Veamos el ejemplo sobre el uso de las listas.

Gestiona las reservas de visitas guiadas de algunas localidades y que nos obligue a elegir una. Tendremos la lista de las localidades. Analicemos cómo podemos implementarla. Para construir la lista utilizaremos uno de los tres constructores:



import java.awt.*;
import java.awt.event.*;//Importar los paquetes necesarios

public class listas extends Frame //Hereda de la clase Frame
{

List lista=new List(0,true); //Crea la nueva lista

Label text=new Label("Maravillas que se pueden visitar en la localidad elegida");//texto auqe aparecera en el Frame

public listas()
{
super("Elegir itinerario");

lista.add("Bienvenido");
lista.add("Foiano de Val Fortore");
lista.add("Baselice");
lista.add("San Bartolomeo en Galdo");
lista.add("San Marco de los Cavoti");
lista.add("Montefalcone en Val Fortore");
lista.add("Pesco Sannita");
lista.add("Colle Sannita");
lista.add("Castelvetere en Val Fortore");
lista.add("Castelfranco en Miscano");
lista.add("Ginestra de los Schiavoni");
lista.add("San Giorgio la Molara");
lista.add("Molinara");
lista.add("Pietrelcina");
lista.add("Fragneto Monforte");
lista.add("Circello");
lista.add("Campolattaro"); //Añade los elementos de la lista, en este caso las localidades

add(lista,BorderLayout.CENTER);
add(text,BorderLayout.SOUTH);

addWindowListener(new listeWindowListener());
lista.addItemListener(new escuchaLista());

setSize(350,100);

setResizable(false);

show(); //Propiedades del Frame

}


public static void main(String [] arg)
{

new listas();

}


class listeWindowListener implements WindowListener //Esta clase nos ayuda con la interfaz y la ejecuion de los eventos
{

public void windowActivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowClosing(WindowEvent e)
{
String[] s=lista.getSelectedItems();
int i=0;
System.out.println("Itinerario seleccionado");
try
{
while (true)
{
System.out.println(s[i++]);

}

}
catch (ArrayIndexOutOfBoundsException er)
{System.out.println("Qué lo pases bien...");}
System.exit(0);
}

public void windowDeactivated(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e){}
}


class escuchaLista implements ItemListener
{

public void itemStateChanged(ItemEvent e)
{
int índice=((Integer) e.getItem()).intValue();
if (índice==0) text.setText("Rocca de los Rettori, arco de Trajano, anfiteatro Romano, ciudad espectáculo");
if (índice==1) text.setText("localidad San Giovanni, Campanario, via Roma, lago, fiesta S.Giovanni, fiesta del emigrante");
if (índice==2) text.setText("óasis ds San Leonardo");
if (indice==3) text.setText("casco histórico");
if (índice==4) text.setText("casco histórico");
if (índice==5) text.setText("casco histórico");
if (índice==6) text.setText("casco histórico");
if (índice==7) text.setText("casco histórico");
if (índice==8) text.setText("casco histórico");
if (índice==9) text.setText("Bosque");
if (índice==10) text.setText("casco histórico");
if (índice==11) text.setText("Lago de San Giorgio");
if (índice==12) text.setText("casco histórico");
if (índice==13) text.setText("Piana Romana, casco histórico, casas de Padre Pío");
if (índice==14) text.setText("Encuentro internacional de globos, Palacio Ducal");
if (índice==15) text.setText("casco histórico");
if (índice==16) text.setText("Dique de Campolattaro");
//Dependiendo del evento accionado en la lista, mostramos los barrios de la localidad
}

}

}

Lista simple en Java

package listas;
public class ListaImplements {
class Nodo{
public String dato;
public Nodo enlace;
Nodo (String n){
dato=n;
enlace=null;
}
}
Nodo inicio;
public void Lista(){
inicio=null;

//inicializacion y Definicion de variables

}
public boolean vacia(){//cuando esta vacia
return(inicio==null);
}
public int Tamaño(){//obtener el tamaño de la lista
int n=0;
Nodo temporal=inicio;
while(temporal!=null){
n++;
temporal=temporal.enlace;
}
return n;
}
public boolean Buscar(String elemento){//Buscar un elemento en la lista
Nodo temporal=inicio;
while(temporal!=null){
if(elemento.equals(temporal.dato))
return true;
else
temporal=temporal.enlace;
}
return false;
}
public void Insertar(String elemento){//Agregar un elemento a la lista
Nodo n=new Nodo(elemento);
}
public String Eliminar(){//Eliminar un elemento de la lista
String temporal=inicio.dato;
inicio=inicio.enlace;
return temporal;
}
public static void main (String args[])
{
ListaImplements x= new ListaImplements();
}
}