cap vi, strings.pdf
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.