lista ligada
DESCRIPTION
Ejemplo de una lista ligadaTRANSCRIPT
Lista Ligada
import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;
import java.util.*;
class Tabla extends Frame {
Panel panel;
TextField textver,textinser,textbus;
TextArea textimpri;
Button mostrar, buscar, insertar, cierra;
Label lab1, lab2, titulo;
public static final int size_hash = 5;
LinkedList []Arreglo = new LinkedList[size_hash];
Tarea1 prueba = new Tarea1(Arreglo,size_hash);
public Tabla(String title) {
super (title);
Font f = new Font( "Tahoma", 0 , 13 );
titulo = new Label("TABLA HASH");
titulo.setBounds(180,20,400,50);
Font ff = new Font( "Tahoma", 1 ,18 );
titulo.setFont( ff );
add(titulo);
setFont( f );
setResizable(false); //no maximizar
setBounds(150,100,500,450);
setLayout(null);
textver = new TextField(40);
textver.setBounds(60,170,400,25);//cuadro para ver comentarios
textinser = new TextField(40);
textinser.setBounds(180,90,130,25);//cuadro para escribir cadenas a insertar
textbus = new TextField(40);
textbus.setBounds(180,130,130,25);//cuadro para escribir cadenas a buscar
textimpri = new TextArea(20,40);
textimpri.setBounds(150,220,310,190); //area donde se imprime la tabla
textver.setText("Introduzca una cadena arriba y haga click en el boton insertar ");
textimpri.setEditable(false); //no se puede escribir
textver.setEditable(false); //no se puede escribir
textinser.setEditable(true);
textbus.setEditable(true);
insertar = new Button("Insertar"); //x, y, largo , ancho
insertar.setBounds(330,90,100,20);
buscar = new Button("Buscar");
buscar.setBounds(330,130,100,20);
mostrar = new Button("Mostrar_Tabla");
mostrar.setBounds(55,240,90,25);
cierra = new Button("Cerrar");
cierra.setBounds(55,300,90,25);
mostrar.setEnabled(false); //desabiliter
buscar.setEnabled(false);
cierra.setEnabled(true);
lab1 = new Label("Busca Cadena: ");
lab2 = new Label("Dar una Cadena: ");
lab1.setBounds(60,130,110,20);
lab2.setBounds(60,90,110,20);
add(lab1);
add(lab2);
add(textver);
add(textimpri);
add(textinser);
add(textbus);
add(insertar);
add(buscar);
add(mostrar);
add(cierra);
mostrar.addActionListener(new accion());
buscar.addActionListener(new accion());
insertar.addActionListener(new accion());
cierra.addActionListener(new accion());
addWindowListener(new Cerrar());
setVisible(true);
}
/////////////////////////////////////////////////////////////////////
// clase que controla los eventos sobre el boton
class accion implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String com = e.getActionCommand();
if (com.equals("Insertar"))
{
prueba.Insertar_Nodos(Arreglo);
textinser.setText("");
buscar.setEnabled(true);
mostrar.setEnabled(true);
}
if( com.equals("Buscar") )
{
prueba.Buscar(Arreglo);
textbus.setText("");
}
if(com.equals("Mostrar_Tabla") )
{
prueba.Mostrar(Arreglo);
}
if(com.equals("Cerrar") )
{
System.exit(0);
}
}
}
///////////////////////////////////////////////////////////////////////
public class Tarea1{
int size;
LinkedList arreglo[];
public Tarea1(LinkedList Arreglo[], int tam)
{
size= tam;
int i;
for (i=0; i<tam; i++)
{
Arreglo[i] = new LinkedList();
Nodo indice= new Nodo(i);
Insertar(indice,Arreglo[i]);
}
}
public Nodo Crea_Nodo(String cade, int posicion)
{
Nodo nuevo = new Nodo(cade,posicion);
return nuevo;
}
public void Insertar(Nodo x, LinkedList lista)
{
lista.addLast(x);
}
public void Eliminar(int x, LinkedList lista)
{
lista.remove(x);
}
public boolean Buscar_Copia(Nodo dato, LinkedList lista){
int i=0;
boolean bandera=false;
Nodo obj;
if (lista.size() == 1){
bandera=false;
}
else{
while (i < lista.size()){
obj= (Nodo)lista.get(i);
if ((obj.Obtener_Cadena()).equals(dato.Obtener_Cadena())==false){
bandera=false;
i++;
}
else{
bandera=true;
break;
}
}
}
return bandera;
}
public int hash (String key)
{
int hashVal = 0;
for (int i = 0; i < key.length(); i++){
hashVal += key.charAt(i);
// System.out.println("Operacion es ="+hashVal);
}
return hashVal % size;
}
public void Insertar_Nodos(LinkedList Arreglo [])
{
String res;
int clave;
String palabra;
Nodo aux;
boolean verificar;
textver.setText("Introduce una cadena de caracteres");
palabra=textinser.getText();
clave=hash(palabra);
aux=Crea_Nodo(palabra,clave);
verificar=Buscar_Copia(aux,Arreglo[clave]);
if(verificar==false)
{
Insertar(aux,Arreglo[clave]);
textver.setText("El nodo con la cadena '"+aux.Obtener_Cadena()+"' fue insertado en el indice "+aux.Obtener_Posicion());
}
else
textver.setText("*****El elemento '"+aux.Obtener_Cadena()+"' ya existe, prueba con otra cadena*****");
System.out.print(verificar);
System.out.println(clave);
}
public void Buscar(LinkedList Arreglo[])
{
int i=1;
String res;
int clave;
String palabra;
Nodo aux;
boolean verificar;
textver.setText("Introduce la cadena a buscar");
palabra=textbus.getText();
clave=hash(palabra);
aux=Crea_Nodo(palabra,clave);
verificar=Buscar_Copia(aux,Arreglo[clave]);
if(verificar==false)
textver.setText("------El elemento '"+aux.Obtener_Cadena()+"' no se encuentra dentro de la tabla hash------");
else
textver.setText("El Elemento "+ "'"+palabra + "'"+" se encuentra en la posicion "+clave+" de la tabla hash");
}
public void MostrarLista(LinkedList Pila)
{
int i=1,j=0;
int tam=Pila.size();
Nodo obj;
textimpri.append("\n");
obj= (Nodo)Pila.get(j);
textimpri.append(obj.Obtener_Posicion()+ " --> " );
while (i<tam){
obj= (Nodo)Pila.get(i);
textimpri.append(obj.Obtener_Cadena()+ " --> ");
i++;
}
}
public void Mostrar(LinkedList Arreglo[])
{
int i;
textimpri.append("\n\n\nLa tabla hash es: ");
for (i=0; i<size_hash; i++)
MostrarLista(Arreglo[i]);
}
}
class Cerrar extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
}
/////////////////////////////////////////////////////////////////
public static void main(String [] args) {
new Tabla("Metodo de Hash");
}
}
La clase nodo
import java.io.*;
public class Nodo{
String dato;
int posicion;
Nodo siguiente;
public Nodo(){}
public Nodo(int posicion){
siguiente=null;
this.dato=" ";
this.posicion=posicion;
}
public Nodo (String dato, int posicion)
{
siguiente=null;
this.dato=dato;
this.posicion=posicion;
}
public Nodo(String dato,int posicion, Nodo sigue)
{
this.dato=dato;
this.posicion=posicion;
this.siguiente=sigue;
}
public String Obtener_Cadena()
{
return dato;
}
public int Obtener_Posicion()
{
return posicion;
}
}
Ejemplo del programa