12. listas - departament d'informà .variantes de las implementaciones de listas enlazadas ......

Download 12. Listas - Departament d'Informà .Variantes de las implementaciones de listas enlazadas ... Ejemplo

Post on 30-Sep-2018

213 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Ricardo Ferrs Castell Algoritmos y Estructuras de Datos I

    Tema12. Listas 1

    12. LISTAS

    12.1. INTRODUCCIN ........................................................................................................................................................... 112.2. LISTAS CON PUNTO DE INTERS................................................................................................................................... 112.3. IMPLEMENTACIN DE LA CLASE LISTA EN C++......................................................................................................... 5

    12.3.1 Implementacin de la clase LISTA en C++ con vectores ................................................................................... 612.3.2 Implementacin de la clase LISTA en C++ con cursores ................................................................................. 1212.3.3 Implementacin de la clase LISTA en C++ con punteros................................................................................. 1412.3.4 Implementacin de la clase LISTA en C++ con pilas ....................................................................................... 20Variantes de las implementaciones de listas enlazadas ............................................................................................... 21

    12.1. Introduccin

    Las listas son secuencias de elementos a1, a2, a3,... ,an-1, an. Diremos que el tamao de la secuencia esn. Si las listas tienen cero elementos diremos que son listas vacas.

    En una lista diremos que el elementos ai+1 sigue o sucede al elemento ai (si i < n), y diremos que elelemento ai-1 precede o es anterior a ai (si i > 1).

    Operaciones habitualmente ligadas a listas son: Crear la lista vaca; aadir elementos a la lista (encualquier posicin); eliminar elementos (de cualquier posicin); moverse por la lista;... Aunque sepueden especificar otras segn las necesidades de la aplicacin, como buscar un determinado elementoo mostrar todos los elementos de la lista.

    Si nos damos cuenta las operaciones que se definen nos relacionan claramente las listas con las pilas ylas colas, siendo las listas generalizaciones de estas (las operaciones de insercin y borrado puedenrealizarse en cualquier punto de la secuencia y no slo sobre los extremos de la misma.)

    12.2. Listas con punto de inters

    Existen diferentes modelos de uso e implementacin de las listas y uno de los ms interesantes yextendidos son las llamadas listas con punto de inters.

    En las listas con punto de inters se define la existencia de un determinado elemento destacado quees el que servir de referencia para la realizacin de todas las operaciones. Este elemento destacadopuede modificarse con la aplicacin de otras funciones, y vendr marcado como punto de inters de lalista (y lo sealaremos con un *.) Puede suceder que el punto de inters est adems de sobre cualquierelemento de la lista, a continuacin del ltimo, fuera de la secuencia. Esta situacin del punto deinters servir para realizar operaciones al final de la lista, y diremos en este caso que el punto deinters est totalmente a la derecha de la lista. A ese punto le llamaremos desde este momento Finalde la lista (y lo dibujaremos como .) Sin embargo no se podr situar el punto de inters por delantedel primer elemento de la lista, a lo sumo sobre l.

    Las operaciones que vamos a definir sobre las listas con punto de inters, sern similares a las vistas yacon pilas y colas: Crear la estructura vaca, aadir informacin a la estructura, eliminar informacin dela estructura, consultar informacin de la estructura y consultar la existencia de informacin en laestructura. Pero como en este caso las operaciones no se realizan slo en uno de los extremos de laestructura o en puntos concretos de la estructura, habr que aadir operaciones especificas para elegirel punto de la estructura en donde realizar las operaciones (operaciones para mover el punto de intersde la lista.)

  • Ricardo Ferrs Castell Algoritmos y Estructuras de Datos I

    Tema12. Listas 2

    En adelante, y en todo el tema, siempre que hablemos de Listas estaremos refirindonos a listas conpunto de inters.

    EstructuraLista ( Valor ) {* Valor ser el tipo de datos que podremos guardar en la lista *}

    Operaciones/* Operaciones similares a las vistas en Pilas y Colas */INICIAR_LISTA ( ) ListaINSERTAR ( Lista , Valor ) ListaELIMINAR ( Lista ) Lista, ValorCONSULTA ( Lista ) ValorLISTA_VACIA ( Lista ) Lgico/* Operaciones especficas */IR_A_INICIO ( Lista ) ListaAVANZAR ( Lista ) ListaFINAL_LISTA ( Lista ) Lgico

    Especificacin informalINICIAR_LISTA ( ) ListaInicia la lista a vaca, con solo el punto final de la lista y el punto de inters sobre estefinal de la lista

    list *

    INSERTAR ( Lista , Valor ) ListaInserta el Valor delante de elemento sealado como punto de inters, dejando el punto deinters sobre el elemento en el que estaba.

    list *

    a1 a2 ... ai-1 ai ai+1 ... an Insertar (list, x)

    list *

    a1 a2 ... ai-1 x ai ai+1 ... an

    ELIMINAR ( Lista ) Lista, ValorModifica la lista eliminando el elemento sealado por el punto de inters, dejando el punto deinters sobre el elemento siguiente al eliminado. Si el punto de inters sealaba el final de lalista devolver error.

    list *

    a1 a2 ... ai-1 ai ai+1 ... an Eliminar (list)

    list *

    a1 a2 ... ai-1 ai+1 ... an

  • Ricardo Ferrs Castell Algoritmos y Estructuras de Datos I

    Tema12. Listas 3

    CONSULTAR ( Lista ) ValorDevuelve la informacin sealada por el punto de inters. Si el punto de inters sealaba elfinal de la lista devolver error.

    list *

    a1 a2 ... ai-1 ai ai+1 ... an Consultar (list) ai

    LISTA_VACIA ( Lista ) LgicoNos informa si existe informacin en la lista o no (nos dice si el nmero de elementos de lalista es cero o diferente de cero.)

    list *

    Lista_Vacia (list) true

    list *

    a1 a2 ... ai-1 ai ai+1 ... an Lista_Vacia (list) false

    IR_A_INICIO ( Lista ) ListaMueve el punto de inters al primer elemento de la lista.

    list *

    a1 a2 ... ai-1 ai ai+1 ... an Ir_A_Inicio (list)

    list *a1 a2 ... ai-1 ai ai+1 ... an

    AVANZAR ( Lista ) ListaAvanza el punto de inters al siguiente elemento de la lista.

    list *

    a1 a2 ... ai-1 ai ai+1 ... an Avanzar (list)

    list *

    a1 a2 ... ai-1 ai ai+1 ... an

    FINAL_LISTA ( Lista ) LgicoNos dice si el punto de inters est o no al final de la lista.

    list *

    a1 a2 ... ai-1 ai ai+1 ... an Final_Lista (list) false

  • Ricardo Ferrs Castell Algoritmos y Estructuras de Datos I

    Tema12. Listas 4

    list *

    a1 a2 ... ai-1 ai ai+1 ... an Final_Lista (list) true

    Algunos axiomas list Lista, x Valor se cumple que:

    LISTA_VACIA ( INICIAR_LISTA ( ) ) ciertoLISTA_VACIA ( INSERTAR ( list, x ) ) falsoELIMINAR ( INICIAR_LISTA ( ) ) errorSi CONSULTAR ( list ) = x entonces

    INSERTAR ( ELIMINAR ( list ), x ) listFINAL_LISTA ( INICIAR_LISTA ( ) ) cierto

    FINAL_LISTA ( INSERTAR ( list , x ) cierto Si ( FINAL_LISTA ( list ) = cierto )falso Si ( FINAL_LISTA ( list ) = falso )

    AVANZAR ( INICIAR_LISTA ( ) ) error...

    Una vez vistas las operaciones, su comportamiento en la descripcin informal y algunos de losaxiomas que las rigen, ya podemos plantearnos la utilizacin del tipo abstracto de datos Lista.

    Ejemplo de utilizacin de listas:

    1. Realizar una funcin que busque un determinado valor en una lista.

    Hwpekqp Buscar (Lista list, Valor y): DqqngcpKpkekq

    Dqqngcpq encontrado;

    encontrado hcnuqlist Ir_A_Inicio (list)Okgpvtcu ( no Final_Lista (list) Cpf no encontrado) Jcegt

    Uk ( Consultar (list) = y ) Gpvqpeguencontrado ekgtvq

    Ukpqlist Avanzar (list)

    HkpaukHkpaokgpvtcu

    Fgxqnxgt (encontrado)Hkp

    2. Realizar una funcin que obtenga la media de los elementos contenidos en una lista,suponiendo el tipo Valor como Real.

    Hwpekqp Media (Lista list): TgcnKpkekq

    Tgcn acc, med;Gpvgtq num;

    acc 0num 0

    list Ir_A_Inicio (list)

  • Ricardo Ferrs Castell Algoritmos y Estructuras de Datos I

    Tema12. Listas 5

    Okgpvtcu ( no Final_Lista (list) ) Jcegtacc acc + Consultar (list)num num + 1list Avanzar (list)

    Hkpaokgpvtcu

    Uk"(num = 0)med 0

    Ukpqmed acc / num

    Hkpauk

    Fgxqnxgt (med)Hkp

    Ejercicio:

    3. Realizar un programa en pseudocdigo que pida valores enteros al usuario y los inserteordenadamente en una lista de enteros (tras insertar, por ejemplo 4, 3, 6, 5, 1 la listacontendr los valores en el orden correcto, es decir, 1, 3, 4, 5, 6.) El proceso se detendrcuando introduzcamos un valor negativo.

    12.3. Implementacin de la clase LISTA en C++

    Al igual que hicimos en los temas de Pilas y Colas, la implementacin en C++ la haremos utilizandoclases.

    Recordar que la iniciacin de la estructura a vaca, se la dejaremos al constructor de la clase, y que, aligual que hicimos en Pilas y Colas, las funciones que puedan producir errores devolvern booleanosque indicarn si la operacin se ha producido satisfactoriamente o no.

    class Lista{

    public:Lista (void);Lista (const Lista &);~Lista (void);bool Insertar (Valor x);bool Eliminar (void);bool Consulta (Valor & x);bool ListaVacia (void);

    void IrAInicio (void);bool Avanzar (void);bool FinalLista (void);

    private:????

    };

    La especificacin de la parte privada la dejaremos para el momento en que especifiquemos quimplementacin utilizaremos de la Lista: Una implementacin esttica (utilizacin de vectores paraguardar la informacin) o una dinmica (mediante la utilizacin de punteros para crear una estructuraenlazada.)

    Con esta especificacin ya estamos en condiciones de realizar programas que hagan uso de esta partepblica y trabajen con Listas.

Recommended

View more >