cap vi, strings.pdf

Upload: pamela-vasquez-costales

Post on 11-Feb-2018

227 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/23/2019 Cap VI, STRINGS.pdf

    1/45

    FACULTAD DE INGENIERA

    ESCUELA DE INGENIERA ENSISTEMAS Y COMPUTACIN

    ESTRUCTURA DE DATOS

    Pamela Vsquez Costales

  • 7/23/2019 Cap VI, STRINGS.pdf

    2/45

    UNIDAD II

    CAPTULO VI

    STRINGS

  • 7/23/2019 Cap VI, STRINGS.pdf

    3/45

    STRINGS

    Objetivos

    O Definir qu es un string y cmo sedisea bajo las reglas de laabstraccin de datos.

    O

    Conocer algunas de las opciones derepresentacin para el TDA string,analizando sus ventajas y desventajas.

  • 7/23/2019 Cap VI, STRINGS.pdf

    4/45

    Qu es un string y por qu esimportante su anlisis?

    La palabra string hace referencia a unacadena de caracteres. Su estudio cobra

    importancia cuando se toma enconsideracin que la mayor parte de lainformacin que se maneja actualmenteen casi cualquier rea del conocimiento,

    puede verse como una secuencia decaracteres.

  • 7/23/2019 Cap VI, STRINGS.pdf

    5/45

    De qu forma conceptualizar unstring como un TDA?

    Dada la importancia de los strings, es

    conveniente considerarlos como unaestructura de datos que contendr el

    conjunto de operaciones ms relevantespor realizar. Partiendo de esto, el primerpaso sera definir el TDA que representa

    la estructura que se desea disear.

  • 7/23/2019 Cap VI, STRINGS.pdf

    6/45

    Se pueden disear muchos TDA quedefinan un string considerando quoperaciones se tomarn como bsicas

    para el funcionamiento de dicha

    estructura y cul ser el conjunto decaracteres que se aceptarn como partede l.

    Una posible definicin para el TDA de unstring sera la siguiente:

  • 7/23/2019 Cap VI, STRINGS.pdf

    7/45

  • 7/23/2019 Cap VI, STRINGS.pdf

    8/45

  • 7/23/2019 Cap VI, STRINGS.pdf

    9/45

  • 7/23/2019 Cap VI, STRINGS.pdf

    10/45

    Cmo se puede representar el TDA

    del string?

    Hay diversas posibilidades pararepresentar una cadena de caracteres.

    Se puede almacenar en la memoriacontigua, como sera el caso de unarreglo; tambin podra utilizarse

    almacenamiento no contiguo, como laslistas encadenadas. Incluso en estas dosposibilidades se pueden generar una

    gran cantidad de variantes.

  • 7/23/2019 Cap VI, STRINGS.pdf

    11/45

    Cules son las formas mscomunes de representacin con

    almacenamiento contiguo?

    Generalmente, la representacin enmemoria contigua se basa en el uso de

    arreglos de caracteres. Los msutilizados son:

  • 7/23/2019 Cap VI, STRINGS.pdf

    12/45

    Forma 1: uso de un carctercentinela

    En este tipo de representacin, loscaracteres que conforman el string se

    almacenan en un arreglo de caracterescon longitud predefinida. El string actualse delimita con un carcter especial (que

    no forma parte del conjunto de

    elementos del string) colocado al final delos caracteres que estn almacenados en

    l.

  • 7/23/2019 Cap VI, STRINGS.pdf

    13/45

    Obviamente, en este tipo de repre-sentacin se debe considerar que el

    centinela es un carcter que ocupar unespacio; por lo tanto, se debe tomar en

    cuenta al calcular la longitud mxima quetendr el string

  • 7/23/2019 Cap VI, STRINGS.pdf

    14/45

    La principal desventaja de este tipo de

    representacin es que se desconoce lalongitud actual de un string, elemento

    que se requiere para realizar grancantidad de operaciones. Cuando esto

    ocurre, este valor se debe calcularcontinuamente. Por ejemplo, en el

    lenguaje C, los strings estn delimitadospor el carcter nulo, representado por la

    secuencia '\0'.

  • 7/23/2019 Cap VI, STRINGS.pdf

    15/45

    En la figura se muestra grficamente

    este tipo de representacin:

  • 7/23/2019 Cap VI, STRINGS.pdf

    16/45

    Forma 2: almacenamiento de lalongitud actual de un string

    En este tipo de representacin, tambinlos caracteres se almacenan en un

    arreglo de extensin predefinida. Eneste modelo la longitud actual del stringse almacena en la primera posicin delarreglo (generalmente la posicin 0)

    que no forma parte del string aunquecomparte la misma definicin de datos.

  • 7/23/2019 Cap VI, STRINGS.pdf

    17/45

    La principal desventaja de este tipo derepresentacin es que, debido a que lalongitud se almacena en una posicin

    de tipo carcter, la longitud mxima del

    string se restringe (a 255 caracteres).Este tipo de representacin se emplea

    para almacenar los strings en ellenguaje Pascal. Grficamente, este tipo

    de representacin se muestra en lasiguiente figura:

  • 7/23/2019 Cap VI, STRINGS.pdf

    18/45

  • 7/23/2019 Cap VI, STRINGS.pdf

    19/45

    Cules son las formas mscomunes de representacin conalmacenamiento no contiguo?

    Cuando se emplea almacenamiento nocontiguo, generalmente se usan listasencadenadas debido a la relacin linealque se establece entre los elementos

    que conforman el string. Las mscomunes, dentro de las variantes que sepueden generar con este formato, son:

  • 7/23/2019 Cap VI, STRINGS.pdf

    20/45

    Forma 1: lista encadenada de nodoscon un carcter por nodo

    En este modelo se genera una listaencadenada donde cada uno de los

    nodos almacena nicamente a uno delos caracteres del string y la direccin

    donde se encuentra el siguiente nodo dela lista como se indica en la figura:

  • 7/23/2019 Cap VI, STRINGS.pdf

    21/45

  • 7/23/2019 Cap VI, STRINGS.pdf

    22/45

    La principal ventaja de este tipo de

    representacin es que se puedengenerar strings de longitud "infinita" yaprovechar fcilmente las operacionesdefinidas, sobre una lista encadenada

    para implantar las operaciones propiasdel string. Sin embargo, este modelo

    presenta una fuerte desventaja:desperdicia mucha memoria (hasta

    80%) debido al almacenamiento detantas direcciones de nodos que es

    indispensable guardar.

  • 7/23/2019 Cap VI, STRINGS.pdf

    23/45

    Forma 2: lista encadenada de nodos

    con N caracteres por nodoEn este tipo de representacin se generauna lista encadenada donde cada uno de

    los nodos almacena Ncaracteres delstring (N > 1) y la direccin donde seencuentra el siguiente nodo de la lista.

  • 7/23/2019 Cap VI, STRINGS.pdf

    24/45

    La principal ventaja de este tipo de

    representacin es que se puedengenerar strings de longitud "infinita" y sedisminuye un poco el desperdicio de

    memoria generado con la representacin

    anterior.

  • 7/23/2019 Cap VI, STRINGS.pdf

    25/45

    Sin embargo, este modelo tiene una

    gran desventaja: la implementacin desus operaciones es ms compleja, yaque la informacin contenida en el stringest almacenada en forma de substrings

    en diferentes nodos de una listaencadenada lo que dificulta el

    movimiento de caracteres dentro delstring.

  • 7/23/2019 Cap VI, STRINGS.pdf

    26/45

    Dependiendo del valor que se establezca

    para N, grficamente este modelo semuestra en la siguiente figura, alsuponer un valor de N = 6:

  • 7/23/2019 Cap VI, STRINGS.pdf

    27/45

    Cules son las variantes de una

    lista encadenada?Si se consideran las caractersticas deuna lista encadenada es posible generar

    diversas variantes de gran utilidad.

    Entre las ms comunes se encuentran:O Listas encadenadas circulares

    O Listas doblemente encadenadas

    O Listas doblemente encadenadascirculares

    O Listas con mltiples encadenamientos

  • 7/23/2019 Cap VI, STRINGS.pdf

    28/45

    Cmo es una lista encadenadacircular?

    Es una ligera variante de la listaencadenada lineal; se obtiene al

    considerar el "primer" nodo de la listacomo el sucesor del ltimo nodo,

    almacenando la direccin del primerelemento en el campo de direccin del

    ltimo, en lugar de almacenar ladireccin nula.

  • 7/23/2019 Cap VI, STRINGS.pdf

    29/45

    Al realizar esta modificacin se generaautomticamente un crculo, donde

    realmente ya no existe ni el primero niun ltimo elemento.

  • 7/23/2019 Cap VI, STRINGS.pdf

    30/45

    Caractersticas generales de unalista circular

    O Es necesario mantener un apuntadorgeneral a la estructura (Lista), aunque

    ya no apunte obligatoriamente alprimer elemento.

    O La direccin nula no existe en la lista,excepto cuando la lista est vaca.

    O Si la lista contiene un solo elemento, elcampo de direccin apuntar a esemismo nodo.

  • 7/23/2019 Cap VI, STRINGS.pdf

    31/45

    O Como la lista es un crculo, es posiblellegar a cualquier nodo de la lista apartir de cualquiera de sus nodos, loque es imposible en una lista lineal

    como indica la figura: Esquema de unalista encadenada circular.

  • 7/23/2019 Cap VI, STRINGS.pdf

    32/45

    Cdigo en lenguaje C++ de lasinstrucciones que sirven para desplegar la

    informacin de una lista circular:

    Observe la importancia de validar el casoextremo de la lista vaca, y de controlar

    con un ciclo do...while el desplegado de lainformacin.

  • 7/23/2019 Cap VI, STRINGS.pdf

    33/45

    Cmo es una lista doblementeencadenada?

    Este tipo de listas se utilizan cuando la

    aplicacin sobre una lista encadenadadebe recorrer la lista en ambos sentidos,

    algo imposible de realizar en una listaencadenada lineal y, aunque es posible

    hacerlo en una lista circular, resulta muyineficiente.

  • 7/23/2019 Cap VI, STRINGS.pdf

    34/45

    Caractersticas generales de unalista doblemente encadenada

    O Se requiere mantener un apuntador

    general a la estructura (Lista), a pesarde que los nodos conocen a supredecesor y a su sucesor. No esnecesario que lista apunte al primer

    elemento de la lista, ya que siempre sepodr llegar a l como indica la figura:

  • 7/23/2019 Cap VI, STRINGS.pdf

    35/45

    Esquema de una lista doblementeencadenada

  • 7/23/2019 Cap VI, STRINGS.pdf

    36/45

    O Cada nodo requiere almacenar, ademsdel elemento, dos direcciones: la delpredecesor y la del sucesor.

    O El movimiento de apuntadores puede

    hacerse en ambas direcciones.

  • 7/23/2019 Cap VI, STRINGS.pdf

    37/45

    Los nodos de una lista doblementeencadenada se definiran de la siguiente

    manera en el lenguaje C++:

  • 7/23/2019 Cap VI, STRINGS.pdf

    38/45

    La eliminacin del nodo sealado por elapuntador P en una lista doblemente

    encadenada, requerir de las siguientesinstrucciones en lenguaje C++:

  • 7/23/2019 Cap VI, STRINGS.pdf

    39/45

    La insercin de un nodo despus delnodo sealado por el apuntador P enuna lista doblemente encadenada,

    requerir de las siguientes instrucciones

    en lenguaje C++:

  • 7/23/2019 Cap VI, STRINGS.pdf

    40/45

    Cmo es una lista doblementeencadenada circular?

    En este tipo de listas, cada nodo

    almacena la direccin de su sucesor y desu predecesor. No existe un inicio ni un

    final.

  • 7/23/2019 Cap VI, STRINGS.pdf

    41/45

    Caractersticas generales de una

    lista circular doblemente enca-denada circular

    O Se requiere mantener un apuntadorgeneral a la estructura (Lista), a pesarde que los nodos conocen a supredecesor y a su sucesor. Este

    apuntador puede guardar la direccinde cualquier nodo de la lista comoindica la figura:

  • 7/23/2019 Cap VI, STRINGS.pdf

    42/45

    Esquema de una lista doblemente

    encadenada circular

  • 7/23/2019 Cap VI, STRINGS.pdf

    43/45

    O Cada nodo requiere almacenar, ademsdel elemento, dos direcciones (la delpredecesor y la del sucesor).

    O La direccin nula no existe en la lista,

    excepto cuando est vaca.O Si la lista contiene un elemento, el

    campo de direccin apuntar a esemismo nodo.

    O El movimiento de apuntadores puedehacerse en ambas direcciones.

  • 7/23/2019 Cap VI, STRINGS.pdf

    44/45

    Cmo es una lista con mltiplesencadenamientos?

    Esta variante permite mezclar listas que

    contienen diferentes elementos. Loanterior se logra cuando los nodosalmacenan la direccin de otra lista

    como indica la figura.

  • 7/23/2019 Cap VI, STRINGS.pdf

    45/45

    Esquema de una lista con mltiples

    encadenamientos

    Estas mezclas pueden llegar a ser tancomplejas como la aplicacin lo requiera.