fundamentos de informtica - dsi.fceia.unr.edu.ar .listas simplemente enlazadas en clistas ......

Download Fundamentos de Informtica - dsi.fceia.unr.edu.ar .Listas simplemente enlazadas en CListas ... •

Post on 24-Sep-2018

214 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Tema 8: Estructuras de datos. Listas enlazadas

    Tema 8: Estructuras de datos. Listas enlazadas

    Fundamentos de Informtica

    1 Ingeniera IndustrialEscuela Superior de Ingenieros

    Universidad de Sevilla

    Ismael Alcal TorregoJos ngel Acosta Rodrguez

    Fernando Dorado NavasFabio Gmez Estern-Aguilar

    Manuel Lpez MartnezAmparo Nez ReyesCarlos Vivas Venegas

  • TEMA 8: Estructuras de datos. Listas enlazadasTEMA 8: Estructuras de datos. Listas enlazadas

    Estructura de datos lineal, formada por bloques de informacin,con un formato comn, enlazados entre s mediante punteros.Lista enlazada =

    INICIOLISTA Bloque 1 Bloque 2 Bloque 3 Bloque 4 FIN

    Los elementos se distribuyen de forma dispersa por la memoria:Los bloques de informacin no ocupan posiciones consecutivas en la memoria. El orden de la lista la establecen los enlaces entre bloques de informacin.

    Acceso a los elementos aleatorio:Puede extraerse informacin de cualquier elemento o insertar un bloque en cualquier posicin.

    Acceso a los elementos no destructivo:Al contrario que en colas y pilas, la extraccin de un bloque no implica su eliminacin.

    El tamao de la lista puede modificarse de forma dinmica:Al contrario que en colas y pilas, no hay un nmero mximo de elementos de la lista (salvo limitaciones de la capacidad de almacenamiento de la mquina)

    Caractersticas de listas enlazadasCaractersticas de listas enlazadas

  • Listas simplemente enlazadasListas simplemente enlazadas

    INICIOLISTA Bloque 1 Bloque 2 Bloque 3 Bloque 4

    NULL

    Cada elemento contiene un enlace con el siguiente elemento de la lista. Conocida la posicin de un elemento, podemos recorrer la lista hacia delante No es posible recorrer la lista hacia atrs.

    Listas simplemente enlazadas en CListas simplemente enlazadas en C

    struct direc {char nombre[40];char calle[40];char ciudad[20]; int codigo;struct direc * sig;} info;

    Informacin del Elemento

    Enlace con el siguiente elemento

    Puntero a la propia estructura

    Cada elemento requiere una reserva dinmica de memoria al ser creado (liberar memoria al ser eliminado).

    La gestin de la lista se hace con funciones apropiadas para aadir, insertar, borrar, buscar elementos, etc.

    Por convenio, el fin de lista se indica comoNULL

  • nuevo

    Listas simplemente enlazadasListas simplemente enlazadas

    raiz Elto 1

    No hay orden especfico para los elementos.

    La lista se construye aadiendo cada nuevo elemento al final de la lista existente.

    Si no existe lista, el nuevo elemento pasa a ser el primero y nico de la lista.

    Construccin de una Lista simplemente enlazada en CConstruccin de una Lista simplemente enlazada en C

    Lista Desordenada

    Dos FormasLista

    Ordenada

    Elto 2 Elto 3 NULL

    raizElto 1 Elto 2 Elto 3 NULLnuevo

    raiz Elto 1 Elto 2 Elto 3 NULL

    raizElto 1 Elto 2 Elto 3 NULL

    nuevo elementoINSERCINnuevo elementoAL FINAL

    Los elementos se aaden para que la lista final tenga un orden especfico.

    Hay que buscar el punto de insercin del elemento segn el orden establecido.

    La insercin puede ser al principio, en medio o al final.

    Si no existe lista, el nuevo elemento pasa a ser el primero y nico de la lista.

  • Listas simplemente enlazadasListas simplemente enlazadas

    struct direc * almac_fin( struct direc *top, struct direc * nuevo){struct direc * p = top; /* puntero que recorrer la lista hasta el final */if (top = = NULL) /* si no existe lista la crea */return nuevo ;

    while( p -> sig ) /* recorre la lista hasta que p apunte al ltimo */{ p = p -> sig ; }

    p -> sig = nuevo; /* enlaza el nuevo elemento al final */return top; /* devuelve la cabeza */}

    Funciones de creacin de Listas simplemente enlazadasFunciones de creacin de Listas simplemente enlazadas

    1.- Lista Desordenada

    top Elto. 1 Elto. 2 Elto. 3

    E. nuevo NULL

    NULL

    nuevo

  • Listas simplemente enlazadasListas simplemente enlazadas

    struct direc * almac_fin( struct direc *top, struct direc * nuevo){struct direc * p = top; /* puntero que recorrer la lista hasta el final */if (top = = NULL) /* si no existe lista la crea */return nuevo ;

    while( p -> sig ) /* recorre la lista hasta que p apunte al ltimo */{ p = p -> sig ; }

    p -> sig = nuevo; /* enlaza el nuevo elemento al final */return top; /* devuelve la cabeza */}

    Funciones de creacin de Listas simplemente enlazadasFunciones de creacin de Listas simplemente enlazadas

    1.- Lista Desordenada

    top Elto. 1 Elto. 2 Elto. 3

    E. nuevo NULL

    NULL

    nuevo

    Recibe:-Puntero al comienzo de la lista top-Puntero al nuevo elemento a insertar nuevo

    (Se debe haber reservado memoria dinmicamenteantes de llamar a la funcin)

  • Listas simplemente enlazadasListas simplemente enlazadas

    struct direc * almac_fin( struct direc *top, struct direc * nuevo){struct direc * p = top; /* puntero que recorrer la lista hasta el final */if (top = = NULL) /* si no existe lista la crea */return nuevo ;

    while( p -> sig ) /* recorre la lista hasta que p apunte al ltimo */{ p = p -> sig ; }

    p -> sig = nuevo; /* enlaza el nuevo elemento al final */return top; /* devuelve la cabeza */}

    Funciones de creacin de Listas simplemente enlazadasFunciones de creacin de Listas simplemente enlazadas

    1.- Lista Desordenada

    top Elto. 1 Elto. 2 Elto. 3

    E. nuevo NULL

    NULL

    nuevo

    Devuelve:-Puntero al comienzo de la lista

    (En este caso la cabecera de la lista slo vara al insertar el primer elemento)

  • Listas simplemente enlazadasListas simplemente enlazadas

    struct direc * almac_fin( struct direc *top, struct direc * nuevo){struct direc * p = top; /* puntero que recorrer la lista hasta el final */if (top = = NULL) /* si no existe lista la crea */return nuevo ;

    while( p -> sig ) /* recorre la lista hasta que p apunte al ltimo */{ p = p -> sig ; }

    p -> sig = nuevo; /* enlaza el nuevo elemento al final */return top; /* devuelve la cabeza */}

    Funciones de creacin de Listas simplemente enlazadasFunciones de creacin de Listas simplemente enlazadas

    1.- Lista Desordenada

    top E. nuevoNULL top

    Si el principio de la lista es NULL, la lista no existe y la creamos: Su primer elemento es el que le pasamos, nuevo, y es tambin la nueva cabecera de la lista.

    NULL

    La lista no existe El nuevo Elto es el primero y nico de la lista

    nuevo

  • Listas simplemente enlazadasListas simplemente enlazadas

    struct direc * almac_fin( struct direc *top, struct direc * nuevo){struct direc * p = top; /* puntero que recorrer la lista hasta el final */if (top = = NULL) /* si no existe lista la crea */return nuevo ;

    while( p -> sig ) /* recorre la lista hasta que p apunte al ltimo */{ p = p -> sig ; }

    p -> sig = nuevo; /* enlaza el nuevo elemento al final */return top; /* devuelve la cabeza */}

    Funciones de creacin de Listas simplemente enlazadasFunciones de creacin de Listas simplemente enlazadas

    1.- Lista Desordenada

    top Elto. 1 Elto. 2 Elto. 3

    E. nuevo NULL

    NULL

    nuevo

    Si el principio de la lista no es NULL, la lista ya tiene al menos un elemento.Recorremos la lista hasta encontrar el ltimo elemento (Al salir del while, p apunta al ltimo elemento)

    p

  • Listas simplemente enlazadasListas simplemente enlazadas

    struct direc * almac_fin( struct direc *top, struct direc * nuevo){struct direc * p = top; /* puntero que recorrer la lista hasta el final */if (top = = NULL) /* si no existe lista la crea */return nuevo ;

    while( p -> sig ) /* recorre la lista hasta que p apunte al ltimo */{ p = p -> sig ; }

    p -> sig = nuevo; /* enlaza el nuevo elemento al final */return top; /* devuelve la cabeza */}

    Funciones de creacin de Listas simplemente enlazadasFunciones de creacin de Listas simplemente enlazadas

    1.- Lista Desordenada

    top Elto. 1 Elto. 2 Elto. 3

    E. nuevo NULL

    NULL

    nuevo

    Alcanzado el final de la lista, slo queda enlazar el nuevo elemento a continuacn de ste. (El siguiente elemento al ltimo (p->sig) deber apuntar a nuevo)

    p

  • Listas simplemente enlazadasListas simplemente enlazadas

    struct direc * almac_fin( struct direc *top, struct direc * nuevo){struct direc * p = top; /* puntero que recorrer la lista hasta el final */if (top = = NULL) /* si no existe lista la crea */return nuevo ;

    while( p -> sig ) /* recorre la lista hasta que p apunte al ltimo */{ p = p -> sig ; }

    p -> sig = nuevo; /* enlaza el nuevo elemento al final */return top; /* devuelve la cabeza */}

    Funciones de creacin de Listas simplemente enlazadasFunciones de creacin de Listas simplemente enlazadas

    1.- Lista Desordenada

    top Elto. 1 Elto. 2 Elto. 3 E. nuevo NULL

    Para finalizar devolvemos la cabecera de la lista(Haya sta cambiado o no)

  • Listas simplemente enlazadasListas simplemente enlazadas

    struct ciclista *insertar ( struct ciclista * top, struct ciclista * nuevo){struct ciclista *actual = top; /* puntero para moverse por la lista */struct ciclista *anterior = NULL; /*puntero al elemento anterior al "actual" *//* Bsqueda del punto de insercin */while ( (actual != NULL) && (actual -> tiempo tiempo) ){anterior = actual;actual = actual -> sig;}

    /* insercin */if (anterior != NULL) /* insercin en medio o final */anterior -> sig = nuevo;

    else /* insercin al principio de la lista */top = nuevo;

    nuevo -> sig = actual;return top; /* devuelve la cabecera de la lista */}

    Funciones de creacin de Listas simplemente enlazadasFun