Pilas Colas Listas

Estructuras de datos: Pilas, Colas, Listas
Algoritmos
´ Facultad de Informatica ˜ Universidad de A Coruna

Algoritmos

Pilas, Colas, Listas

Pilas Colas Listas

Table of Contents

1

Pilas ´ Pseudocodigo ´ Codigo J AVA Colas ´ Pseudocodigo ´ Codigo J AVA Listas ´ Pseudocodigo

2

3

Algoritmos

Pilas, Colas, Listas

Pilas Colas Listas

´ Pseudocodigo ´ Codigo J AVA

Table of Contents

1

Pilas ´ Pseudocodigo ´ Codigo J AVA Colas ´ Pseudocodigo ´ Codigo J AVA Listas ´ Pseudocodigo

2

3

Algoritmos

Pilas, Colas, Listas

´ Algoritmos Pilas. Colas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA Pilas Acceso limitado al ultimo elemento insertado ´ ´ Operaciones basicas: apilar. Con independencia del numero de elementos apiladas. Listas . desapilar o cima en una pila vac´a es un error en el TDA pila. ´ Cada operacion deber´a tardar una cantidad constante de tiempo ı en ejecutarse. ı ´ Quedarse sin espacio al apilar es un error de implementacion. desapilar y cima.

Cima_de_pila = 0 fin funci´n o Algoritmos Pilas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Implementacion a base de vectores (i) tipo Pila = registro Cima_de_pila : 0.. Listas .Tama˜o_m´ximo_de_pila n a Vector_de_pila : vector [1. Colas.Cima_de_pila := 0 fin procedimiento funci´n Pila Vac´a ( P ) : test o ı devolver P..Tama˜o_m´ximo_de_pila] n a de Tipo_de_elemento fin registro procedimiento Crear Pila ( P ) P.

Colas.Cima_de_pila := P.Cima_de_pila = Tama˜o_m´ximo_de_pila entonces n a error Pila llena sino P.1 fin procedimiento Algoritmos Pilas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Implementacion a base de vectores (ii) procedimiento Apilar ( x.Cima_de_pila := P.Vector_de_pila[P. P.Cima_de_pila] := x fin procedimiento funci´n Cima ( P ) : Tipo_de_elemento o si Pila Vac´a (P) entonces error Pila vac´a ı ı sino devolver P.Cima_de_pila . P ) si P.Vector_de_pila[P. Listas .Cima de Pila] fin funci´n o procedimiento Desapilar ( P ) si Pila Vac´a (P) entonces error Pila vac´a ı ı sino P.Cima_de_pila + 1.

Listas . 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.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Codigo J AVA: Interfaz Pila ´ // OPERACIONES PUBLICAS // void apilar(x) ->Inserta x // void desapilar() ->Elimina el ´ltimo elemento insertado u // Object cima() ->Devuelve el ´ltimo elemento insertado u // boolean esVacia() ->Devuelve true si vac´a. void vaciar(). } Algoritmos Pilas. Object cima() throws Exception. Colas. boolean esVacia().

Listas . Colas. static final int CAPACIDAD_POR_DEFECTO = 10. } Algoritmos Pilas. } public void vaciar() { cimaDePila = -1. } public boolean esVacia() { return (cimaDePila == -1).*. cimaDePila = -1.util. public PilaVec() { p = new Vector(CAPACIDAD_POR_DEFECTO). public class PilaVec implements IPila { private Vector p.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Codigo J AVA: Clase PilaVec (i) import java. private int cimaDePila.

Colas. x).size()) p. Listas . else p. } public Object cima() throws Exception { if (esVacia()) throw new Exception("pila vac´a"). } } Algoritmos Pilas. } public void desapilar() throws Exception { if (esVacia()) throw new Exception("pila vac´a").Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Codigo J AVA: Clase PilaVec (ii) public void apilar(Object x) { if (++cimaDePila == p. ı return p.get(cimaDePila).add(x). ı cimaDePila--.set(cimaDePila.

Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA Table of Contents 1 Pilas ´ Pseudocodigo ´ Codigo J AVA Colas ´ Pseudocodigo ´ Codigo J AVA Listas ´ Pseudocodigo 2 3 Algoritmos Pilas. Colas. Listas .

Colas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA Colas ´ Operaciones basicas: insertar. quitarPrimero y primero. Cada rutina deber´a ejecutarse en tiempo constante. ı Algoritmos Pilas. Listas .

´ final 1) Crear Cola (C) cabeza Algoritmos Pilas. Colas. Listas .Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Implementacion circular a base de vectores (i) ´ La implementacion circular devuelve cabeza y fin al principo del ´ vector cuando rebasan la ultima posicion.

´ final 1) Crear Cola (C) cabeza final a cabeza 2) Insertar en Cola (a. Listas . Colas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Implementacion circular a base de vectores (i) ´ La implementacion circular devuelve cabeza y fin al principo del ´ vector cuando rebasan la ultima posicion.C) Algoritmos Pilas.

Listas . Colas. ´ final 1) Crear Cola (C) cabeza final a cabeza final b 2) Insertar en Cola (a.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Implementacion circular a base de vectores (i) ´ La implementacion circular devuelve cabeza y fin al principo del ´ vector cuando rebasan la ultima posicion.C) 3) Insertar en Cola (b.C) a cabeza Algoritmos Pilas.

Listas . Colas.C) a cabeza b final c Algoritmos Pilas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Implementacion circular a base de vectores (i) 4) Insertar en Cola (c.

Listas .C) a cabeza b final c 5) Insertar en Cola (d.C) a cabeza b c final d Algoritmos Pilas. Colas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Implementacion circular a base de vectores (i) 4) Insertar en Cola (c.

C) a cabeza b c final d 6) Quitar Primero (C) b cabeza c final d Algoritmos Pilas.C) a cabeza b final c 5) Insertar en Cola (d. Listas . Colas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Implementacion circular a base de vectores (i) 4) Insertar en Cola (c.

Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Implementacion circular a base de vectores (i) 4) Insertar en Cola (c. Colas.C) b cabeza Pilas. Listas c d .C) a cabeza b c final d 6) Quitar Primero (C) b cabeza final e Algoritmos c final d 7) Insertar en Cola (e.C) a cabeza b final c 5) Insertar en Cola (d.

Tama˜o_de_cola = 0 n fin funci´n o Algoritmos Pilas.. n C. C.Tama˜o_m´ximo_de_cola n n a Vector_de_cola : vector [1.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Pseudocodigo (i) tipo Cola = registro Cabeza_de_cola.Cabeza_de_cola := 1.Tama˜o_m´ximo_de_cola] n a de Tipo_de_elemento fin registro procedimiento Crear_Cola ( C ) C. Final_de_cola: 1..Tama˜o_m´ximo_de_cola n a Tama˜o_de_cola : 0. Colas.Tama˜o_de_cola := 0. Listas ..Final_de_cola := Tama˜o_m´ximo_de_cola n a fin procedimiento funci´n Cola_Vac´a ( C ) : test o ı devolver C.

fin procedimiento Algoritmos Pilas.Tama˜o_de_Cola = Tama˜o_m´ximo_de_cola entonces n n a error Cola llena sino C.Vector_de_cola[C.Tama˜o_de_cola := C. Listas . C ) si C.Final_de_cola).Final_de_cola] := x. C. n n incrementar(C. Colas.Tama˜o_de_cola + 1.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Pseudocodigo (ii) procedimiento incrementar ( x ) (* privado *) si x = Tama˜o_m´ximo_de_cola entonces x := 1 n a sino x := x + 1 fin procedimiento procedimiento Insertar_en_Cola ( x.

incrementar(C. Listas .Tama˜o_de_cola := C. devolver x fin funci´n o funci´n Primero ( C ) : Tipo_de_elemento o si Cola_Vac´a ( C ) entonces ı error Cola vac´a ı sino devolver Vector_de_cola[C.Tama˜o_de_cola .Vector_de_cola[C.Cabeza_de_cola). Colas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Pseudocodigo (iii) funci´n Quitar_Primero ( C ) : Tipo_de_elemento o si Cola_Vac´a ( C ) entonces ı error Cola vac´a ı sino C.1.Cabeza_de_cola] fin funci´n o Algoritmos Pilas. n n x := C.Cabeza_de_cola].

boolean esVacia(). 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). } Algoritmos Pilas. Listas . void vaciar().Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Codigo J AVA: Interfaz Cola ´ // OPERACIONES PUBLICAS // 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. Object primero() throws Exception. Object quitarPrimero() throws Exception. Colas.

Listas . private int tamanoActual. public ColaVec() { vector = new Object[CAPACIDAD_POR_DEFECTO]. static final int CAPACIDAD_POR_DEFECTO = 10. cabezaDeCola = 0. vaciar(). Colas. finalDeCola = -1. private int finalDeCola. } Algoritmos Pilas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Codigo J AVA: Clase ColasVec (i) public class ColaVec implements ICola { private Object [] vector. private int cabezaDeCola. } public void vaciar() { tamanoActual = 0.

return x. ı return vector[cabezaDeCola].length) x = 0. } Algoritmos Pilas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Codigo J AVA: Clase ColaVec (ii) public boolean esVacia() { return (tamanoActual == 0). } private int incrementar(int x) { if (++x == vector. Listas . } public Object primero() throws Exception { if (esVacia()) throw new Exception("cola vac´a"). Colas.

length) duplicarCola(). ı tamanoActual--. } Algoritmos Pilas. tamanoActual++. vector[finalDeCola] = x. Colas.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Codigo J AVA: Clase ColaVec (iii) public Object quitarPrimero() throws Exception { if (esVacia()) throw new Exception("cola vac´a"). Listas . finalDeCola = incrementar(finalDeCola). cabezaDeCola = incrementar(cabezaDeCola). Object valorDevuelto = vector[cabezaDeCola]. } public void insertar(Object x) { if (tamanoActual == vector. return valorDevuelto.

Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ Codigo J AVA: Clase ColaVec (iv) private void duplicarCola() { Object [] nuevoVector = new Object[2*vector. Listas . for (int i=0. vector = nuevoVector. i++.1. i<tamanoActual. cabezaDeCola = 0. } } Algoritmos Pilas.length]. finalDeCola = tamanoActual . Colas. cabezaDeCola = incrementar(cabezaDeCola)) nuevoVector[i] = vector[cabezaDeCola].

al menos. por N /2 inserciones que no duplican el vector. ´ ´ La duplicacion de un vector de N elementos esta precedida. Colas. ´ Repartiendo el coste O (N ) de la duplicacion entre las inserciones precedentes. Algoritmos Pilas. ´ ´ La complejidad de una insercion con duplicacion es O (N ). Listas . ´ el coste de insertar aumenta solo en una constante. toda operacion se realiza en tiempo constante.Pilas Colas Listas ´ Pseudocodigo ´ Codigo J AVA ´ ´ Amortizacion de la duplicacion del vector ´ Cuando el vector no se duplica.

Colas.Pilas Colas Listas ´ Pseudocodigo Table of Contents 1 Pilas ´ Pseudocodigo ´ Codigo J AVA Colas ´ Pseudocodigo ´ Codigo J AVA Listas ´ Pseudocodigo 2 3 Algoritmos Pilas. Listas .

que devuelve el elemento ´ de la posicion indicada Algoritmos Pilas. Listas . ´ Insertar y Eliminar un elemento en alguna posicion. Buscar k esimo. Colas. ´ Buscar la posicion de la primera ocurrencia de un elemento.Pilas Colas Listas ´ Pseudocodigo Listas ´ Operaciones basicas: Visualizar su contenido.

tiempo constante Visualizar y Buscar. ı Algoritmos Pilas. ´ ´ La construccion de una lista o la eliminacion ´ de todos sus elementos podr´a exigir un tiempo cuadratico. ´ Exige sobrevaloracion. Complejidad computacional de las operaciones: Buscar k esimo. Listas . O (n). tiempo lineal. Consume mucho espacio. Insertar y Eliminar son costosas. en promedio. Colas.Pilas Colas Listas ´ Pseudocodigo ´ Implementacion de listas a base de vectores ˜ Tiene que declararse el tamano de la lista. Insertar o eliminar un elemento exige. desplazar la mitad de los valores.

´ Complejidad computacional de las operaciones: Visualizar y Buscar. Colas. Listas . ´ La lista es un puntero al primer nodo (y al ultimo). Eliminar realiza un cambio de apuntadores y una orden dispose. ı ´ ´ Un nodo cabecera facilita la insercion y la eliminacion al comienzo de la lista. tiempo lineal. ´ Usa Buscar anterior cuyo tiempo de ejecucion es lineal. ´ Buscar la posicion p podr´a llevar tiempo lineal. Buscar k esimo. ´ Insertar tras una posicion p require una llamada a new y dos maniobras con apuntadores.Pilas Colas Listas ´ Pseudocodigo ´ Implementacion de listas a base de apuntadores Cada nodo apunta al siguiente. el ultimo no apunta a nada. Algoritmos Pilas. tiempo lineal. O (1). O (1).

Colas. Algoritmos Pilas. Duplica el uso de la memoria necesaria para los punteros. No es necesario buscar el elemento anterior. ´ La eliminacion se simplifica.Pilas Colas Listas ´ Pseudocodigo ´ Implementacion de listas doblemente enlazadas Cada nodo apunta al siguiente y al anterior. Duplica el coste de manejo de punteros al insertar y eliminar. Listas .

Pilas Colas Listas ´ Pseudocodigo ´ Implementacion con un nodo cabecera (i) tipo PNodo = puntero a Nodo Lista = PNodo Posici´n = PNodo o Nodo = registro Elemento : Tipo_de_elemento Siguiente : PNodo fin registro procedimiento Crear Lista ( L ) nuevo ( tmp ). Colas.Elemento := { nodo cabecera }. Listas . si tmp = nil entonces error Memoria agotada sino tmpˆ. L := tmp fin procedimiento Algoritmos Pilas. tmpˆ.Siguiente := nil.

Siguiente = nil fin funci´n o funci´n Buscar ( x. mientras p <> nil y pˆ.Siguiente.Elemento <> x hacer p := pˆ. Listas .Pilas Colas Listas ´ Pseudocodigo ´ Implementacion con un nodo cabecera (ii) funci´n Lista Vac´a ( L ) : test o ı devolver Lˆ.Siguiente. L ) : posici´n de la 1a ocurrencia o o o nil p := Lˆ. Colas. devolver p fin funci´n o funci´n ´ltimo Elemento ( p ) : test { privada } o U devolver pˆ.Siguiente = nil fin funci´n o Algoritmos Pilas.

L ). liberar ( tmp ) fin procedimiento Algoritmos Pilas.Siguiente. Colas.Siguiente. Listas . L ) : posici´n anterior a x o o o a nil { privada } p := L.Siguienteˆ. L ) p := Buscar Anterior ( x.Siguiente. si ´ltimo Elemento ( p ) entonces error No encontrado U sino tmp := pˆ. devolver p fin funci´n o procedimiento Eliminar ( x.Pilas Colas Listas ´ Pseudocodigo ´ Implementacion con un nodo cabecera (iii) funci´n Buscar Anterior ( x. mientras pˆ.Siguiente := tmpˆ.Elemento <> x hacer p := pˆ.Siguiente <> nil y pˆ. pˆ.

Siguiente: pˆ.Elemento := x.Pilas Colas Listas ´ Pseudocodigo ´ Implementacion con un nodo cabecera (iv) procedimiento Insertar ( x. tmpˆ. Listas . Colas. p ) e o nuevo ( tmp ). { Inserta despu´s de la posici´n p } si tmp = nil entonces error Memoria agotada sino tmpˆ.Siguiente := tmp fin procedimiento Algoritmos Pilas. L.Siguiente := pˆ.