Estructuras de Datos. Ejercicios Algoritmos Departamento de Computación Universidade da Coruña 19 de octubre de 2011 Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Colas A partir de la siguiente estructura de datos para la implementación de listas enlazadas: t i p o PNodo = punt ero a Nodo Nodo = r e g i s t r o Elem : TipoElemento Sig : PNodo fin registro Cola = PNodo Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Colas A) Escriba el pseudocódigo de las siguientes operaciones: CrearCola(p) que crea una cola vacía. EsColaVacia(p) que comprueba si la cola está vacía. Insertar(x,p) que inserta x en la cola. Primero(p) que devuelve el elemento de la cabeza de la cola. Sacar(p) que elimina la cabeza de la cola. Si utilizase algún procedimiento auxiliar, refleje también su pseudocódigo. B) Indique, razonando su respuesta sobre el pseudocódigo, la complejidad computacional de cada una de las operaciones anteriores. Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearCola ( p ) p := n i l f i n procedimiento funcion EsColaVacia ( p ) : t e s t devolver p = n i l f i n funcion Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearCola ( p ) p : = n i l {O (1)} f i n procedimiento funcion EsColaVacia ( p ) : t e s t devolver p = n i l f i n funcion Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearCola ( p ) p : = n i l {O (1)} f i n procedimiento {O (1)} funcion EsColaVacia ( p ) : t e s t devolver p = n i l f i n funcion Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearCola ( p ) p : = n i l {O (1)} f i n procedimiento {O (1)} funcion EsColaVacia ( p ) : t e s t devolver p = n i l {O (1)} f i n funcion Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearCola ( p ) p : = n i l {O (1)} f i n procedimiento {O (1)} funcion EsColaVacia ( p ) : t e s t devolver p = n i l {O (1)} f i n funcion {O (1)} Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearNodo ( x , tmp ) nuevo ( tmp ) ; s i tmp = n i l entonces e r r o r Memoria agotada sino tmp ^ . Elem : = x ; tmp ^ . Sig : = n i l ; f i n procedimiento procedimiento I n s e r t a r ( x , p ) CrearNodo ( x , tmp ) ; s i EsColaVacia ( p ) entonces p : = tmp ; sino q := p ; mientras q ^ . Sig <> n i l hacer q : = q ^ . Sig ; q ^ . Sig : = tmp ; f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearNodo ( x , tmp ) nuevo ( tmp ) ; {O (1)} s i tmp = n i l entonces e r r o r Memoria agotada {O (1)} sino tmp ^ . Elem : = x ; {O (1)} tmp ^ . Sig : = n i l ; {O (1)} f i n procedimiento procedimiento I n s e r t a r ( x , p ) CrearNodo ( x , tmp ) ; s i EsColaVacia ( p ) entonces p : = tmp ; sino q := p ; mientras q ^ . Sig <> n i l hacer q : = q ^ . Sig ; q ^ . Sig : = tmp ; f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearNodo ( x , tmp ) nuevo ( tmp ) ; {O (1)} s i tmp = n i l entonces {O (1)} e r r o r Memoria agotada {O (1)} sino tmp ^ . Elem : = x ; {O (1)} tmp ^ . Sig : = n i l ; {O (1)} f i n procedimiento procedimiento I n s e r t a r ( x , p ) CrearNodo ( x , tmp ) ; s i EsColaVacia ( p ) entonces p : = tmp ; sino q := p ; mientras q ^ . Sig <> n i l hacer q : = q ^ . Sig ; q ^ . Sig : = tmp ; f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearNodo ( x , tmp ) nuevo ( tmp ) ; {O (1)} s i tmp = n i l entonces {O (1)} e r r o r Memoria agotada {O (1)} sino tmp ^ . Elem : = x ; {O (1)} tmp ^ . Sig : = n i l ; {O (1)} f i n procedimiento {O (1)} procedimiento I n s e r t a r ( x , p ) CrearNodo ( x , tmp ) ; s i EsColaVacia ( p ) entonces p : = tmp ; sino q := p ; mientras q ^ . Sig <> n i l hacer q : = q ^ . Sig ; q ^ . Sig : = tmp ; f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearNodo ( x , tmp ) nuevo ( tmp ) ; {O (1)} s i tmp = n i l entonces {O (1)} e r r o r Memoria agotada {O (1)} sino tmp ^ . Elem : = x ; {O (1)} tmp ^ . Sig : = n i l ; {O (1)} f i n procedimiento {O (1)} procedimiento I n s e r t a r ( x , p ) CrearNodo ( x , tmp ) ; {O (1)} s i EsColaVacia ( p ) entonces p : = tmp ; sino q := p ; mientras q ^ . Sig <> n i l hacer q : = q ^ . Sig ; q ^ . Sig : = tmp ; f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearNodo ( x , tmp ) nuevo ( tmp ) ; {O (1)} s i tmp = n i l entonces {O (1)} e r r o r Memoria agotada {O (1)} sino tmp ^ . Elem : = x ; {O (1)} tmp ^ . Sig : = n i l ; {O (1)} f i n procedimiento {O (1)} procedimiento I n s e r t a r ( x , p ) CrearNodo ( x , tmp ) ; {O (1)} s i EsColaVacia ( p ) entonces p : = tmp ; {O (1)} sino q : = p ; {O (1)} mientras q ^ . Sig <> n i l hacer q : = q ^ . Sig ; {O (1)} q ^ . Sig : = tmp ; {O (1)} f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearNodo ( x , tmp ) nuevo ( tmp ) ; {O (1)} s i tmp = n i l entonces {O (1)} e r r o r Memoria agotada {O (1)} sino tmp ^ . Elem : = x ; {O (1)} tmp ^ . Sig : = n i l ; {O (1)} f i n procedimiento {O (1)} procedimiento I n s e r t a r ( x , p ) CrearNodo ( x , tmp ) ; {O (1)} s i EsColaVacia ( p ) entonces p : = tmp ; {O (1)} sino q : = p ; {O (1)} mientras q ^ . Sig <> n i l hacer q : = q ^ . Sig ; {O (1)} q ^ . Sig : = tmp ; {O (1)} f i n procedimiento Algoritmos {O (n)} Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearNodo ( x , tmp ) nuevo ( tmp ) ; {O (1)} s i tmp = n i l entonces {O (1)} e r r o r Memoria agotada {O (1)} sino tmp ^ . Elem : = x ; {O (1)} tmp ^ . Sig : = n i l ; {O (1)} f i n procedimiento {O (1)} procedimiento I n s e r t a r ( x , p ) CrearNodo ( x , tmp ) ; {O (1)} s i EsColaVacia ( p ) entonces {O (1)} p : = tmp ; {O (1)} sino q : = p ; {O (1)} mientras q ^ . Sig <> n i l hacer {O (n)} q : = q ^ . Sig ; {O (1)} q ^ . Sig : = tmp ; {O (1)} f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución procedimiento CrearNodo ( x , tmp ) nuevo ( tmp ) ; {O (1)} s i tmp = n i l entonces {O (1)} e r r o r Memoria agotada {O (1)} sino tmp ^ . Elem : = x ; {O (1)} tmp ^ . Sig : = n i l ; {O (1)} f i n procedimiento {O (1)} procedimiento I n s e r t a r ( x , p ) CrearNodo ( x , tmp ) ; {O (1)} s i EsColaVacia ( p ) entonces {O (1)} p : = tmp ; {O (1)} sino q : = p ; {O (1)} mientras q ^ . Sig <> n i l hacer {O (n)} q : = q ^ . Sig ; {O (1)} q ^ . Sig : = tmp ; {O (1)} f i n procedimiento {O (n)} Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución funcion Primero ( p ) s i EsColaVacia ( p ) entonces e r r o r Cola v a c í a sino devolver p ^ . Elem f i n funcion procedimiento Sacar ( p ) s i EsColaVacia ( p ) entonces e r r o r Cola v a c í a ; sino tmp : = p ; p : = p ^ . Sig ; l i b e r a r ( tmp ) ; f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución funcion Primero ( p ) s i EsColaVacia ( p ) entonces e r r o r Cola v a c í a {O (1)} sino devolver p ^ . Elem {O (1)} f i n funcion procedimiento Sacar ( p ) s i EsColaVacia ( p ) entonces e r r o r Cola v a c í a ; sino tmp : = p ; p : = p ^ . Sig ; l i b e r a r ( tmp ) ; f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución funcion Primero ( p ) s i EsColaVacia ( p ) entonces {O (1)} e r r o r Cola v a c í a {O (1)} sino devolver p ^ . Elem {O (1)} f i n funcion procedimiento Sacar ( p ) s i EsColaVacia ( p ) entonces e r r o r Cola v a c í a ; sino tmp : = p ; p : = p ^ . Sig ; l i b e r a r ( tmp ) ; f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución funcion Primero ( p ) s i EsColaVacia ( p ) entonces {O (1)} e r r o r Cola v a c í a {O (1)} sino devolver p ^ . Elem {O (1)} f i n funcion {O (1)} procedimiento Sacar ( p ) s i EsColaVacia ( p ) entonces e r r o r Cola v a c í a ; sino tmp : = p ; p : = p ^ . Sig ; l i b e r a r ( tmp ) ; f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución funcion Primero ( p ) s i EsColaVacia ( p ) entonces {O (1)} e r r o r Cola v a c í a {O (1)} sino devolver p ^ . Elem {O (1)} f i n funcion {O (1)} procedimiento Sacar ( p ) s i EsColaVacia ( p ) entonces e r r o r Cola v a c í a ; {O (1)} sino tmp : = p ; {O (1)} p : = p ^ . Sig ; {O (1)} l i b e r a r ( tmp ) ; {O (1)} f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución funcion Primero ( p ) s i EsColaVacia ( p ) entonces {O (1)} e r r o r Cola v a c í a {O (1)} sino devolver p ^ . Elem {O (1)} f i n funcion {O (1)} procedimiento Sacar ( p ) s i EsColaVacia ( p ) entonces {O (1)} e r r o r Cola v a c í a ; {O (1)} sino tmp : = p ; {O (1)} p : = p ^ . Sig ; {O (1)} l i b e r a r ( tmp ) ; {O (1)} f i n procedimiento Algoritmos Estructuras de Datos. Ejercicios Ejercicio 1: Resolución funcion Primero ( p ) s i EsColaVacia ( p ) entonces {O (1)} e r r o r Cola v a c í a {O (1)} sino devolver p ^ . Elem {O (1)} f i n funcion {O (1)} procedimiento Sacar ( p ) s i EsColaVacia ( p ) entonces {O (1)} e r r o r Cola v a c í a ; {O (1)} sino tmp : = p ; {O (1)} p : = p ^ . Sig ; {O (1)} l i b e r a r ( tmp ) ; {O (1)} f i n procedimiento {O (1)} Algoritmos Estructuras de Datos. Ejercicios