SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
Pilas
Colas
Listas
Estructuras de datos: Pilas, Colas, Listas
Algoritmos
Facultad de Inform´atica
Universidad de A Coru˜na
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Table of Contents
1 Pilas
Pseudoc´odigo
C´odigo JAVA
2 Colas
Pseudoc´odigo
C´odigo JAVA
3 Listas
Pseudoc´odigo
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Table of Contents
1 Pilas
Pseudoc´odigo
C´odigo JAVA
2 Colas
Pseudoc´odigo
C´odigo JAVA
3 Listas
Pseudoc´odigo
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Pilas
Acceso limitado al ´ultimo elemento insertado
Operaciones b´asicas: apilar, desapilar y cima.
desapilar o cima en una pila vac´ıa es un error en el TDA pila.
Quedarse sin espacio al apilar es un error de implementaci´on.
Cada operaci´on deber´ıa tardar una cantidad constante de tiempo
en ejecutarse.
Con independencia del n´umero de elementos apiladas.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Implementaci´on a base de vectores (i)
tipo Pila = registro
Cima_de_pila : 0..Tama˜no_m´aximo_de_pila
Vector_de_pila : vector [1..Tama˜no_m´aximo_de_pila]
de Tipo_de_elemento
fin registro
procedimiento Crear Pila ( P )
P.Cima_de_pila := 0
fin procedimiento
funci´on Pila Vac´ıa ( P ) : test
devolver P.Cima_de_pila = 0
fin funci´on
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Implementaci´on a base de vectores (ii)
procedimiento Apilar ( x, P )
si P.Cima_de_pila = Tama˜no_m´aximo_de_pila entonces
error Pila llena
sino
P.Cima_de_pila := P.Cima_de_pila + 1;
P.Vector_de_pila[P.Cima_de_pila] := x
fin procedimiento
funci´on Cima ( P ) : Tipo_de_elemento
si Pila Vac´ıa (P) entonces error Pila vac´ıa
sino devolver P.Vector_de_pila[P.Cima de Pila]
fin funci´on
procedimiento Desapilar ( P )
si Pila Vac´ıa (P) entonces error Pila vac´ıa
sino P.Cima_de_pila := P.Cima_de_pila - 1
fin procedimiento
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
C´odigo JAVA: Interfaz Pila
// OPERACIONES P´UBLICAS
// void apilar(x) ->Inserta x
// void desapilar() ->Elimina el ´ultimo elemento insertado
// Object cima() ->Devuelve el ´ultimo elemento insertado
// boolean esVacia() ->Devuelve true si vac´ıa, sino false
// void vaciar() ->Elimina todos los elementos
// ERRORES: cima o desapilar sobre la pila vac´ıa
public interface IPila {
void apilar(Object x);
void desapilar() throws Exception;
Object cima() throws Exception;
boolean esVacia();
void vaciar();
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
C´odigo JAVA: Clase PilaVec (i)
import java.util.*;
public class PilaVec implements IPila {
private Vector p;
private int cimaDePila;
static final int CAPACIDAD_POR_DEFECTO = 10;
public PilaVec() {
p = new Vector(CAPACIDAD_POR_DEFECTO);
cimaDePila = -1;
}
public boolean esVacia() {
return (cimaDePila == -1);
}
public void vaciar() {
cimaDePila = -1;
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
C´odigo JAVA: Clase PilaVec (ii)
public void apilar(Object x) {
if (++cimaDePila == p.size()) p.add(x);
else p.set(cimaDePila, x);
}
public void desapilar() throws Exception {
if (esVacia()) throw new Exception("pila vac´ıa");
cimaDePila--;
}
public Object cima() throws Exception {
if (esVacia()) throw new Exception("pila vac´ıa");
return p.get(cimaDePila);
}
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Table of Contents
1 Pilas
Pseudoc´odigo
C´odigo JAVA
2 Colas
Pseudoc´odigo
C´odigo JAVA
3 Listas
Pseudoc´odigo
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Colas
Operaciones b´asicas: insertar, quitarPrimero y primero.
Cada rutina deber´ıa ejecutarse en tiempo constante.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Implementaci´on circular a base de vectores (i)
La implementaci´on circular devuelve cabeza y fin al principo del
vector cuando rebasan la ´ultima posici´on.
final
1) Crear Cola (C)
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Implementaci´on circular a base de vectores (i)
La implementaci´on circular devuelve cabeza y fin al principo del
vector cuando rebasan la ´ultima posici´on.
final
1) Crear Cola (C)
cabeza
final
2) Insertar en Cola (a,C) a
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Implementaci´on circular a base de vectores (i)
La implementaci´on circular devuelve cabeza y fin al principo del
vector cuando rebasan la ´ultima posici´on.
final
1) Crear Cola (C)
cabeza
final
2) Insertar en Cola (a,C) a
cabeza
final
3) Insertar en Cola (b,C) a b
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Implementaci´on circular a base de vectores (i)
final
4) Insertar en Cola (c,C) a b c
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Implementaci´on circular a base de vectores (i)
final
4) Insertar en Cola (c,C) a b c
cabeza
final
5) Insertar en Cola (d,C) a b c d
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Implementaci´on circular a base de vectores (i)
final
4) Insertar en Cola (c,C) a b c
cabeza
final
5) Insertar en Cola (d,C) a b c d
cabeza
final
6) Quitar Primero (C) b c d
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Implementaci´on circular a base de vectores (i)
final
4) Insertar en Cola (c,C) a b c
cabeza
final
5) Insertar en Cola (d,C) a b c d
cabeza
final
6) Quitar Primero (C) b c d
cabeza
final
7) Insertar en Cola (e,C) e b c d
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Pseudoc´odigo (i)
tipo Cola = registro
Cabeza_de_cola, Final_de_cola: 1..Tama˜no_m´aximo_de_cola
Tama˜no_de_cola : 0..Tama˜no_m´aximo_de_cola
Vector_de_cola : vector [1..Tama˜no_m´aximo_de_cola]
de Tipo_de_elemento
fin registro
procedimiento Crear_Cola ( C )
C.Tama˜no_de_cola := 0;
C.Cabeza_de_cola := 1;
C.Final_de_cola := Tama˜no_m´aximo_de_cola
fin procedimiento
funci´on Cola_Vac´ıa ( C ) : test
devolver C.Tama˜no_de_cola = 0
fin funci´on
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Pseudoc´odigo (ii)
procedimiento incrementar ( x ) (* privado *)
si x = Tama˜no_m´aximo_de_cola entonces x := 1
sino x := x + 1
fin procedimiento
procedimiento Insertar_en_Cola ( x, C )
si C.Tama˜no_de_Cola = Tama˜no_m´aximo_de_cola entonces
error Cola llena
sino
C.Tama˜no_de_cola := C.Tama˜no_de_cola + 1;
incrementar(C.Final_de_cola);
C.Vector_de_cola[C.Final_de_cola] := x;
fin procedimiento
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Pseudoc´odigo (iii)
funci´on Quitar_Primero ( C ) : Tipo_de_elemento
si Cola_Vac´ıa ( C ) entonces
error Cola vac´ıa
sino
C.Tama˜no_de_cola := C.Tama˜no_de_cola - 1;
x := C.Vector_de_cola[C.Cabeza_de_cola];
incrementar(C.Cabeza_de_cola);
devolver x
fin funci´on
funci´on Primero ( C ) : Tipo_de_elemento
si Cola_Vac´ıa ( C ) entonces
error Cola vac´ıa
sino
devolver Vector_de_cola[C.Cabeza_de_cola]
fin funci´on
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
C´odigo JAVA: Interfaz Cola
// OPERACIONES P´UBLICAS
// void insertar(x) -> Inserta x
// Object primero() -> Devuelve el primer elemento
// Object quitarPrimero() -> Devuelve y elimina el primer el
// boolean esVacia() -> Devuelve true si vac´ıa, si no false
// void vaciar() -> Elimina todos los elementos
// ERRORES: primer y quitarPrimero sobre una cola vac´ıa
public interface ICola {
void insertar(Object x);
Object primero() throws Exception;
Object quitarPrimero() throws Exception;
boolean esVacia();
void vaciar();
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
C´odigo JAVA: Clase ColasVec (i)
public class ColaVec implements ICola {
private Object [] vector;
private int tamanoActual;
private int cabezaDeCola;
private int finalDeCola;
static final int CAPACIDAD_POR_DEFECTO = 10;
public ColaVec() {
vector = new Object[CAPACIDAD_POR_DEFECTO];
vaciar();
}
public void vaciar() {
tamanoActual = 0;
cabezaDeCola = 0;
finalDeCola = -1;
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
C´odigo JAVA: Clase ColaVec (ii)
public boolean esVacia() {
return (tamanoActual == 0);
}
public Object primero() throws Exception {
if (esVacia()) throw new Exception("cola vac´ıa");
return vector[cabezaDeCola];
}
private int incrementar(int x) {
if (++x == vector.length)
x = 0;
return x;
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
C´odigo JAVA: Clase ColaVec (iii)
public Object quitarPrimero() throws Exception {
if (esVacia())
throw new Exception("cola vac´ıa");
tamanoActual--;
Object valorDevuelto = vector[cabezaDeCola];
cabezaDeCola = incrementar(cabezaDeCola);
return valorDevuelto;
}
public void insertar(Object x) {
if (tamanoActual == vector.length)
duplicarCola();
finalDeCola = incrementar(finalDeCola);
vector[finalDeCola] = x;
tamanoActual++;
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
C´odigo JAVA: Clase ColaVec (iv)
private void duplicarCola() {
Object [] nuevoVector =
new Object[2*vector.length];
for (int i=0; i<tamanoActual; i++,
cabezaDeCola = incrementar(cabezaDeCola))
nuevoVector[i] = vector[cabezaDeCola];
vector = nuevoVector;
cabezaDeCola = 0;
finalDeCola = tamanoActual - 1;
}
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
C´odigo JAVA
Amortizaci´on de la duplicaci´on del vector
Cuando el vector no se duplica, toda operaci´on se realiza
en tiempo constante.
La complejidad de una inserci´on con duplicaci´on es O(N).
La duplicaci´on de un vector de N elementos est´a precedida,
al menos, por N/2 inserciones que no duplican el vector.
Repartiendo el coste O(N) de la duplicaci´on
entre las inserciones precedentes,
el coste de insertar aumenta s´olo en una constante.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
Table of Contents
1 Pilas
Pseudoc´odigo
C´odigo JAVA
2 Colas
Pseudoc´odigo
C´odigo JAVA
3 Listas
Pseudoc´odigo
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
Listas
Operaciones b´asicas:
Visualizar su contenido.
Buscar la posici´on de la primera ocurrencia de un elemento.
Insertar y Eliminar un elemento en alguna posici´on.
Buscar k esimo, que devuelve el elemento
de la posici´on indicada
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
Implementaci´on de listas a base de vectores
Tiene que declararse el tama˜no de la lista.
Exige sobrevaloraci´on.
Consume mucho espacio.
Complejidad computacional de las operaciones:
Buscar k esimo, tiempo constante
Visualizar y Buscar, tiempo lineal.
Insertar y Eliminar son costosas.
Insertar o eliminar un elemento exige, en promedio,
desplazar la mitad de los valores, O(n).
La construcci´on de una lista o la eliminaci´on
de todos sus elementos podr´ıa exigir un tiempo cuadr´atico.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
Implementaci´on de listas a base de apuntadores
Cada nodo apunta al siguiente; el ´ultimo no apunta a nada.
La lista es un puntero al primer nodo (y al ´ultimo).
Complejidad computacional de las operaciones:
Visualizar y Buscar, tiempo lineal.
Buscar k esimo, tiempo lineal.
Eliminar realiza un cambio de apuntadores y
una orden dispose, O(1).
Usa Buscar anterior cuyo tiempo de ejecuci´on es lineal.
Insertar tras una posici´on p require una llamada a new y
dos maniobras con apuntadores, O(1).
Buscar la posici´on p podr´ıa llevar tiempo lineal.
Un nodo cabecera facilita la inserci´on y la eliminaci´on al comienzo
de la lista.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
Implementaci´on de listas doblemente enlazadas
Cada nodo apunta al siguiente y al anterior.
Duplica el uso de la memoria necesaria para los punteros.
Duplica el coste de manejo de punteros al insertar y eliminar.
La eliminaci´on se simplifica.
No es necesario buscar el elemento anterior.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
Implementaci´on con un nodo cabecera (i)
tipo PNodo = puntero a Nodo
Lista = PNodo
Posici´on = PNodo
Nodo = registro
Elemento : Tipo_de_elemento
Siguiente : PNodo
fin registro
procedimiento Crear Lista ( L )
nuevo ( tmp );
si tmp = nil entonces error Memoria agotada
sino
tmpˆ.Elemento := { nodo cabecera };
tmpˆ.Siguiente := nil;
L := tmp
fin procedimiento
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
Implementaci´on con un nodo cabecera (ii)
funci´on Lista Vac´ıa ( L ) : test
devolver Lˆ.Siguiente = nil
fin funci´on
funci´on Buscar ( x, L ) : posici´on de la 1a ocurrencia
o nil
p := Lˆ.Siguiente;
mientras p <> nil y pˆ.Elemento <> x hacer
p := pˆ.Siguiente;
devolver p
fin funci´on
funci´on ´Ultimo Elemento ( p ) : test { privada }
devolver pˆ.Siguiente = nil
fin funci´on
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
Implementaci´on con un nodo cabecera (iii)
funci´on Buscar Anterior ( x, L ) : posici´on anterior a x
o a nil { privada }
p := L;
mientras pˆ.Siguiente <> nil y
pˆ.Siguienteˆ.Elemento <> x hacer
p := pˆ.Siguiente;
devolver p
fin funci´on
procedimiento Eliminar ( x, L )
p := Buscar Anterior ( x, L );
si ´Ultimo Elemento ( p ) entonces error No encontrado
sino tmp := pˆ.Siguiente;
pˆ.Siguiente := tmpˆ.Siguiente;
liberar ( tmp )
fin procedimiento
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo
Implementaci´on con un nodo cabecera (iv)
procedimiento Insertar ( x, L, p )
nuevo ( tmp ); { Inserta despu´es de la posici´on p }
si tmp = nil entonces
error Memoria agotada
sino
tmpˆ.Elemento := x;
tmpˆ.Siguiente := pˆ.Siguiente:
pˆ.Siguiente := tmp
fin procedimiento
Algoritmos Pilas, Colas, Listas

Contenu connexe

Tendances

Tendances (20)

Colas
ColasColas
Colas
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pila
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Codigo para implementar pilas en java
Codigo para implementar pilas en javaCodigo para implementar pilas en java
Codigo para implementar pilas en java
 
Pilas En C++
Pilas En C++Pilas En C++
Pilas En C++
 
Pilas
PilasPilas
Pilas
 
Estructura de datos I pilas
Estructura de datos I pilasEstructura de datos I pilas
Estructura de datos I pilas
 
Pilas
PilasPilas
Pilas
 
Listasenlazadas 100517143015-phpapp02
Listasenlazadas 100517143015-phpapp02Listasenlazadas 100517143015-phpapp02
Listasenlazadas 100517143015-phpapp02
 
Listas Pilas Colas
Listas Pilas ColasListas Pilas Colas
Listas Pilas Colas
 
Pilas y Colas
Pilas y ColasPilas y Colas
Pilas y Colas
 
Estructura de datos. listas, pilas y colas
Estructura de datos. listas, pilas y colasEstructura de datos. listas, pilas y colas
Estructura de datos. listas, pilas y colas
 
2- TDA Listas
2- TDA Listas2- TDA Listas
2- TDA Listas
 
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Pila dinamica y pila estatica
Pila dinamica y pila estaticaPila dinamica y pila estatica
Pila dinamica y pila estatica
 
Presentacion de Listas, Pilas y Colas
Presentacion de Listas, Pilas y ColasPresentacion de Listas, Pilas y Colas
Presentacion de Listas, Pilas y Colas
 
Estructuras dinámicas
Estructuras dinámicasEstructuras dinámicas
Estructuras dinámicas
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 

En vedette

En vedette (9)

Pilotes de acero
Pilotes de acero Pilotes de acero
Pilotes de acero
 
Cimentacion con pilotes
Cimentacion  con  pilotesCimentacion  con  pilotes
Cimentacion con pilotes
 
03 pilotes
03 pilotes03 pilotes
03 pilotes
 
Mecánica de Suelos - Pilotes de concreto
Mecánica de Suelos - Pilotes de concretoMecánica de Suelos - Pilotes de concreto
Mecánica de Suelos - Pilotes de concreto
 
Pilotes de Acero
Pilotes de AceroPilotes de Acero
Pilotes de Acero
 
Manual cimentaciones profundas cmic 2009
Manual cimentaciones profundas cmic 2009Manual cimentaciones profundas cmic 2009
Manual cimentaciones profundas cmic 2009
 
Pilotes
PilotesPilotes
Pilotes
 
Construcción de obras (pilotes)
Construcción de obras (pilotes)Construcción de obras (pilotes)
Construcción de obras (pilotes)
 
Cimentaciones Profundas 1
Cimentaciones Profundas 1Cimentaciones Profundas 1
Cimentaciones Profundas 1
 

Similaire à Tema 2.1 -_pilas,_colas_y_listas

Pilas colas listas
Pilas colas listasPilas colas listas
Pilas colas listastazmania2
 
Clase8 innerclasses
Clase8 innerclassesClase8 innerclasses
Clase8 innerclassesjorg_marq
 
Unidad iii Pilas y colas
Unidad iii Pilas y colasUnidad iii Pilas y colas
Unidad iii Pilas y colasCecilia Loeza
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datosjubacalo
 
Ireport con javabeans
Ireport con javabeansIreport con javabeans
Ireport con javabeansJuank Samueza
 
El Lado Cool de Java
El Lado Cool de JavaEl Lado Cool de Java
El Lado Cool de JavaLeonardo Soto
 
Comunicacion Java Envio De Datos Al Puerto Paralelo
Comunicacion Java Envio De Datos Al Puerto ParaleloComunicacion Java Envio De Datos Al Puerto Paralelo
Comunicacion Java Envio De Datos Al Puerto ParaleloMauro Gomez Mejia
 
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
3 desarollo manejo datos capitulo 4 -02 aplicaciones coleccionesluis freddy
 
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...Aragón Open Data
 
Prueba regresion lineal
Prueba regresion linealPrueba regresion lineal
Prueba regresion linealThe Killer
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swiftbetabeers
 

Similaire à Tema 2.1 -_pilas,_colas_y_listas (20)

Pilas colas listas
Pilas colas listasPilas colas listas
Pilas colas listas
 
Colas
ColasColas
Colas
 
Unidad iii pilas y colas
Unidad iii pilas y colasUnidad iii pilas y colas
Unidad iii pilas y colas
 
Pilas
PilasPilas
Pilas
 
Pilas
PilasPilas
Pilas
 
Pilas
PilasPilas
Pilas
 
S6-EDD-3.2 Pilas y colas
S6-EDD-3.2 Pilas y colasS6-EDD-3.2 Pilas y colas
S6-EDD-3.2 Pilas y colas
 
Clase8 innerclasses
Clase8 innerclassesClase8 innerclasses
Clase8 innerclasses
 
Unidad iii Pilas y colas
Unidad iii Pilas y colasUnidad iii Pilas y colas
Unidad iii Pilas y colas
 
Ejercicio ADA: Ocultación de Información en ADA
Ejercicio ADA: Ocultación de Información en ADAEjercicio ADA: Ocultación de Información en ADA
Ejercicio ADA: Ocultación de Información en ADA
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
 
Ireport con javabeans
Ireport con javabeansIreport con javabeans
Ireport con javabeans
 
El Lado Cool de Java
El Lado Cool de JavaEl Lado Cool de Java
El Lado Cool de Java
 
Comunicacion Java Envio De Datos Al Puerto Paralelo
Comunicacion Java Envio De Datos Al Puerto ParaleloComunicacion Java Envio De Datos Al Puerto Paralelo
Comunicacion Java Envio De Datos Al Puerto Paralelo
 
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
 
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
 
Prueba regresion lineal
Prueba regresion linealPrueba regresion lineal
Prueba regresion lineal
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
 
12.gráficos y bases de datos
12.gráficos y bases de datos12.gráficos y bases de datos
12.gráficos y bases de datos
 
Pilas colas
Pilas colasPilas colas
Pilas colas
 

Dernier

137489674-Regimenes-Tributarios-MYPES-ppt.ppt
137489674-Regimenes-Tributarios-MYPES-ppt.ppt137489674-Regimenes-Tributarios-MYPES-ppt.ppt
137489674-Regimenes-Tributarios-MYPES-ppt.pptALEJANDRAKATHERINESA
 
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdf
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdfEXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdf
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdfRosiClaros
 
La Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdfLa Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdfelabarbosa396
 
Home Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todosHome Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todosDebora Gomez Bertoli
 
Patrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptxPatrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptxErandiCamperoBojorge
 
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdfRosiClaros
 
Tema 2 Arquitectura del computador - Ing David Ribera.ppt
Tema 2 Arquitectura del computador - Ing David Ribera.pptTema 2 Arquitectura del computador - Ing David Ribera.ppt
Tema 2 Arquitectura del computador - Ing David Ribera.pptKerryElSistemaInvher
 
Fundamentos de Ensamblaje de Sistemas informáticos.pptx
Fundamentos de Ensamblaje de Sistemas informáticos.pptxFundamentos de Ensamblaje de Sistemas informáticos.pptx
Fundamentos de Ensamblaje de Sistemas informáticos.pptxJulian Flores
 
El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.SEAT
 
TEORIA CONTINGENCIAL Precursores y Aportes a la Administración
TEORIA CONTINGENCIAL Precursores y Aportes a la AdministraciónTEORIA CONTINGENCIAL Precursores y Aportes a la Administración
TEORIA CONTINGENCIAL Precursores y Aportes a la AdministraciónCUSICANQUIRAMREZLADY
 
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptxRosiClaros
 
La Displasia Ectodérmica en Bolivia .pptx
La Displasia Ectodérmica en Bolivia .pptxLa Displasia Ectodérmica en Bolivia .pptx
La Displasia Ectodérmica en Bolivia .pptxcruzjavi733
 

Dernier (12)

137489674-Regimenes-Tributarios-MYPES-ppt.ppt
137489674-Regimenes-Tributarios-MYPES-ppt.ppt137489674-Regimenes-Tributarios-MYPES-ppt.ppt
137489674-Regimenes-Tributarios-MYPES-ppt.ppt
 
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdf
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdfEXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdf
EXPOSICION_REGLAMENO_DE_EVALUACIÓN_RM._190.pdf
 
La Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdfLa Electricidad y la Electrónica gabriela (1).pdf
La Electricidad y la Electrónica gabriela (1).pdf
 
Home Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todosHome Assistant - Un Hub para controlarlos a todos
Home Assistant - Un Hub para controlarlos a todos
 
Patrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptxPatrones Funcionales de Marjory Gordon.pptx
Patrones Funcionales de Marjory Gordon.pptx
 
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pdf
 
Tema 2 Arquitectura del computador - Ing David Ribera.ppt
Tema 2 Arquitectura del computador - Ing David Ribera.pptTema 2 Arquitectura del computador - Ing David Ribera.ppt
Tema 2 Arquitectura del computador - Ing David Ribera.ppt
 
Fundamentos de Ensamblaje de Sistemas informáticos.pptx
Fundamentos de Ensamblaje de Sistemas informáticos.pptxFundamentos de Ensamblaje de Sistemas informáticos.pptx
Fundamentos de Ensamblaje de Sistemas informáticos.pptx
 
El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.El uso de las T I C en la vida cotidiana.
El uso de las T I C en la vida cotidiana.
 
TEORIA CONTINGENCIAL Precursores y Aportes a la Administración
TEORIA CONTINGENCIAL Precursores y Aportes a la AdministraciónTEORIA CONTINGENCIAL Precursores y Aportes a la Administración
TEORIA CONTINGENCIAL Precursores y Aportes a la Administración
 
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
644400074-LA-CONSOLIDACION-DE-LA-REPUBLICA-OLIGARQUICA-pdf.pptx
 
La Displasia Ectodérmica en Bolivia .pptx
La Displasia Ectodérmica en Bolivia .pptxLa Displasia Ectodérmica en Bolivia .pptx
La Displasia Ectodérmica en Bolivia .pptx
 

Tema 2.1 -_pilas,_colas_y_listas

  • 1. Pilas Colas Listas Estructuras de datos: Pilas, Colas, Listas Algoritmos Facultad de Inform´atica Universidad de A Coru˜na Algoritmos Pilas, Colas, Listas
  • 2. Pilas Colas Listas Table of Contents 1 Pilas Pseudoc´odigo C´odigo JAVA 2 Colas Pseudoc´odigo C´odigo JAVA 3 Listas Pseudoc´odigo Algoritmos Pilas, Colas, Listas
  • 3. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Table of Contents 1 Pilas Pseudoc´odigo C´odigo JAVA 2 Colas Pseudoc´odigo C´odigo JAVA 3 Listas Pseudoc´odigo Algoritmos Pilas, Colas, Listas
  • 4. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Pilas Acceso limitado al ´ultimo elemento insertado Operaciones b´asicas: apilar, desapilar y cima. desapilar o cima en una pila vac´ıa es un error en el TDA pila. Quedarse sin espacio al apilar es un error de implementaci´on. Cada operaci´on deber´ıa tardar una cantidad constante de tiempo en ejecutarse. Con independencia del n´umero de elementos apiladas. Algoritmos Pilas, Colas, Listas
  • 5. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Implementaci´on a base de vectores (i) tipo Pila = registro Cima_de_pila : 0..Tama˜no_m´aximo_de_pila Vector_de_pila : vector [1..Tama˜no_m´aximo_de_pila] de Tipo_de_elemento fin registro procedimiento Crear Pila ( P ) P.Cima_de_pila := 0 fin procedimiento funci´on Pila Vac´ıa ( P ) : test devolver P.Cima_de_pila = 0 fin funci´on Algoritmos Pilas, Colas, Listas
  • 6. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Implementaci´on a base de vectores (ii) procedimiento Apilar ( x, P ) si P.Cima_de_pila = Tama˜no_m´aximo_de_pila entonces error Pila llena sino P.Cima_de_pila := P.Cima_de_pila + 1; P.Vector_de_pila[P.Cima_de_pila] := x fin procedimiento funci´on Cima ( P ) : Tipo_de_elemento si Pila Vac´ıa (P) entonces error Pila vac´ıa sino devolver P.Vector_de_pila[P.Cima de Pila] fin funci´on procedimiento Desapilar ( P ) si Pila Vac´ıa (P) entonces error Pila vac´ıa sino P.Cima_de_pila := P.Cima_de_pila - 1 fin procedimiento Algoritmos Pilas, Colas, Listas
  • 7. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA C´odigo JAVA: Interfaz Pila // OPERACIONES P´UBLICAS // void apilar(x) ->Inserta x // void desapilar() ->Elimina el ´ultimo elemento insertado // Object cima() ->Devuelve el ´ultimo elemento insertado // boolean esVacia() ->Devuelve true si vac´ıa, sino false // void vaciar() ->Elimina todos los elementos // ERRORES: cima o desapilar sobre la pila vac´ıa public interface IPila { void apilar(Object x); void desapilar() throws Exception; Object cima() throws Exception; boolean esVacia(); void vaciar(); } Algoritmos Pilas, Colas, Listas
  • 8. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA C´odigo JAVA: Clase PilaVec (i) import java.util.*; public class PilaVec implements IPila { private Vector p; private int cimaDePila; static final int CAPACIDAD_POR_DEFECTO = 10; public PilaVec() { p = new Vector(CAPACIDAD_POR_DEFECTO); cimaDePila = -1; } public boolean esVacia() { return (cimaDePila == -1); } public void vaciar() { cimaDePila = -1; } Algoritmos Pilas, Colas, Listas
  • 9. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA C´odigo JAVA: Clase PilaVec (ii) public void apilar(Object x) { if (++cimaDePila == p.size()) p.add(x); else p.set(cimaDePila, x); } public void desapilar() throws Exception { if (esVacia()) throw new Exception("pila vac´ıa"); cimaDePila--; } public Object cima() throws Exception { if (esVacia()) throw new Exception("pila vac´ıa"); return p.get(cimaDePila); } } Algoritmos Pilas, Colas, Listas
  • 10. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Table of Contents 1 Pilas Pseudoc´odigo C´odigo JAVA 2 Colas Pseudoc´odigo C´odigo JAVA 3 Listas Pseudoc´odigo Algoritmos Pilas, Colas, Listas
  • 11. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Colas Operaciones b´asicas: insertar, quitarPrimero y primero. Cada rutina deber´ıa ejecutarse en tiempo constante. Algoritmos Pilas, Colas, Listas
  • 12. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Implementaci´on circular a base de vectores (i) La implementaci´on circular devuelve cabeza y fin al principo del vector cuando rebasan la ´ultima posici´on. final 1) Crear Cola (C) cabeza Algoritmos Pilas, Colas, Listas
  • 13. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Implementaci´on circular a base de vectores (i) La implementaci´on circular devuelve cabeza y fin al principo del vector cuando rebasan la ´ultima posici´on. final 1) Crear Cola (C) cabeza final 2) Insertar en Cola (a,C) a cabeza Algoritmos Pilas, Colas, Listas
  • 14. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Implementaci´on circular a base de vectores (i) La implementaci´on circular devuelve cabeza y fin al principo del vector cuando rebasan la ´ultima posici´on. final 1) Crear Cola (C) cabeza final 2) Insertar en Cola (a,C) a cabeza final 3) Insertar en Cola (b,C) a b cabeza Algoritmos Pilas, Colas, Listas
  • 15. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Implementaci´on circular a base de vectores (i) final 4) Insertar en Cola (c,C) a b c cabeza Algoritmos Pilas, Colas, Listas
  • 16. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Implementaci´on circular a base de vectores (i) final 4) Insertar en Cola (c,C) a b c cabeza final 5) Insertar en Cola (d,C) a b c d cabeza Algoritmos Pilas, Colas, Listas
  • 17. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Implementaci´on circular a base de vectores (i) final 4) Insertar en Cola (c,C) a b c cabeza final 5) Insertar en Cola (d,C) a b c d cabeza final 6) Quitar Primero (C) b c d cabeza Algoritmos Pilas, Colas, Listas
  • 18. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Implementaci´on circular a base de vectores (i) final 4) Insertar en Cola (c,C) a b c cabeza final 5) Insertar en Cola (d,C) a b c d cabeza final 6) Quitar Primero (C) b c d cabeza final 7) Insertar en Cola (e,C) e b c d cabeza Algoritmos Pilas, Colas, Listas
  • 19. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Pseudoc´odigo (i) tipo Cola = registro Cabeza_de_cola, Final_de_cola: 1..Tama˜no_m´aximo_de_cola Tama˜no_de_cola : 0..Tama˜no_m´aximo_de_cola Vector_de_cola : vector [1..Tama˜no_m´aximo_de_cola] de Tipo_de_elemento fin registro procedimiento Crear_Cola ( C ) C.Tama˜no_de_cola := 0; C.Cabeza_de_cola := 1; C.Final_de_cola := Tama˜no_m´aximo_de_cola fin procedimiento funci´on Cola_Vac´ıa ( C ) : test devolver C.Tama˜no_de_cola = 0 fin funci´on Algoritmos Pilas, Colas, Listas
  • 20. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Pseudoc´odigo (ii) procedimiento incrementar ( x ) (* privado *) si x = Tama˜no_m´aximo_de_cola entonces x := 1 sino x := x + 1 fin procedimiento procedimiento Insertar_en_Cola ( x, C ) si C.Tama˜no_de_Cola = Tama˜no_m´aximo_de_cola entonces error Cola llena sino C.Tama˜no_de_cola := C.Tama˜no_de_cola + 1; incrementar(C.Final_de_cola); C.Vector_de_cola[C.Final_de_cola] := x; fin procedimiento Algoritmos Pilas, Colas, Listas
  • 21. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Pseudoc´odigo (iii) funci´on Quitar_Primero ( C ) : Tipo_de_elemento si Cola_Vac´ıa ( C ) entonces error Cola vac´ıa sino C.Tama˜no_de_cola := C.Tama˜no_de_cola - 1; x := C.Vector_de_cola[C.Cabeza_de_cola]; incrementar(C.Cabeza_de_cola); devolver x fin funci´on funci´on Primero ( C ) : Tipo_de_elemento si Cola_Vac´ıa ( C ) entonces error Cola vac´ıa sino devolver Vector_de_cola[C.Cabeza_de_cola] fin funci´on Algoritmos Pilas, Colas, Listas
  • 22. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA C´odigo JAVA: Interfaz Cola // OPERACIONES P´UBLICAS // void insertar(x) -> Inserta x // Object primero() -> Devuelve el primer elemento // Object quitarPrimero() -> Devuelve y elimina el primer el // boolean esVacia() -> Devuelve true si vac´ıa, si no false // void vaciar() -> Elimina todos los elementos // ERRORES: primer y quitarPrimero sobre una cola vac´ıa public interface ICola { void insertar(Object x); Object primero() throws Exception; Object quitarPrimero() throws Exception; boolean esVacia(); void vaciar(); } Algoritmos Pilas, Colas, Listas
  • 23. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA C´odigo JAVA: Clase ColasVec (i) public class ColaVec implements ICola { private Object [] vector; private int tamanoActual; private int cabezaDeCola; private int finalDeCola; static final int CAPACIDAD_POR_DEFECTO = 10; public ColaVec() { vector = new Object[CAPACIDAD_POR_DEFECTO]; vaciar(); } public void vaciar() { tamanoActual = 0; cabezaDeCola = 0; finalDeCola = -1; } Algoritmos Pilas, Colas, Listas
  • 24. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA C´odigo JAVA: Clase ColaVec (ii) public boolean esVacia() { return (tamanoActual == 0); } public Object primero() throws Exception { if (esVacia()) throw new Exception("cola vac´ıa"); return vector[cabezaDeCola]; } private int incrementar(int x) { if (++x == vector.length) x = 0; return x; } Algoritmos Pilas, Colas, Listas
  • 25. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA C´odigo JAVA: Clase ColaVec (iii) public Object quitarPrimero() throws Exception { if (esVacia()) throw new Exception("cola vac´ıa"); tamanoActual--; Object valorDevuelto = vector[cabezaDeCola]; cabezaDeCola = incrementar(cabezaDeCola); return valorDevuelto; } public void insertar(Object x) { if (tamanoActual == vector.length) duplicarCola(); finalDeCola = incrementar(finalDeCola); vector[finalDeCola] = x; tamanoActual++; } Algoritmos Pilas, Colas, Listas
  • 26. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA C´odigo JAVA: Clase ColaVec (iv) private void duplicarCola() { Object [] nuevoVector = new Object[2*vector.length]; for (int i=0; i<tamanoActual; i++, cabezaDeCola = incrementar(cabezaDeCola)) nuevoVector[i] = vector[cabezaDeCola]; vector = nuevoVector; cabezaDeCola = 0; finalDeCola = tamanoActual - 1; } } Algoritmos Pilas, Colas, Listas
  • 27. Pilas Colas Listas Pseudoc´odigo C´odigo JAVA Amortizaci´on de la duplicaci´on del vector Cuando el vector no se duplica, toda operaci´on se realiza en tiempo constante. La complejidad de una inserci´on con duplicaci´on es O(N). La duplicaci´on de un vector de N elementos est´a precedida, al menos, por N/2 inserciones que no duplican el vector. Repartiendo el coste O(N) de la duplicaci´on entre las inserciones precedentes, el coste de insertar aumenta s´olo en una constante. Algoritmos Pilas, Colas, Listas
  • 28. Pilas Colas Listas Pseudoc´odigo Table of Contents 1 Pilas Pseudoc´odigo C´odigo JAVA 2 Colas Pseudoc´odigo C´odigo JAVA 3 Listas Pseudoc´odigo Algoritmos Pilas, Colas, Listas
  • 29. Pilas Colas Listas Pseudoc´odigo Listas Operaciones b´asicas: Visualizar su contenido. Buscar la posici´on de la primera ocurrencia de un elemento. Insertar y Eliminar un elemento en alguna posici´on. Buscar k esimo, que devuelve el elemento de la posici´on indicada Algoritmos Pilas, Colas, Listas
  • 30. Pilas Colas Listas Pseudoc´odigo Implementaci´on de listas a base de vectores Tiene que declararse el tama˜no de la lista. Exige sobrevaloraci´on. Consume mucho espacio. Complejidad computacional de las operaciones: Buscar k esimo, tiempo constante Visualizar y Buscar, tiempo lineal. Insertar y Eliminar son costosas. Insertar o eliminar un elemento exige, en promedio, desplazar la mitad de los valores, O(n). La construcci´on de una lista o la eliminaci´on de todos sus elementos podr´ıa exigir un tiempo cuadr´atico. Algoritmos Pilas, Colas, Listas
  • 31. Pilas Colas Listas Pseudoc´odigo Implementaci´on de listas a base de apuntadores Cada nodo apunta al siguiente; el ´ultimo no apunta a nada. La lista es un puntero al primer nodo (y al ´ultimo). Complejidad computacional de las operaciones: Visualizar y Buscar, tiempo lineal. Buscar k esimo, tiempo lineal. Eliminar realiza un cambio de apuntadores y una orden dispose, O(1). Usa Buscar anterior cuyo tiempo de ejecuci´on es lineal. Insertar tras una posici´on p require una llamada a new y dos maniobras con apuntadores, O(1). Buscar la posici´on p podr´ıa llevar tiempo lineal. Un nodo cabecera facilita la inserci´on y la eliminaci´on al comienzo de la lista. Algoritmos Pilas, Colas, Listas
  • 32. Pilas Colas Listas Pseudoc´odigo Implementaci´on de listas doblemente enlazadas Cada nodo apunta al siguiente y al anterior. Duplica el uso de la memoria necesaria para los punteros. Duplica el coste de manejo de punteros al insertar y eliminar. La eliminaci´on se simplifica. No es necesario buscar el elemento anterior. Algoritmos Pilas, Colas, Listas
  • 33. Pilas Colas Listas Pseudoc´odigo Implementaci´on con un nodo cabecera (i) tipo PNodo = puntero a Nodo Lista = PNodo Posici´on = PNodo Nodo = registro Elemento : Tipo_de_elemento Siguiente : PNodo fin registro procedimiento Crear Lista ( L ) nuevo ( tmp ); si tmp = nil entonces error Memoria agotada sino tmpˆ.Elemento := { nodo cabecera }; tmpˆ.Siguiente := nil; L := tmp fin procedimiento Algoritmos Pilas, Colas, Listas
  • 34. Pilas Colas Listas Pseudoc´odigo Implementaci´on con un nodo cabecera (ii) funci´on Lista Vac´ıa ( L ) : test devolver Lˆ.Siguiente = nil fin funci´on funci´on Buscar ( x, L ) : posici´on de la 1a ocurrencia o nil p := Lˆ.Siguiente; mientras p <> nil y pˆ.Elemento <> x hacer p := pˆ.Siguiente; devolver p fin funci´on funci´on ´Ultimo Elemento ( p ) : test { privada } devolver pˆ.Siguiente = nil fin funci´on Algoritmos Pilas, Colas, Listas
  • 35. Pilas Colas Listas Pseudoc´odigo Implementaci´on con un nodo cabecera (iii) funci´on Buscar Anterior ( x, L ) : posici´on anterior a x o a nil { privada } p := L; mientras pˆ.Siguiente <> nil y pˆ.Siguienteˆ.Elemento <> x hacer p := pˆ.Siguiente; devolver p fin funci´on procedimiento Eliminar ( x, L ) p := Buscar Anterior ( x, L ); si ´Ultimo Elemento ( p ) entonces error No encontrado sino tmp := pˆ.Siguiente; pˆ.Siguiente := tmpˆ.Siguiente; liberar ( tmp ) fin procedimiento Algoritmos Pilas, Colas, Listas
  • 36. Pilas Colas Listas Pseudoc´odigo Implementaci´on con un nodo cabecera (iv) procedimiento Insertar ( x, L, p ) nuevo ( tmp ); { Inserta despu´es de la posici´on p } si tmp = nil entonces error Memoria agotada sino tmpˆ.Elemento := x; tmpˆ.Siguiente := pˆ.Siguiente: pˆ.Siguiente := tmp fin procedimiento Algoritmos Pilas, Colas, Listas