estructuras dinamicas lineales (estructuras de datos)

Upload: alberto-martinez

Post on 07-Jul-2018

257 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    1/56

    Estructuras

    Dinámicas Lineales

    1

    Estructuras de Datos UDEM 2015

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    2/56

    2

    Listas Dinámicas

    2

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    3/56

    Lista dinámica

    • Lista ≠ Arreglo – Lista es fexible y permite cambios de implementación, es un

    concepto

    • Operaciones

     – Insertar, Borrar, Modicar, etc!

    •  "ipos de listas – #imples

     – Ordenadas

     – $ilas – %ilas

     – Doblemente enla&adas 'LDE(

     – )irculares

     – Etc!

    3

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    4/56

     "AD Lista Simple* operacionesCrear una lista crearLista ()

    Comprobar del estado listaLlena ()→ Boolean

    listaVacia ()→ Boolean

    Insertar un elemento Insertar (valorInfo, posición)

    Insertar (valorInfo)

    Borrar un elemento Borrar (posición)

    Borrar (valorInfo)

    Búsquar de un elemento Buscar (dato)→ información

    Buscar (dato)→ referenciaElemento

    Pertenece (información)→

     Booleanecorrer la lista ecorrer ()

    !cceder a un elemento Info (referenciaElemento)→ Informacion

    "i#uiente (referenciaElemento)→ enlace (referencia)

    $odificar un elemento asi#narInfo (referenciaElemento, valorInfo)

    asi#narEnlace (referenciaElemento, valorEnlace)4

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    5/56

    %&u' es un odo

    • Un nodo es un registro con varios campos (objeto) :

    unos campos (atributos) contienen datos y un

    campo es un apuntador (referencia). Los primeros

    son información y el último es una referencia al

    siguiente nodo de la lista. l último nodo de la lista

    contiene una referencia con valor !null!.

    5

    Dato25

    Siguiente

    null

    nodo

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    6/56

     Clase nodo

    public class Nodo {

    int dato; // almacena el dato

      Nodo sig; // ”liga” al siguiente nodo

    }

    6

    El campo dato representa los datos quealmacena el nodo. Puede ser de

    diferentes tipos de datos, adems que!ste puede contener la cantidad dedatos que se ocupen.

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    7/56

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    8/56

    *efinición de la lista dinámica 

    • Se compone de nodos enlazados.• Se debe hacer en una clase separada.

    • Sólo requiere conocer dónde se encuentra el primer

    nodo de la lista.

    • Para el nombre de la referencia al primer nodo se

    hace uso de la metfora! "cabeza de la lista# o

    "inicio# $ "tope# o al%o similar.

    • &na lista 'ac(a comenzar(a con un 'alor null en inicio.

    )

    inicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    9/56

    jemplo de Lista din"mica

    *

    inicio

    cla'e dato si% cla'e dato si% cla'e dato null

    +odo 1 +odo 2 +odo 3

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    10/56

    Creación de una lista dinámica 

    • Lista vac+a

    1,

    inicio

    null

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    11/56

    11

    -nserción de un nodo

    Caso1: #nserción al principio de la lista

    cla'e dato null

    -nicio

    cla'e dato si% cla'e dato si%

    +odo 1 +odo 2 +odo 3cla'e dato si%

    +odo nue'o

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    12/56

    Caso 1) *nserci(n al principio +algoritmo

    12

    -nsertarinicio info/

     00este al%oritmo inserta un nodo al inicio de la lista00nue'o! del tipo nodo/

    1 crear nue'o/  00con ne en a'a

    2 hacer nue'o.dato info

      nue'o.si% inicio

      inicio nue'o

    Inicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    13/56

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    14/56

     Caso 2.1  Insertar antes de ….

    InsertAntes (ino! "al#

    //au$! nue"o! % & son "ariables de tipo Nodo. ' es una "ariable boolean! ) si no se

    *a llegado al inal de la lista 

    +, *acer au$ - inicio! ' - "erdadero

    , mientras (au$.dato 0- "al# % (' -- "erdadero# //buscando el nodo con "al

      si au$.sig 0- null

    { & - au$! au$ - au$.sig } // a"an1ar

      sino ' - also // in de la lista 

    2, si (' -- "erdadero# //se encontró el nodo

    Crear (nue"o#nue"o.dato - ino

    nue"o.sig - au$

    si (au$ -- inicio# inicio - nue"o //es el primer nodo

    si no &.sig - nue"o  14

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    15/56

    Caso 2.2 Inserta despu3s de …

    Insert4espues (ino! "al#//nue"o % au$ son "ariables del tipo de inicio! ' es boolean +, au$ - inicio! ' - "erdadero

     , 5ientras (au$.dato 0- "al# % (' -- "erdadero# *acer

      si au$.sig 0- null  entonces au$ - au$.sig

      sino ' - also

    2, 6i (' - - "erdadero#

    entonces crear (nue"o#nue"o.dato - inonue"o.sig - au$.sigau$.sig - nue"o

    15

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    16/56

    16

    Caso 3. -nserción al final de la lista

    -nsertafinal info/

     00 nue'o 8 au9 son del tipo inicio1 :acer au9 inicio

    2 mientras au9.si% ; null  00no es el

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    17/56

      7liminar Nodos

    Casos1:liminar el primer nodo

    Eliminaprimero - // Se redene el apuntador inicio. 

    Si inicio nullinicioinicio.sig //que s' 3a4 al menosun elemento

      si no // no se puedeeliminar

    17

    #nicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    18/56

    Caso 7liminar en medio

    Caso 2.1 limina nodo con información $

    7liminaNodo8 ($#

    // au$ % & son "ariables del mismo tipo de inicio! ' es boolean

    +, 9acer au$ - inicio ! o - "erdadero, :epetir mientras (au$.dato 0- $# % (o# *acersi au$.sig 0- null // *a% más nodos

      entonces & - au$! au$ - au$.sig  si no o - also

    2, si au$.dato 0- $

    entonces // el elemento $ no e$iste  si no si inicio -- au$ // $ es el primer elemento de la lista 

      entonces inicio - au$.sig  si no &.sig - au$.sig

      au$ - null

    1)

    #nicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    19/56

    aso 2.2  =limina nodo antes del nodo con 'alor 9

    Algoritmo 7liminaAntes8 ($#

     // au$ ! & % : son "ariables del mismo tipo de inicio (apuntador#! ' es boolean

    +, 6i inicio.dato -- $ // $ está en el primer nodoentonces // no *a% nodo ue precede a $sino au$ - inicio; & - inicio; ' - also;  mientras ((au$.dato0-$# % (0'##  si au$.sig 0- null

    entonces : - &; & - au$;

    au$- au$.sig;  si no ' - "erdadero; , 6i au$.dato 0- $

    entonces // el elemento $ no e$iste no se elimina nada si no si inicio.sig - au$ // el elemento a eliminar es el primero  entonces inicio - au$

      sino :.sig - au$; & - null; 1*

    X

    inicio R T aux

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    20/56

     aso 3 =limina au9

    au9 au9.si% A

     3. >.si% null  00 corta con au9

      au9 null  00quita au9

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    21/56

    :ecorrido de una lista dinámica

    5etodo Correlista (#;

    //imprime cada dato de la lista 

     {

      Nodo au$;

      au$ - inicio; 

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    22/56

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    23/56

    %ilas

    Dinámicas

    23

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    24/56

    aracter'sticas de una 6ila

    • El primer elemento en llegar es el primero en salir6*67) 6rist *n 6rist 7ut-.

    • El 8ltimo en llegar se agrega al nal• El apuntador posee la direcci(n del siguiente nodo• El apuntador puede ser null o puede apuntar al

    siguiente nodo

    • Esta estructura se utili9a en ) – Simulaciones – Sistemas operati&os etc:

    24

    sigdato sigdato sigdato sigdato B-nicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    25/56

    7peraciones de una 6ila

    • )rearla '(

    •Agregarla 'int dato(• -uitar%ila '(

    • .acio '(

    25

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    26/56

    )rea la

    crea%ila /

    0odo inicio 1 null2

    3

    26

    inicio* null

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    27/56

    Agregar un nodo al nal de una%ilaAgrega 'int ino( /

     0odo nue4o 1 ne5 0odo'( nue4o!dato 1 ino2 nue4o!sig1 null2

      #i inicio 11 null // caso ila "acia entonces inicio 1 nue4o2

    #ino / 0odo aux 1 inicio2 // caso ila no"ac>a 

      mientas 'aux!sig 61 null( aux 1aux!sig2  aux!sig 1 nue4o2 3

    3

    27

    sigdato nullinicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    28/56

    Eliminar un elemento de la %ila

     ++ se manda a llamar si la la no está 4acia

    int 7uitar '( /  d 1 inicio!dato2

      inicio 1 inicio!sig23

    8egresa d23

    2)

    nullincio

    sigdato sigdato sigdato

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    29/56

    La la está 4ac9a:

    Boolean 4acia '( / return 'inicio 11 null(2

      3

    2*

    incio

    sigdato sigdato sigdato

    null

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    30/56

    $ilas

    Dinámicas

    3,

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    31/56

    )aracter9sticas

    • #e remue4e del tope y se agrega en eltope de la pila 'LI%O Last In %rist Out(!

    Operaciones)reapila '(

    -uitar '( ++'1 pop(

    Agregar 'int dato( ++'1 pus;(

    .acia '(

    31

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    32/56

    )rear una $ila

    crea$ila /

    0odo inicio 1 null2

    3

    32

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    33/56

    Agregar un nodo a la $ila 'pus;(

    agrega$odo int info-#

      nodo nue4o 1 ne5 nodo'(2

    nue4o!dato 1 ino2  nue4o!sig 1 inicio2

    inicio 1 nue4o2

    3

    33

    siginfo sigdato sigdato sigdato null

    nuevo

    inicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    34/56

    -uitar elemento de la $ila'pop( int 7uitar '(/

    int d2  d 1 inicio!dato2

    inicio 1 inicio!sig2  return d2

     3

    34

    siginfo sigdato sigdato sigdato null

    inicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    35/56

    $ara 4ericar si una pila está4ac9a 

    Boolean 4acia '(/

    return 'inicio 11 null(2

    3

    35

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    36/56

    Ligas de animación para la y

    pila• ;ttp*++555!cse!iit?+applets+#tac

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    37/56

    Lista doblemente enla%ada

    37

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    38/56

    $odo

    public class Nodo {

      pri"ate int dato;  // almacena el dato

      pri"ate Nodo sig; // enlace al pró$imo nodo

      pri"ate Nodo ant; // enlace al nodo anterior

    }

    3)

    anterior

    Datos

    25

    siguiente

    nodo

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    39/56

    &peraciones de una lista doblemente enla%ada

    •  'adir o insertar elementos.

    • uscar elementos.

    • orrar elementos.

    • *overse a trav+s de la lista, siguiente y

    anterior.

    3*

    -nicio si%

    antnull

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    40/56

    4,

    Presentación %rfica

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    41/56

    41

    Presentación %rfica

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    42/56

     'adir elemento a una lista vac-a

    42

    nue'o.ant  8 nue'o.si%  son +&CC.

    nue'o

    inicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    43/56

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    44/56

    Caso Insertar un elemento en la @ltima posición

    Insertarltimo (Nodo nue"o#

    +,. nue"o.sig - null // por ocupar la @ltima posición

    ,. au$.sig - nue"o // el @ltimo nodo actual

    2,. nue"o.ant - au$ // apuntará a au$. 

    44

    +ue'oau9 

    1ato 1ato 1ato

    1atonull

    0

    /

    . . . . nue'o

    au9

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    45/56

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    46/56

    =liminar 

     Caso + 7liminar el @nico nodo 7n este caso! ese nodo es el apuntado por inicio.

     

    7liminamos el nodo! *acemos ue inicio sea NDD

      inicio - null; 

    46

    . . . .

    inicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    47/56

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    48/56

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    49/56

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    50/56

    Lista )ircular

    5,

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    51/56

    Cista ircular 

    • @na lista circular es una lista linealen la 7ue el ltimo nodo apunta alprimero!

    51

    inicio fin

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    52/56

    &peraciones de una lista circular 

    las operaciones 7ue se pueden reali&arsobre las listas circulares *

     –  ?@adir o insertar elementos.

     –  >uscar o locali9ar elementos.

     –  >orrar elementos.

     –  Mo&erse a tra&!s de la lista recorrer-

    52

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    53/56

    #nsertar un elemento

    *nsertar elemento en la lista &ac'a>! inicio ++apunta a nodo 

    =! inicio!sig ++apunta a nodo 

    *nsertar elemento en una lista no&ac'a

    ! nodo!sig 1 n!sigC! n!sig 1 nodo 

    53

    inicio

    fininicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    54/56

    liminar un elemento de la lista

    • Eliminar el nico nodo de la lista!>! Borramos el nodo apuntado por

    inicio!

    =! acemos 7ue inicio 4alga 0@LL!

    • Eliminar un nodo en una listacircular con más de un elemento >! 0odo aux 1 inicio

    =! mientras aux!sig 61 nodo

    aux1aux!sig! aux!sig 1 nodo!sig

    54

    au9

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    55/56

    liminar un elemento de la lista circular 

    • )aso general  0odo aux 1nodo!sig

    >! )opiamos el contenido del nodo!sig sobre elcontenido de nodo* nodo!dato 1 aux!dato

    =! acemos 7ue nodo!sig 1 aux!sig

    ! Eliminamos nodo!sig aux1null

    55

    inicio

  • 8/18/2019 Estructuras Dinamicas Lineales (Estructuras de Datos)

    56/56

    %in del cap9tulo LI#"A#, %ILA# y

    $ILA# dinámicas