c3t3 Eda1 Listas 2013

download c3t3 Eda1 Listas 2013

of 29

Transcript of c3t3 Eda1 Listas 2013

  • Karim Guevara Puente de la Vega

    [email protected]

    UNSA, 2013

    Estructura de Datos Lineales

    Estructuras de Datos Lineales Listas Secuenciales

  • Estructura de Datos I 2

    Agenda

    Lista lineal

    Lista lineal por medio de arreglos

    Lista

    Coleccin

    Conjunto

  • Estructura de Datos I 3

    Lista lineal

    Secuencia de cero o ms items x1,x2,,xn en el cual xi es de un determinado tipo y n representa el tamao de la lista.

    Su principal propiedad estructural envuelve las posiciones relativas de los items en una dimensin:

    Asumiendo n 1, xi es el primer item de la lista y xn el ltimo

    xi precede xi+1 para i =1,2,,n-1

    xi sucede xi-1 para i =2,,n

    El elemento xi est en la i-sima posicin.

    Estructuras de Datos Bsicas

  • Estructura de Datos I 4

    Lista lineal (cont)

    El conjunto de operaciones a ser definido depende de cada aplicacin

    Un conjunto de operaciones necesario a una mayora de aplicaciones:

    1. Verificar si la lista est vaca

    2. Verificar si la lista est llena

    3. Insertar un nuevo item inmediatamente despus del i-simo item

    4. Localizar el i-simo item para examinar y/o alterar el contenido

    5. Retirar el i-simo item

  • Estructura de Datos I 5

    Lista lineal (cont)

    Un conjunto de operaciones necesario a una mayora

    de aplicaciones:

    5. Combinar dos o ms listas en una nica

    6. Partir una lista en dos o ms listas

    7. Hacer una copia de una lista

    8. Ordenar los items de una lista

    9. Buscar la ocurrencia de un item

  • Estructura de Datos I 6

    Lista lineal (cont)

    La lista lineal se puede representar por medio de un TAD Lista, definido por:

    Hay varias opciones de estructuras de datos que permiten una implementacin eficiente para listas (p.e. el tipo estructurado array).

    typeName

    listType

    Domain

    cada elemento del tipo listType es un

    conjunto de hasta 1000 numeros

    Operations

    comprobar si la lista est vaca

    comprobar si la lista est llena

    buscar un elemento dado en la lista

    eliminar un elemento de la lista

    insertar un elemento en la lista

    ordenar la lista

    destruir la lista

    imprimir la lista

  • Estructura de Datos I 7

    Implementacin de Listas Lineales

    Varias estructuras de datos pueden ser utilizadas

    para representar una lista lineal.

    Las dos representaciones ms utilizadas son las

    implementaciones son:

    Por medio de arreglos

    Por medio de punteros

  • Estructura de Datos I 8

    Listas por medio de arreglos

    Los items de la lista son almacenados en posiciones

    continuas de la memoria.

    La lista puede ser recorrida en cualquier direccin

    La insercin de un nuevo item puede ser realizada

    despus del ltimo item con costo constante

    La insercin de un nuevo item en el medio de la lista

    requiere una translacin de todos los items

    localizados despus del punto de insercin.

  • Estructura de Datos I 9

    Listas por medio de arreglos

    Retirar un item del inicio de la lista requiere una

    translacin de los items para rellenar el espacio vaco

    dejado.

    x1

    x2

    xlongitud

    . . .

    . . .

    xn

    0

    1

    Primero =

    Longitud - 1

    Tamao mximo - 1

    Los items son almacenados en un

    arreglo

    Longitud apunta a la posicin siguiente a

    la del ltimo elemento de la lista

    El i-simo item de la lista est

    almacenado en la i-sima-1 posicin del

    arreglo, 0 i < longitud

  • Estructura de Datos I 10

    Implementacin de TAD Lista

    La implementacin puede ser por medio de un arreglo esttico

    de 1000 elementos (listType.h)

    Template class ListType{

    bool isEmpty();

    //Precondition: La lista debe de existir.

    //Postcondition: retorna true si la lista esta

    vaca, false en otro caso.

    bool isFull();

    int search(T searchItem);

    void insert(T newitem);

    void remove(T removeitem);

    void destroy();

    void printList();

    ListType();

    private:

    T list[1000];

    int length;

    };

  • Estructura de Datos I 11

    Implementacin de TAD Lista

    listTypeImp.cpp

    #include listType.h

    template bool listType::isEmpty(){

    return(lenght==0)

    }

    template void listType::insert(T newitem){

    if(!isFull())

    list[lenght++]=newitem

    }

    template void listType::remove(T newitem){

    if(!isEmpty()){

    int i=search(newitem);

    if(i>=0){

    list[i]=list[lenght-1];

    lenght--;

    }

    }

    }

  • Si la lista est implementada utilizando arreglos dinmicos, la

    declaracin sera: (listDinamicType.h)

    Estructura de Datos I 12

    template

    class listDinamicType {

    listDinamicType(int = 1000);

    ~listDinamicType( );

    bool isFull();

    bool isEmpty();

    void printList( );

    bool insert(X );

    X remove( int);

    private:

    X *list:

    int lenght;

    int size;

    };

    Implementacin de TAD Lista dinmica

  • listDinamicTypeImp.cpp

    Estructura de Datos I 13

    template

    listDinamicType::listDinamicType(int psize ) {

    size = psize;

    list = new X [size];

    lenght=0;

    }

    template listDinamicType::~listDinamicType( ) {

    if (list != NULL) {

    delete[] list;

    list=NULL;

    lenght=0;

    }

    }

    Implementacin de TAD Lista dinmica

  • listDinamicTypeImp.cpp

    Estructura de Datos I 14

    template bool listDinamicType::isFull( ) {

    return(length==size);

    }

    template bool listDinamicType::insert(X newitem) {

    if (isFull()){

    cout

  • Estructura de Datos I 15

    template X listDinamicType::remove(int position ) {

    int item = -1;

    if ( isEmpty() || position >= lenght)

    cout

  • listDinamicTypeImp.cpp

    Estructura de Datos I 16

    template void listDinamicType::printList( ) {

    if ( isEmpty())

    cout

  • Estructura de Datos I 17

    Ventajas y desventajas

    Ventaja:

    Los apuntadores son implcitos en esta estructura.

    Acceso directo al elemento i-simo por su posicin

    Desventajas:

    Costo de la eliminacin e insercin puede ser alta

    (translacin de todos los items).

    No existe previsin sobre el crecimiento de la lista

  • Listas

    Una lista es una secuencia de objetos ordenados, en la

    que se dispone de un iterador especial, con el que se

    puede:

    insertar o eliminar elementos en cualquier posicin

    recorrer los elementos de la lista hacia adelante y

    opcionalmente, hacia atrs

    etc.

    Algunas listas (Vectores) disponen de acceso posicional

    eficiente

    El orden es el que define la secuencia de elementos; no

    necesariamente es su orden natural

    Estructura de Datos I 18

  • Ejemplos de uso de listas

    Escribir un mtodo que reemplace todos los elementos de una lista que coincidan con un elemento, por otro elemento

    Escribir una clase que represente una baraja de cartas espaolas, con las siguientes operaciones:

    constructor: inicialmente la baraja contiene las 40 cartas ordenadas

    barajar: para cada carta i desde la ltima hasta la segunda se intercambia esa carta con la de la casilla de ndice aleatorio entre 0 e i

    Repartir: retorna una lista que contiene las num ltimas cartas de la baraja, y las elimina de la baraja

    Estructura de Datos I 19

  • Colecciones (collection) o bolsas (bag)

    La coleccin es un ADT que permite almacenar grupos

    de objetos llamados elementos:

    pueden estar repetidos

    no es preciso almacenar ninguna relacin de orden o

    secuencia

    Tambin se llaman bolsas

    Estructura de Datos I 20

  • Operaciones bsicas de las colecciones

    Estructura de Datos I 21

  • Operaciones bsicas de las colecciones

    constructor: Crea la coleccin con cero elementos

    aade: Aade el parmetro elElemento a la coleccin. Si elElemento es incompatible con los elementos que se almacenan en esta coleccin lanza una excepcin

    borra: Si existe en la coleccin al menos una instancia de elElemento, la borra de la coleccin y retorna true. En otro caso, retorna false

    hazNula: Elimina todos los elementos de la coleccin, dejndola vaca

    pertenece: Si existe en la coleccin al menos una instancia de elElemento, retorna true. En otro caso, retorna false

    estaVacia: Si la coleccin est vaca retorna true. En otro caso, retorna false

    tamao: Retorna un entero que dice cuntos elementos hay en la coleccin

    Estructura de Datos I 22

  • Ejemplo de usos

    Una aplicacin de una coleccin es almacenar una

    lista de visitas a un lugar

    una misma persona puede visitar el lugar varias veces

    no interesa el orden en el que se hacen

    interesa si alguien ha visitado el lugar o no, y cuntas

    veces

    Estructura de Datos I 23

  • Ejercicio

    Crear una clase capaz de almacenar en un atributo

    una coleccin de nombres de personas (Strings)

    Escribir un mtodo para aadir una visita

    Escribir un mtodo para saber cuntas visitas ha

    hecho una persona (que deje la coleccin igual que

    estaba)

    Estructura de Datos I 24

  • Conjuntos (set)

    Un conjunto es un ADT que permite almacenar grupos

    de objetos llamados elementos de modo que:

    no pueden estar repetidos

    no es preciso almacenar ninguna relacin de orden o

    secuencia

    Adems suelen tener operaciones para operar con

    ellos:

    Interseccin

    Unin

    diferencia

    Estructura de Datos I 25

  • Operaciones bsicas de los conjuntos

    Estructura de Datos I 26

  • Estructura de Datos I 27

    Operaciones bsicas de los conjuntos

    Las operaciones bsicas son idnticas a las de las colecciones, con la excepcin de aade:

    constructor: Crea el conjunto con cero elementos

    aade: Si elElemento ya pertenece al conjunto retorna false. En caso contrario, aade el parmetro elElemento al conjunto y retorna true. Si elElemento es incompatible con los elementos que se almacenan en este conjunto lanza una excepcin

    borra: Si existe en el conjunto al menos una instancia de elElemento, la borra del conjunto y retorna true. En otro caso, retorna false

    hazNulo: Elimina todos los elementos del conjunto, dejndolo vaco

    pertenece: Si existe en el conjunto al menos una instancia de elElemento, retorna true. En otro caso, retorna false

    estaVacio: Si el conjunto est vaco retorna true. En otro caso, retorna false

    tamao: Retorna un entero que dice cuntos elementos hay en el conjunto

  • Estructura de Datos I 28

    Operaciones bsicas de los conjuntos

    interseccin: Retorna un conjunto que contiene los elementos comunes al conjunto actual y a otroConjunto.

    unin: Retorna un conjunto que contiene los elementos del conjunto actual y los de otroConjunto.

    diferencia: Retorna un conjunto que contiene los elementos del conjunto actual que no pertenecen a otroConjunto.

    incluidoEn: Retorna true si todos los elementos del conjunto original pertenecen a otroConjunto, y false en caso contrario.

  • Estructura de Datos I 29

    Ejemplo de uso

    En el ejemplo anterior, aadir un mtodo para mostrar

    todos los elementos duplicados (aquellos con ms de una

    visita).

    Hacer un mtodo para obtener un conjunto con todas las

    visitas, pero sin duplicidades.