Sunteți pe pagina 1din 8

E.F.

P INGENIERA DE SISTEMAS
Conceptos Previos

LABORATORIO LISTAS

El uso de estructuras de datos se constituye en un recurso fundamental en el


mbito de la programacin ya que permiten guardar desde pequeas hasta
grandes cantidades de informacin en memoria segn sean los requerimientos
Mapa Conceptual.

Una lista enlazada es una estructura de datos que permite almacenar


informacin dinmicamente, es decir la memoria se reserva a tiempo de
ejecucin del programa. Observe el siguiente diagrama de una lista enlazada

Cada elemento de la lista enlazada est representado por un rectngulo


dividido en dos campos que se denomina nodo.
Estructura de Datos:
Ing. Jennifer Pillaca De La Cruz
Ing. Elinar Carrillo Riveros

Pgina 1

E.F.P INGENIERA DE SISTEMAS


Un nodo contiene como mnimo dos campos: uno de informacin (datos del
cliente, datos del pasajero, datos de la cuenta, entre otros) llamado inf. y otro
que contiene la direccin del siguiente nodo, llamado sig. Note que este ltimo
es un apuntador a nodo.
Existe una referencia externa, llamado lst que apunta al primer nodo, a
travs del cual se tiene acceso a la lista enlazada. Esta referencia no est
incluido en ningn nodo. Los dems referencias son internos de la lista.
El ltimo nodo de la lista contiene un valor especial, denominado null, en
el campo siguiente, el cual representa un apuntador vaco. Esto indica el fin de
la lista.
Si una lista no contiene nodos, se dice que es una lista vaca o nula. En este
caso el apuntador externo vale null.
Listas Enlazadas Simples
============================
1) Crear Lista.
2) Imprimir Lista.
3) Agregar nodo al inicio.
4) Agregar nodo al final.
5) Buscar un elemento en Lista.
6) Borrar nodo al inicio.
7) Borrar nodo al final.
8) Salir de la aplicacin.

Modelamiento
El elemento base de todo lista son los nodos, se implementa una clase
denominada Nodo.
Las operaciones bsicas correspondientes a los requerimientos se
encapsulan en la clase llamada Lista en las que se incluye:
Crear Lista.
Imprimir Lista.
Agregar nodo al inicio.
Agregar nodo al final.
Buscar un elemento en Lista.
Borrar nodo al inicio.
Borrar nodo al final.
Las opciones del men se encapsulan en la clase denominada
AplicacionLista

Estructura de Datos:
Ing. Jennifer Pillaca De La Cruz
Ing. Elinar Carrillo Riveros

Pgina 2

E.F.P INGENIERA DE SISTEMAS

Clase Nodo
Clase que modela el elemento bsico de la lista conformado por los campos
dato de tipo entero y la auto-referencia denominada enlace que tiene el mismo
nombre de la clase.
A continuacin se codifica la clase Nodo:
public class Nodo {
private int dato;
//auto referencia
public class Nodo {
private int dato;
//auto referencia
private Nodo enlace;
public Nodo() {
this.dato = 0;
this.enlace = null;
}

public Nodo(int dato) {


Estructura de Datos:
Ing. Jennifer Pillaca De La Cruz
Ing. Elinar Carrillo Riveros

Pgina 3

E.F.P INGENIERA DE SISTEMAS


this.dato = dato;
this.enlace = null;
}

public int getDato() {


return dato;
}
public void setDato(int dato) {
this.dato = dato;
}
public Nodo getEnlace() {
return enlace;
}
public void setEnlace(Nodo enlace) {
this.enlace = enlace;
}
}
CLASE LISTA:
public class Lista {
private Nodo primero;
private Nodo ultimo;
public Lista() {
this.primero = null;
this.ultimo = null;
}
public void anexarInicioLista (int dato){
Nodo nuevo;
nuevo=new Nodo(dato);
if (primero==null){
primero=nuevo;
ultimo=nuevo;
}
else
{
Estructura de Datos:
Ing. Jennifer Pillaca De La Cruz
Ing. Elinar Carrillo Riveros

Pgina 4

E.F.P INGENIERA DE SISTEMAS


nuevo.setEnlace(primero);
primero=nuevo;
}
}
public void anexarFinalLista (int dato){
Nodo nuevo;
nuevo=new Nodo(dato);
if (primero==null){
primero=nuevo;
ultimo=nuevo;
}
else
{
nuevo.setEnlace(nuevo);
ultimo=nuevo;
ultimo.setEnlace(null);
}
}
public boolean esVacia (){
return (primero==null);
}
public boolean buscarNodo(int dato){
boolean encontro=false;
Nodo p=primero;
while (p.getEnlace()!=null && encontro==false)
{
if(p.getDato()==dato)
encontro=true;
p=p.getEnlace();
}
return encontro;
}
public boolean borrarNodoInicio(){
if (esVacia())
return false;
if(primero.getEnlace()==null){
primero=null;
ultimo=null;
return false;
}
Estructura de Datos:
Ing. Jennifer Pillaca De La Cruz
Ing. Elinar Carrillo Riveros

Pgina 5

E.F.P INGENIERA DE SISTEMAS


else
{
Nodo temp=primero;
primero=primero.getEnlace();
temp.setEnlace(null);
return true;
}
}
public String imprimirLista( ){
String str= "";
if(!esVacia()) {
Nodo p =primero;
while(p.getEnlace()!=null){
str += p.getDato()+" ";
p=p.getEnlace();
}
} else {
str= "Lista Vacia";
}
return str;
}
}
CLASE DEMO
public class Demo {
private Lista lst;
private String menuOpciones;
private String opcion; private int numero; private int dato; private int
datoInicio;
private Scanner input;
public Demo() {
this.lst=new Lista ();
this.menuOpciones="Listas Enlazadas Simples\n" +
"=========================\n"+ "1. Crear lista\n2.
Imprimir lista" +
"\n3. Anexar nodos Inicio \n4. Anexar nodos final\n5. Buscar nodos\n6."
+
" Borrar nodo inicio" +"\n7. Borrar nodo final\n8. Salir";
this.opcion=""; this.dato=0; this.numero=0; this.datoInicio=0;
this.input = new Scanner(System.in);
Estructura de Datos:
Ing. Jennifer Pillaca De La Cruz
Ing. Elinar Carrillo Riveros

Pgina 6

E.F.P INGENIERA DE SISTEMAS


}
public void leerMenu() {
do{
listarMenu(menuOpciones);
numero=input.nextInt();
switch (numero){
case
case
case
case
case
case
case

1:
2:
3:
4:
5:
6:
7:

crearLista();
break;
listar(); break;
anexarNodoInicio(); break;
anexarNodoFinal(); break;
buscarNodo(); break;
borrarDatoInicio(); break;
borrarDatoFinal(); break;

}
}while(numero !=8);
}
public void listarMenu(String menu)
{ System.out.println(menu);
}
public void crearLista() {
lst=new Lista ();
for (int dato=1; dato<=10; dato++){
lst.anexarFinalLista(dato);
this.dato=dato;
}
listar();
}
public void anexarNodoInicio() {
lst.anexarInicioLista(datoInicio);
--datoInicio;
listar();
}
public void anexarNodoFinal() {
dato++;
lst.anexarFinalLista(dato); listar();
}
public void listar() {
String laLista=lst.imprimirLista(); System.out.println(laLista);
Estructura de Datos:
Ing. Jennifer Pillaca De La Cruz
Ing. Elinar Carrillo Riveros

Pgina 7

E.F.P INGENIERA DE SISTEMAS


}
public void buscarNodo(){
int n=0;
System.out.println("digite el numero a buscar");
n=input.nextInt();
if(lst.buscarNodo(n)){
System.out.println("valor encontrado");
}
else{
System.out.println("valor no encontrado");
}
listar();
}
public void borrarDatoInicio(){
if(lst.borrarNodoInicio()){ System.out.println("nodo borrado");
}
else{
System.out.println("valor no borrado");
}
listar();

}
public void borrarDatoFinal(){
if(lst.borrarNodoFinal()){ System.out.println("nodo borrado");
}
else{
System.out.println("valor no borrado");
}
listar();
}
public static void main(String []args) { Demo lista=new Demo();
lista.leerMenu();
}

Estructura de Datos:
Ing. Jennifer Pillaca De La Cruz
Ing. Elinar Carrillo Riveros

Pgina 8

S-ar putea să vă placă și