listas lineales estaticas y dinamicas

72
3. Estructuras Lineales Estáticas y Dinámicas 1. Pilas 2. Colas 3. Listas enlazadas 1. Simples 2. Dobles

Upload: jennifer-bustos

Post on 03-Jan-2016

112 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Listas Lineales Estaticas y Dinamicas

3. Estructuras Lineales Estáticas y Dinámicas

1. Pilas

2. Colas

3. Listas enlazadas1. Simples

2. Dobles

Page 2: Listas Lineales Estaticas y Dinamicas

Estructuras de Datos

Estructuras de Datos

Lineales

No lineales

Almacenamiento Contiguo

Almacenamiento No

Contiguo

Page 3: Listas Lineales Estaticas y Dinamicas

Operaciones Básicas en Estructuras Lineales

1. Recorrido: Procesa c/elemento de la estructura.

2. Búsqueda: Recupera la posición de un elemento específico.

3. Inserción: Adiciona un nuevo elemento a la estructura.

4. Borrado: Elimina un elemento de la estructura.

5. Ordenación: Ordena los elementos de la estructura de acuerdo a los valores que contiene.

6. Mezcla: Combina 2 estructuras en una sola.

Page 4: Listas Lineales Estaticas y Dinamicas

PILAS

Definición:Estructura de datos lineal donde los elementos pueden ser añadidos o removidos solo por un extremo. Trabajan con filosofía LIFO (Last In- First Out ).

Ejemplos:•Pila de platos•Pila de discos•Pila de llamadas a funciones•Pila de recursion•Pila de resultados parciales de formulas aritméticas, etc.

Page 5: Listas Lineales Estaticas y Dinamicas

OPERACIONES BASICAS CON PILAS

-PUSH (insertar).- Agrega un elementos a la pila en el extremo llamado tope.

-POP (remover).- Remueve el elemento de la pila que se encuentra en el extremo llamado tope.

-VACIA.- Indica si la pila contiene o no contiene elementos.

-LLENA.- Indica si es posible o no agregar nuevos elementos a la pila.

Page 6: Listas Lineales Estaticas y Dinamicas

REPRESENTACIÓN DE PILAS:• Usando arreglos: Define un arreglo de una dimensión

(vector) donde se almacenan los elementos.

0 1 2 3 4 5

TOPE: Apunta hacia el elemento que se encuentra en el extremo de la pila. (inicialmente es -1).

Page 7: Listas Lineales Estaticas y Dinamicas

Inicio:

Insertar

A:

Tope

-1

Insertar

B:

Insertar

C:

Eliminar

elemento

Tope

A A

B

Tope

A

B

Tope

C

A

B

Tope

Ejemplo

Page 8: Listas Lineales Estaticas y Dinamicas

Interface para una pila de datos enteros:

interface IPila {

public boolean llena();

public boolean vacia();

public void push (int elem);

public int pop();

}

Page 9: Listas Lineales Estaticas y Dinamicas

Implementación usando un arreglo:

class Pila implements IPila {int tope = -1;private int [] pila = new int [10];final int MAX = 9;public boolean llena(){

return ( tope == MAX );}public void push (int elem){ if (this.llena()) then

// ERROR else{ tope ++;

pila [ tope ] = elem;}

}

public boolean vacia(){return (tope == -1);

}

public int pop(){if (this.vacia()) then

// ERRORelse{

int x = pila[tope];

tope --;return x;

}}

}

Page 10: Listas Lineales Estaticas y Dinamicas

Implementación usando un Vectorpublic class Stack { private Vector items; public Stack() { items = new Vector(10); } public Object push(Object item){ items.addElement(item); return item; } public synchronized Object pop(){ int len = items.size(); Object obj = null; if (len == 0) throw new EmptryStackException(); obj = items.elementAt(len-1); items.removeElementAt(len –1); return obj; } public boolean isEmpty() { if (items.size == 0) return true; else return false; }}

Page 11: Listas Lineales Estaticas y Dinamicas

EXPRESIONES ARITMETICAS:

Una expresión aritmética contiene constantes, variables y operaciones con distintos niveles de precedencia.

OPERACIONES :^ potencia*/ multiplicación, división+,- suma, resta

Aplicaciones de Pilas

Page 12: Listas Lineales Estaticas y Dinamicas

NOTACION INFIJA:Los operadores aparecen en medio de los operandos. A + B, A – 1, E/F, A * C , A ^ B , A + B + C, A+B-C

NOTACION PREFIJA:El operador aparece antes de los operandos. + AB, - A1, /EF, *AC, ^AB, +AB+C, +AB-C

NOTACION POSTFIJA:El operador aparece al final de los operandos. AB+, A1-, EF/, AC*, AB^, AB+C+, AB+C-

NOTACIONES:NOTACIONES:

Page 13: Listas Lineales Estaticas y Dinamicas

PASOS PARA EVALUAR UNA EXPRESION:

1.-CONVERTIR A POSTFIJO: convertir la expresión en notación infijo a notación postfijo

2.-EVALUAR LA EXPRESION POSTFIJA: usar una pila para mantener los resultados intermedios cuando se evalúa la expresión en notación posfijo.

Page 14: Listas Lineales Estaticas y Dinamicas

REGLAS PARA CONVERTIR EXPRESION INFIJA A POSTFIJA

Se crea un string resultado donde se almacena la expresión en postfijo.

1.- Los operandos se agregan directamente al resultado

2.- Un paréntesis izquierdo se mete a la pila y tiene prioridad o precedencia cero (0).

3.- Un paréntesis derecho saca los elementos de la pila y los agrega al resultado hasta sacar un paréntesis izquierdo.

4.- Los operadores se insertan en la pila si:

a) La pila esta vacía.

b) El operador en el tope de la pila tiene menor precedencia.

c) Si el operador en el tope tiene mayor precedencia se saca y agrega al resultado (repetir esta operación hasta encontrar un operador con menor precedencia o la pila este vacía).

5.- Cuando se termina de procesar la cadena que contiene la expresión infijo se vacía la pila pasando los elementos al resultado.

Page 15: Listas Lineales Estaticas y Dinamicas

Ejemplos

• Convertir las siguientes expresiones infijas a posfijo

A +B*C-D

A * ((B-C) / 2))

((X-Z)*(Y+W))/X+Y

Page 16: Listas Lineales Estaticas y Dinamicas

REGLAS PARA EVALUAR UNA EXPRESION POSTFIJA

Recorrer la expresion de izquierda a derecha

1. Si es un operando 1. almacenar el valor en la pila de valores

2. Si es un operador:1. Obtener dos operandos de la pila de valores

2. Aplicar el operador

3. Almacenar el resultado en la pila de valores

Al finalizar el recorrido, el resultado estará en la pila de valores

Page 17: Listas Lineales Estaticas y Dinamicas

• Las pilas pueden ser usadas para implementar la recursión en programas.

• Una función o procedimiento recursivo es aquel que se llama a si mismo.

• Ejemplos:– Factorial– Números de Fibonacci– Torres de Hanoi– Algoritmos de Ordenamiento de datos– Etc.

Aplicaciones de PilasFunciones RecursivasFunciones Recursivas

Page 18: Listas Lineales Estaticas y Dinamicas

Aplicaciones de PilasRecursionRecursion

// Funcion factorial public static int factorial(int n) { if (n<=1) return 1; else return n*factorial(n-1); }

// Funcion fibonacci public static int fib(int n) { if (n==1) return 0; else if (n==2) return 1; else return fib(n-1)+fib(n-2); }

Page 19: Listas Lineales Estaticas y Dinamicas

• Las pilas son requeridas para implementar el control de flujo de ejecución de un programa con subprogramas (funciones, procedimientos o métodos).– Subprogramas recursivos o no recursivos– Existen llamadas a ejecución de subprogramas.– Un subprograma se ejecuta completamente

antes de retornar al punto donde fue llamado.

Aplicaciones de PilasControl de secuencia de programas.Control de secuencia de programas.

Page 20: Listas Lineales Estaticas y Dinamicas

Aplicaciones de Pilas

// Programa Principalclass Principal{ public static void proceso1(){ System.out.println(“proceso1”); proceso2(); … } public static void proceso2(){ System.out.println(“proceso2”); … } public static void main(String[] args){ proceso1(); proceso2(); … }}

Cual es la salida de

este programa?

Control de secuencia de programas.Control de secuencia de programas.

Page 21: Listas Lineales Estaticas y Dinamicas

Clase Stack en Java

java.util Class Stack<E>java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.Vector<E> java.util.Stack<E> All Implemented Interfaces:

Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess

La clase Stack representa una pila de objetos donde el último en entrar es el primero en salir (LIFO). Extiende la clase Vector con 5 operaciones básicas.

Page 22: Listas Lineales Estaticas y Dinamicas

Method Summary

 boolean

empty()           Tests if this stack is empty.

 E peek()           Looks at the object at the top of this stack without removing it from the stack.

 E pop()           Removes the object at the top of this stack and returns that object as the value of this function.

 E push(E item)           Pushes an item onto the top of this stack.

 int search(Object o)           Returns the 1-based position where an object is on this stack.

Page 23: Listas Lineales Estaticas y Dinamicas

COLAS

Definicion. Es una lista lineal de elementos en la que las operaciones de insertar y eliminar se realizan en diferentes extremos de la cola.Trabajan con filosofía FIFO ( First In - First out), el primer elemento en entrar es el primer elemento en salir.

Ejemplos:

•Cola de automóviles esperando servicio en una gasolinera•Cola de clientes en una ventanilla del banco para pagar un servicio•Cola de programas en espera de ser ejecutados por una computadora.

Page 24: Listas Lineales Estaticas y Dinamicas

TIPOS DE COLAS:

• Cola simple: Estructura lineal donde los elementos salen en el mismo orden en que llegan.

• Cola circular: Representación lógica de una cola simple en un arreglo.

• Cola de Prioridades: Estructura lineal en la cual los elementos se insertan en cualquier posición de la cola y se remueven solamente por el frente.

• Cola Doble (Bicola): Estructura lineal en la que los elementos se pueden añadir o quitar por cualquier extremo de la cola (cola bidireccional).

Page 25: Listas Lineales Estaticas y Dinamicas

Operaciones básicas en Colas Simples

Insertar.- Almacena al final de la cola el elemento que se recibe como paramétro.

Eliminar.- Saca de la cola el elemento que se encuentra al frente.

Vacía.- Regresa un valor booleano indicando si la cola tiene o no elementos (true – si la cola esta vacia, false – si la cola tiene al menos un elemento).

Llena.- Regresa un valor booleano indicando si la cola tiene espacio disponible para insertar nuevos elementos ( true – si esta llena y false si existen espacios disponibles).

Page 26: Listas Lineales Estaticas y Dinamicas

Operaciones:

A

BA

A B C

B C

B C D

C D

1.- Insertar A1.- Insertar A

2.- Insertar B2.- Insertar B

Estado de la cola:

3.- Insertar C3.- Insertar C

4.- Remover 4.- Remover ElementoElemento

5.- Insertar D5.- Insertar D

6.- Remover Elemento

Inicio: Cola Vacía

Page 27: Listas Lineales Estaticas y Dinamicas

Implementación de Colas

• Arreglo– con frente fijo.– con frente movible.– circular.

• Listas ligadas

Page 28: Listas Lineales Estaticas y Dinamicas

Las colas pueden ser representadas en arreglos de una dimensión (vector) manteniendo dos variables que indiquen el FRENTE y FINAL de los elementos de la cola.

A F S D Z

Frente Final

0 1 2 3 4 5

Representación usando arreglos

Page 29: Listas Lineales Estaticas y Dinamicas

• Cuando la cola esta vacía las variables frente y final son nulos y no es posible remover elementos.

• Cuando la cola esta llena ( frente = 0 y final = n-1) no es posible insertar elementos nuevos a la cola.

• Cuando se remueven elementos el frente puede incrementarse para apuntar al siguiente elemento de la cola (implementacion con frente movil) o los elementos en la cola pueden desplazarse una posicion adelante (implementación con frente fijo)

• Recuperación de espacio: Cuando no hay espacios libres al final del arreglo los elementos pueden ser desplazados para desocupar posiciones en un extremo del arreglo o se puede manejar una estructura circular.

Page 30: Listas Lineales Estaticas y Dinamicas

Ejemplo: Suponer que usamos un arreglo de 5 posiciones. Usando la representación de frente fijo y frente movible.

A B CFrente

Final

Al remover un elemento:

B C

Frente

Final

B C

Frente

Final

Frente fijo Frente movible

Page 31: Listas Lineales Estaticas y Dinamicas

Insertar elemento D:

B C D

Frente

Final

B C

Frente

Final

B C D

B C

Frente

Final

Frente

Final

Page 32: Listas Lineales Estaticas y Dinamicas

Insertar elemento E:

B C D E

Frente

Final

Insertar elemento F:

B C D E F

Frente

Final

Insertar elemento G: Error: Cola llena!!!!

B C D E

Frente

Final

B C D E F

Frente

Final

Page 33: Listas Lineales Estaticas y Dinamicas

Cola Circular

Es una representación lógica de la cola en un arreglo.

El frente y final son movibles.

Cuando el frente o final llegan al extremo se regresan a la primera posición del arreglo.

C D E

Frente

Final

F C D E

Frente

Final

C D

Frente

Final

B C D

Frente

Final

Remover

Insertar E

Insertar F

Cola inicial

Page 34: Listas Lineales Estaticas y Dinamicas

Representación de colas:• Usando memoria estática: arreglos con tamaño fijo y frente fijo o movible o represntación circular.

• Usando memoria dinámica: Listas ligadas.

B C D E F

Frente

Final

0 1 2 3 4

B C D

Frente

Final

E F

Page 35: Listas Lineales Estaticas y Dinamicas

Interfase de un TDA llamado ICola:

interface ICola{

public boolean llena();

public boolean vacia();

public void insertar (Object elem);

public Object eliminar();

}

Page 36: Listas Lineales Estaticas y Dinamicas

Implementación de una cola:

class Cola<T> implements ICola<T> {private T[] cola;private int frente = -1;private int fin = -1;private int size;

public Cola(int s){ size = s-1; cola = new T[s]; } public boolean vacia(){ return (frente == -1); } public boolean llena(){ return ( fin == size ); } public void insertar( T elem) { ...

} public T eliminar(){ … }

}

class Cola implements ICola {class Cola implements ICola {private private ObjectObject[] cola;[] cola;private int frente = -1;private int frente = -1;private int fin = -1;private int fin = -1;private int size;private int size;

public Cola(int s){public Cola(int s){ size = s-1;size = s-1; cola = new cola = new ObjectObject[s];[s]; }} public boolean vacia(){public boolean vacia(){ return (frente == -1); return (frente == -1); }} public boolean llena(){public boolean llena(){ return ( fin == size );return ( fin == size ); }} public void insertar( public void insertar( ObjectObject elem) { elem) {

if ( frente == -1 ) if ( frente == -1 ) frente ++;frente ++;

else else if ( fin == size)if ( fin == size) ERROR Cola Llena!ERROR Cola Llena! fin ++;fin ++; cola[fin]=elem;cola[fin]=elem; }} }} public public Object eliminarObject eliminar(){(){ …… }}}}

Implementacion usando Object

Implementacion usando parametros de tipo

Page 37: Listas Lineales Estaticas y Dinamicas

Ejercicio.

• Definir una clase Cola con las operaciones básicas en 3 implementaciones diferentes:– Con tamaño fijo y frente fijo. Desplazamiento de

elementos cada vez que se remueve un elemento.

– Con tamaño fijo y frente movible. Desplazamiento de elementos cuando el final llegue al límite del arreglo y existan elementos vacíos al frente.

– Con tamaño variable.• Incrementar el tamaño del arreglo cuando la cola

este llena.

Page 38: Listas Lineales Estaticas y Dinamicas

Colas en Java

• Java contiene la definición de interfaces y clases para el manejo de colas.

• Las colas son una colección de elementos diseñadas para almacenar elementos que esperan ser procesados.

• Java contiene una interfase parametrizada Queue<E> y varias clases que que la implementan, entre ellas PriorityQueue<E>

Page 39: Listas Lineales Estaticas y Dinamicas

Colas en Java

public interface Queue<E> extends Collection<E> {

E element(); boolean offer(E o); E peek(); E poll(); E remove(); }

Page 40: Listas Lineales Estaticas y Dinamicas

Method Summary

 E element()           Retrieves, but does not remove, the head of this queue, it throws an exception if this queue is empty..

 boolean

offer(E o)           Inserts the specified element into this queue, if possible.

 Epeek()           Retrieves, but does not remove, the head of this queue, returning null if this queue is empty.

 Epoll()           Retrieves and removes the head of this queue, or null if this queue is empty.

 E remove()           Retrieves and removes the head of this queue.

Page 41: Listas Lineales Estaticas y Dinamicas

Cola de Prioridad en Java

java.util Class PriorityQueue<E>

java.lang.Object java.util.AbstractCollection<E> java.util.AbstractQueue<E> java.util.PriorityQueue<E>

Type Parameters: E - the type of elements held in this collection

All Implemented Interfaces: Serializable, Iterable<E>, Collection<E>, Queue<E>

Page 42: Listas Lineales Estaticas y Dinamicas

Constructor SummaryPriorityQueue()           Creates a PriorityQueue with the default initial capacity (11) that orders its elements according to their natural ordering (using Comparable).

PriorityQueue(Collection<? extends E> c)           Creates a PriorityQueue containing the elements in the specified collection.

PriorityQueue(int initialCapacity)           Creates a PriorityQueue with the specified initial capacity that orders its elements according to their natural ordering (using Comparable).

PriorityQueue(int initialCapacity, Comparator<? super E> comparator)          Creates a PriorityQueue with the specified initial capacity that orders its elements according to the specified comparator.

PriorityQueue(PriorityQueue<? extends E> c)              Creates a PriorityQueue containing the elements in the specified collection.

PriorityQueue(SortedSet<? extends E> c)              Creates a PriorityQueue containing the elements in the specified collection.

Page 43: Listas Lineales Estaticas y Dinamicas

Method Summary boolean add(E o)

          Adds the specified element to this queue.

 void clear()           Removes all elements from the priority queue.

 Comparator<? super E

>

comparator()           Returns the comparator used to order this collection, or null if this collection is sorted according to its elements natural ordering (using Comparable).

 Iterator<E>

iterator()           Returns an iterator over the elements in this queue.

 boolean offer(E o)           Inserts the specified element into this priority queue.

 E peek()           Retrieves, but does not remove, the head of this queue, returning null if this queue is empty.

 E poll()           Retrieves and removes the head of this queue, or null if this queue is empty.

 boolean remove(Object o)           Removes a single instance of the specified element from this queue, if it is present.

 int size()           Returns the number of elements in this collection.

Page 45: Listas Lineales Estaticas y Dinamicas

Este ejemplo crea un tabla hash con llave de tipo String y datos de tipo Integer.

import java.util.Hashtable;public class Tabla{

public static void main (String[] arg){ Hashtable<String, Integer> numeros = new Hashtable<String, Integer>(); numeros.put("uno",1); numeros.put("dos", new Integer(2)); Integer n = numeros.get("dos"); if (n != null) System.out.println(n);}

}

Page 46: Listas Lineales Estaticas y Dinamicas

Constructores de Tablas hash

Constructor Summary

Hashtable()           Constructs a new, empty hashtable with a default initial capacity (11) and load factor, which is 0.75.

Hashtable(int initialCapacity)           Constructs a new, empty hashtable with the specified initial capacity and default load factor, which is 0.75.

Hashtable(int initialCapacity, float loadFactor)           Constructs a new, empty hashtable with the specified initial capacity and the specified load factor.

Hashtable(Map<? extends K,? extends V> t)           Constructs a new hashtable with the same mappings as the given Map.

Page 47: Listas Lineales Estaticas y Dinamicas

LISTAS ENLAZADAS

1. Simples (con enlace simple)

2. Dobles (doblemente enlazadas)

• Existe diversas implementaciones de estas estructuras.

• Las variaciones mas comunes implementan listas circulares y listas con cabecera en sus dos variaciones (simples y dobles)

Page 48: Listas Lineales Estaticas y Dinamicas

En lenguajes donde no se cuenta con memoria dinámica, las listas se implementan usando arreglos.

Pan -1

información enlace

Galletas 4

Jamón 7

Leche 0

inicio

0

1

2

3

4

5

6

7

•El arreglo contiene dos campos: uno para la información y otro para relacionar al siguiente elemento.

•La lista se recorre desde el inicio y hasta encontrar un elemento que contenga un enlace vacío.

Page 49: Listas Lineales Estaticas y Dinamicas

LISTAS

Una lista es una colección lineal de elementos llamados nodos donde el orden de los mismos se establece mediante punteros o referencias y existe un puntero/referencia especial llamado inicio para localizar al primer elemento.

Ejemplos:

inicio *Lista enlazada de 0 elementos

inicio

* Lista enlazada de 4 elementos

Información enlace

Page 50: Listas Lineales Estaticas y Dinamicas

Los nodos de las listas

Un nodo se divide en 2 partes:

• Información: Contiene la información del elemento.

• Enlace: Contiene la dirección del siguiente nodo de la lista.

información enlace

Nodo

public class Nodo{ // atributos public String informacion; public Nodo enlace; // el constructor de nodos Nodo (String n){ informacion = n; enlace = null; }}

Page 51: Listas Lineales Estaticas y Dinamicas

1. Arreglos: La relación lineal esta implícita en la relación física de los elementos. Desventaja: Almacenamiento estático y tamaño fijo.

2. Elementos enlazados: Agrega a cada elemento un campo de enlace, no requieren almacenamiento contiguo en memoria, se pueden añadir y borrar elementos fácilmente.

Almacenamiento de datos:

Page 52: Listas Lineales Estaticas y Dinamicas

Listas Simples

• Colección lineal de elementos llamados nodos.• Existe un elemento llamado inicio que apunta al

primer elemento de la lista.• Cada nodo contiene un campo de enlace que apunta

al siguiente elemento.• El último elemento de la lista en su campo enlace

apunta a nulo.• Al principio el apuntador inicio apunta a nulo.

Page 53: Listas Lineales Estaticas y Dinamicas

• Insertar: Agrega un elemento a la lista.

• Eliminar: Retira un elemento de la lista.

• Buscar: Busca un elemento en la lista.

• Recorrer: Visita todos los elementos de la lista.

• Vacía: Indica si la lista contiene o no elementos.

• Tamaño: Indica el número de elementos de la lista.

Con las operaciones anteriores, define una interfase para una lista simple que contiene datos de tipo String.

Operaciones con listas simples

Page 54: Listas Lineales Estaticas y Dinamicas

public interface ILista{ public void insertar(String elemento); public boolean eliminar(String elemento); public String eliminar(); public boolean buscar(String elemento); public String recorrer(); public boolean vacía(); public int tamaño(); }

Page 55: Listas Lineales Estaticas y Dinamicas

Implementación de la interfase IListapublic boolean buscar(String elemento){ Nodo temporal = inicio; while (temporal != null) { if (elemento.equals(temporal.dato)) return true; else temporal= temporal.enlace; } return false; } public String recorrer(){ …. } public void insertar(String elemento){ Nodo n = new Nodo(elemento); // donde se inserta??? // al frente? // al final? // en el medio? } public boolean eliminar(String elemento){ // elimina a un elemento especifico } public String eliminar(){ // elimina el primer elemento String temporal = inicio.dato; inicio = inicio.enlace; return temporal; }}

public class Lista implements ILista{ class Nodo{

public String dato; public Nodo enlace; Nodo (String n){ dato = n; enlace = null;}

} Nodo inicio; public Lista(){ inicio = null; } public boolean vacía(){ return (inicio == null); } public int tamaño(){ int n=0; Nodo temporal=inicio; while (temporal != null) { n++; temporal = temporal.enlace; } return n; }

Page 56: Listas Lineales Estaticas y Dinamicas

Tarea individual.Fecha de entrega:

• Escribe el método insertar para una lista que contiene datos ordenados ascendentemente.

• Escribe el método eliminar un elemento específico para la clase Lista.

• Escribe el método recorrer donde el String de resultado contiene a todos los elementos de la lista y cada elemento esta separado por un return.

• Prueba la clase Lista con un programa Java que lea de teclado 10 nombre y los inserte en la lista. Imprime la lista y su tamaño después de cada operación de inserción.

Page 57: Listas Lineales Estaticas y Dinamicas

Puntos Extras!!

• Escribe un método llamado copia que obtenga una copia de la lista y la regrese como resultado.

Page 58: Listas Lineales Estaticas y Dinamicas

Ejercicio

Implementar una cola usando una lista ligada.

La cola contiene alumnos.

Que elementos (datos) se requieren?

Que métodos se implementan?

frente Alumno 1 Alumno 2 Alumno 3 Alumno 4

fin

Page 59: Listas Lineales Estaticas y Dinamicas

class Cola_Lista {class Nodo{ String nombre; Nodo enlace; Nodo (String n){ nombre = n;

enlace = null; } }

Nodo frente;Nodo fin;Cola_Lista(){ frente=null; fin=null;}public boolean vacia(){

return (frente == null);}

public boolean llena(){ return false; }

public void insertar (String e ){ Nodo n = new Nodo(e); if (this.vacia() ) { frente = n;

fin = n; } else {

fin.enlace= n; fin = n; }

} public String eliminar(){ Nodo n = frente;

if (frente != null) { frente = n.enlace;

if (frente==null) fin = null;

return n.nombre; }

else “ERROR”; //return null; // excepción }} // final de la clase

EjemploImplementación de una cola de datos String usando una lista

Page 60: Listas Lineales Estaticas y Dinamicas

Ejercicio

Implementar una pila usando una lista ligada.

La pila contiene números enteros.

Que elementos (datos) se requieren?

Que métodos se implementan?

tope 10 7 4 2

Page 61: Listas Lineales Estaticas y Dinamicas

class Pila_Lista {class Nodo{ Integer dato; Nodo enlace; Nodo (Integer n){ dato = n; enlace = null; }

}Nodo tope;Pila_Lista(){ tope=null;}public boolean vacia(){

return (tope == null);}

public boolean llena(){ return false; }

public Integer pop(){ if (tope != null) { Nodo n = tope; tope = tope.enlace; return n.dato; } else “ERROR”;

} public void push(Integer elem){ Nodo n = new Nodo(elem); n.enlace = tope; tope = n; }}

Implementación de una pila de datos Integer usando una lista

Page 62: Listas Lineales Estaticas y Dinamicas

Tipos parametrizados

• Define una clase para implementar una Pila/Cola usando una lista. Los datos que se almacenaran serán tipo Object.

• Que requiere un programa que use estas estructuras?

• Define una clase parametrizada para implementar una Pila usando una lista.

• Define una clase parametrizada para implementar una Cola usando una lista.

Page 63: Listas Lineales Estaticas y Dinamicas

LISTAS DOBLES

Una lista doble es una estructura lineal de elementos llamados nodos los cuales contienen dos campos de enlace: uno al elemento anterior y otro al elemento siguiente de la lista.

El primer nodo de la lista contiene nulo en su enlace al elemento anterior y el último nodo de la lista contiene nulo en su enlace al elemento siguiente.

Estructura del Nodo:Anterior Información Siguiente

public class Nodo{ // atributos Object informacion; Nodo anterior; Nodo siguiente; // el constructor de nodos Nodo (Object n){ informacion = n; anterior = null; siguiente = null; }}

Page 64: Listas Lineales Estaticas y Dinamicas

Ejemplos:

inicio = fin =

Lista Vacía

Lista de un solo elemento

inicio A B C

Lista de tres elementos

inicio A

fin

fin

Page 65: Listas Lineales Estaticas y Dinamicas

• Insertar: Agrega un elemento a la lista.• Eliminar: Retira un elemento de la lista.• Buscar: Busca un elemento en la lista.• Recorrer hacia adelante: Visita todos los elementos de la

lista desde el inicio hasta el final. • Recorrer hacia atrás: Visita todos los elementos de la lista

desde el final hasta el inicio. • Vacía: Indica si la lista contiene o no elementos.• Tamaño: Indica el número de elementos de la lista.

Con las operaciones anteriores, define una interfase para una lista doble que contiene datos de tipo Integer.

Operaciones con listas dobles

Page 66: Listas Lineales Estaticas y Dinamicas

public interface IListaDoble{ public void insertar(Integer elemento); public boolean eliminar(Integer elemento); public Integer eliminar(); public boolean buscar(Integer elemento); public String recorrer(); public boolean vacía(); public int tamaño(); }

Page 68: Listas Lineales Estaticas y Dinamicas

La clase LinkedList en Java

java.util Class LinkedList<E>java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.AbstractSequentialList<E> java.util.LinkedList<E> Type Parameters:

E - the type of elements held in this collectionAll Implemented Interfaces:

Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, Queue<E>

Page 69: Listas Lineales Estaticas y Dinamicas

Métodos de la clase LinkedList

Page 70: Listas Lineales Estaticas y Dinamicas

LISTAS ENLAZADAS CON CABECERA

Es una lista enlazada que contiene un nodo especial llamado nodo cabecera que se encuentra al inicio de la misma.

NODO CABECERA.- Es un nodo especial que no contiene información, solo se utiliza para indicar el inicio de los elementos de la lista.

La utilización de un nodo cabecera en listas enlazadas permiten que la implementación de los métodos de inserción y eliminación sea mas sencilla, ya que evitan tratar de forma explícita los casos especiales (insertar al inicio o eliminar el primer elemento). Sin embargo, requieren de un nodo extra en la lista (el nodo cabecera).

Page 71: Listas Lineales Estaticas y Dinamicas

TIPOS DE LISTA ENLAZADA CON CABECERA:

1)LISTA CON CABECERA Y “TIERRA”: Es una lista enlazada con cabecera, donde el apuntador

del último nodo contiene nulo.

2)LISTA CIRCULAR CON CABECERA: Es una lista enlazada con cabecera, donde el último

nodo contiene un apuntador hacia la cabecera.

Page 72: Listas Lineales Estaticas y Dinamicas

Representación:

1.- Lista simple c/cabecera y tierra:

Inicio

Nodo cabecera

2.- Lista circular c/cabecera:

Inicio

Nodo cabecera