domingo, 1 de marzo de 2009

Listas



Lista (estructura de datos)


En
Ciencias de la Computación, una lista enlazada es una de las estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de datos. Consiste en una secuencia de nodos, en los que se guardan campos de datos arbitrarios y una o dos referencias (punteros) al nodo anterior y/o posterior. El principal beneficio de las listas enlazadas respecto a los array convencionales es que el orden de los elementos enlazados puede ser diferente al orden de almacenamiento en la memoria o el disco, permitiendo que el orden de recorrido de la lista sea diferente al de almacenamiento.
Una lista enlazada es un tipo de dato auto-referenciado porque contienen un puntero o link a otro dato del mismo tipo. Las listas enlazadas permiten inserciones y eliminación de nodos en cualquier punto de la lista en tiempo constante (suponiendo que dicho punto está previamente identificado o localizado), pero no permiten un
acceso aleatorio. Existen diferentes tipos de listas enlazadas: Lista Enlazadas Simples, Listas Doblemente Enlazadas, Listas Enlazadas Circulares y Listas Enlazadas Doblemente Circulares.
Las listas enlazadas pueden ser implementadas en muchos lenguajes. Lenguajes tales como
Lisp y Scheme tiene estructuras de datos ya construidas, junto con operaciones para acceder a las listas enlazadas. Lenguajes imperativos u orientados a objetos tales como C o C++ y Java, respectivamente, disponen de referencias para crear listas enlazadas.

Operaciones con listas simples en java


package listas;
//operaciones para listas simples
public class ListaImplements {
class Nodo{
//variables
public String dato;
public Nodo enlace;
Nodo (String n){
dato=n;//inicializacion
enlace=null;
}
}
Nodo inicio;
public void Lista(){
inicio=null;
}
public boolean vacia(){//cuando esta vacia
return(inicio==null);
}
public int Tamaño(){//saber el tamaño
int n=0;
Nodo temporal=inicio;
while(temporal!=null){
n++;
temporal=temporal.enlace;
}
return n;
}
public boolean Buscar(String elemento){//para 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){//insert un elemento en la lista
Nodo n=new Nodo(elemento);
}
public String Eliminar(){//eliminar un elemento en la lista
String temporal=inicio.dato;
inicio=inicio.enlace;
return temporal;
}
public static void main (String args[])
{
ListaImplements x= new ListaImplements();
}
}

EJEMPLO DE LISTAS ENLAZADAS


package listasenlazadas;

class Nodo {
//variables a itilizar
int dato;
Nodo enlace;
public Nodo(int a){
//inicializar variables
dato=a;
enlace=null;
}
}
class Lista{
private Nodo inicio;
public Lista(){
inicio=null;
}
public Lista Insertarcabeza(int a){//insertar arriba
Nodo nuevo=new Nodo(a);
nuevo.enlace=inicio;
inicio=nuevo;
return this;
}
public void Visualizar(){//ver que hay en cada uno de los nodos
Nodo actual;
actual=inicio;
while(actual!=null){
System.out.print(actual.dato+"");
actual=actual.enlace;
}
}
public Nodo Buscar(int dat){//buscar un dato
Nodo i;
try{
for(i=inicio;i!=null;i=i.enlace){
if(dat==i.dato)
return i;
}
catch(Exception e)()
return null;
}
}
}

package listasenlazadas;
public class Principal {
public static void main(String [] args){
Lista x=new Lista();
//datos de ejemplo
for(int i=0; i< n="i.Buscar(3);">

EJERCICIO


package listaligada;
import java.util.*;
public class ListaLigada {
public static void main (String args[]) {
Scanner leer = new Scanner(System.in);
ListaLigada x=new ListaLigada();
//variables a usar
int num;
int op;
LinkedList lista = new LinkedList(); //menu
do{
System.out.println( "\t Menú \t" );
System.out.println( "Operaciones con listas" );
System.out.println( "1.- Insertar al principio" );
System.out.println( "2.- Insertar al final" );
System.out.println( "3.- Borrar al principio" );
System.out.println( "4.- Borrar al final" );
System.out.println( "5.- Mostrar la lista" );
System.out.println( "6.- Borrar toda la lista" );
System.out.println( "7.- Salir" );
System.out.println( "\n" );
System.out.println( "Elija la operación que desee" );
op = leer.nextInt(); //coger la opcion
switch(op){
case 1:
System.out.println( "Inserte numero" );
//coger el numero y añadirlo a la lista de primeras
num = leer.nextInt();
lista.addFirst(num);
break;
case 2:
System.out.println( "Inserte numero" );
//anadir el numero a la lista
num = leer.nextInt();
lista.addLast(num);
break;
case 3:
System.out.println( "Se borrara el primer nodo" );
//remover de la lista
lista.removeFirst();
break;
case 4:
System.out.println( "Se borrara el nodo final" );
//remover nodo de el final de la lista
lista.removeLast();
break;
case 5:
System.out.println( "La lista es la siguiente" );
//tamaño de la lista
List lista2 = new ArrayList(lista);
Iterator it = lista2.iterator();
while (it.hasNext()){
System.out.println(it.next()+"");
}
break;
case 6:
System.out.println( "Se borraran todos los elementos de la lista" );
lista.clear();
break;
case 7:
System.out.println( "Al rato" );
break;
}
}
while( op != 7 );
}
}

EJERCICIO 2


package ejemplolista;
import java.util.*;
public class ListaAlumnos{
//variables qeu necesitamos
private String nom;
int calif1;
int calif2;
int calif3;
static double prom;
public static void main( String args[] ){
Scanner leer = new Scanner(System.in);
ListaAlumnos nodo = new ListaAlumnos();
int op;
ArrayList lista = new ArrayList(); //secuencia de lista
do{
System.out.println( "Ingrese el nombre del alumno:" );
nodo.nom = leer.next();
System.out.println( "Ingrese la primera calificación:" );
nodo.calif1 = leer.nextInt();
System.out.println( "Ingrese la segunda calificación:" );
nodo.calif2 = leer.nextInt();
System.out.println( "Ingrese la tercera calificación:" );
nodo.calif3 = leer.nextInt();
//lo qeu queda guardado
lista.add("Nombre del alumno:\n"+nodo.nom);
lista.add("Calificación 1:\n"+nodo.calif1);
lista.add("Calificación 2:\n"+nodo.calif2);
lista.add("Calificación 3\n"+nodo.calif3);
promedio(nodo.calif1, nodo.calif2, nodo.calif3);
lista.add("Su promedio es:\n"+prom);
System.out.println( "¿Desea ingresar otro alumno?" );
System.out.println( "1.-Si\t 2.-No" );
op = leer.nextInt();
}
while(op != 2);
List lista2 = new ArrayList(lista);
Iterator it = lista2.iterator();
while (it.hasNext()){
System.out.println(it.next()+"");
}
}
private static double promedio(int calif1, int calif2, int calif3){ //como resolver el promedio
int suma = calif1 + calif2 + calif3;
prom = suma/3;
return prom;
}
}

EJERCICIO 3


package ejerciciodelistas;//Paquete
import java.awt.BorderLayout;//importacion de librerias
import java.awt.Frame;
import java.awt.Label;
import java.awt.List;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class Listas extends Frame{
List lista = new List(0,true);
Label text= new Label ("Maravillas que se pueden visitar en la localidad elegida");
public Listas(){
super("elegir intinerario");
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");
add(lista,BorderLayout.CENTER);
add(text,BorderLayout.SOUTH);
addWindowListener(new listeWindowListener());
//lista.addItemListener(new escuchaLista());
setSize(350,100);
setResizable(false);
show();
}
class listeWindowListener implements WindowListener{
public void windowActivated(WindowEvent e){//la ventana se ve en primer plano
}
public void windowClosed(WindowEvent e){//salir de el explor5ador
}
public void windowClosing(WindowEvent e){//seleccionaren la lista aql cerrar
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("que lo pases bien ");
}
System.exit(0);
}
public void windowDeactivated(WindowEvent e){//eventos de windows
}
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 (Ãndice==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 Ã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");
}
}
}
public static void main(String [] args){
Listas x= new Listas();
}
}

OPERACIONES RECURSIVAS


package listas2;
import javax.swing.JOptionPane;

public class IntSLLNode {
private IntSLLNode next;
public int info;
public IntSLLNode(){
}
public IntSLLNode(int i){
this(i,null);
}
public IntSLLNode(int i, IntSLLNode n){
int info= i;
next=n;
}
public void addToHead(int i,Object head){
head=newIntSLLNode(i,head);
if(tail==null)
tail=head;
}
public void addToTail(int i){
if(isEmpaty()){
Tail.next=newIntsLLNode(i);
tail=tail.next;
}
head=tail=newIntSLLNode(i);
}
public int deleteFromTail(){
int i=Head.info;
if(Head==tail){
Head=tail=null;
}
else{
IntSLLNodetmp
for(tmp=head;tmp.next!=tail;tmp=tmp.next){
tail.tmp;
tail.next=null;
}
}
}
public void PrintAll(){
for(IntSLLNode.tmp=head;tmp!=null;tmp=tmp.next){
System.out.print(tmp.info+"");
}
}
public boolean isInList(int i){
IntSLLNode tmp;
for(tmp=head;tmp!=null && tmp.info1=i;tmp=tmp.next){
returntmp!=null;
}
}
public static void main (String args[])
{
IntSLLNode x= new IntSLLNode();
}



}




3 comentarios:

  1. hola me gustaria que me ayudes en un programa basico de nodos... no entiendo muy bien todo esto mi mail es vika9490@live.com

    ResponderEliminar
  2. Hola como implementarías esos metodos de lista, para que ademas que los datos que guarde en la lista, los guarde en un archivo txt

    ResponderEliminar
  3. Hola como implementarías esos metodos de lista, para que ademas que los datos que guarde en la lista, los guarde en un archivo txt

    ResponderEliminar