Você está na página 1de 65

Estructuras de datos bsicas

Secuencias
Xavier Sez Pous
PID_00146766

Primera edicin: se tiembre !010 " Xavier Sez Pous #odos $os derec%os reservados " de esta edicin& '()*& !010 +v, #ibidabo& -./4-& 000-1 2arce$ona Dise3o: 4ane$ +ndreu 5ea$izacin editoria$: Eureca 4edia& S6 IS27: .70/04/6.-/4!-./0 De sito $e8a$: 2/--,171/!010
Ninguna parte de esta publicacin, incluido el diseo general y de la cubierta, puede ser copiada, reproducida, almacenada o transmitido de ninguna manera ni por ningn medio, tanto elctrico como qumico, mecnico, ptico, de grabacin, de fotocopia, o por otros mtodos, sin la autorizacin previa por escrito de los titulares del copyright de los titulares del copyright

, '()*9 PID_00146766

Estructuras de datos bsicas

ndice

Introduccin ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 1 Objetivos ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 7 1. Pilas ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, . 1,1, 5e resentacin,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, . 1,!, ) eraciones,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 10 1,-, Im $ementacin ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 1! 1,4, E:em $o,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 14 2. Colas ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 16 !,1, 5e resentacin,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 16 !,!, ) eraciones,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 17 !,-, Im $ementacin ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 10 !,4, E:em $o,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, !1 3. Listas ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, !-,1, 5e resentacin,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, !-,!, ) eraciones,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, !4 -,-, Im $ementacin ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, !1 -,-,1, -,-,!, Im $ementacin secuencia$ ,,,,,,,,,,,,,,,,,,,,,,,,,, !1 Im $ementacin encadenada,,,,,,,,,,,,,,,,,,,,,,,,, !0 -,4, E:em $o,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -4. Punteros ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -1 4,1, Prob$emasde$os vectores ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -1 4,!, 6a a$ternativa: unteros,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -1 4,-, Im $ementacin ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -7 4,-,1, 4,-,!, 4,-,-, 4,4,1, 4,4,!, 4,4,-, 4,4,4, 4,4,1, 4,4,6, Pi$a ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -7 *o$a ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -. 6ista ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 41 4,4, Pe$i8rosde$os unteros,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 46a memoria dinmicanoes in,nita ,,,,,,,,,,,,,,,,,, 4E$ ;uncionamiento de$#+D de ende de $a re resentacin esco8ida ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 44 E;ectos $atera$es,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 40 5e;erencias co$8adas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 4. 5eta$es,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 4. *onc$usin,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 11 4,1, E:em $o de im $ementacin de,nitiva: $ista encadenada , , , , , 1!

, '()*9 PID_00146766 Estructuras de datos bsicas

4,6, )tras variantes,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 11 4,6,1, 6istas circu$ares,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 11 4,6,!, 6istas dob$emente encadenadas ,,,,,,,,,,,,,,,,,,,,,, 16

4,6,-, 6istas ordenadas ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 16 Resumen ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 1. Actividades ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 66 60 6jercicios "losario de autoevaluacin ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 6! 64 !olucionario #iblio$ra%&a

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

(n ti'o de datos consta de un con:unto de va$ores< de una serie de o eraciones =ue ueden a $icarse a esos va$ores, 6as o eraciones deben cum $ir ciertas ro iedades =ue determinarn su com ortamiento,

6as o eraciones necesarias ara traba:ar con una secuencia son:

9 9 9 9

*rear $a secuencia vac>a, Insertar un e$emento dentro de $a secuencia, 2orrar un e$emento de $a secuencia, *onsu$tar un e$emento de $a secuencia,

E$ com ortamiento =ue se estab$ezca ara cada una de $as o eraciones ?@dnde se inserta un e$emento nuevoA @=uB e$emento se borraA @=uB e$emento se uede consu$tarAC de,nir e$ ti'o de datos =ue necesitaremos,

6as o eraciones de$#+D se dividirn en constructoras ?devue$ven un va$or de$ mismo ti oC< consultoras ?devue$ven un va$or de otro ti oC, Dentro de $as o eraciones constructoras& se denominarn $eneradoras $as =ue ;ormen arte de$ con:unto m>nimo de o eraciones necesarias ara 8enerar cua$=uier va$or de$ ti o& mientras =ue e$ resto se denominarn modi.cadoras,

En este mdu$o nos centraremos en $os tres#+D ms t> icos ara re resentar $as secuencias:

9 9 9

Pi$as *o$as 6istas resentar e$ ti ode una manera intuitiva ara entendere$

6a eD $icacin de cada ti o se8uir $a misma estructura, Primero& se una im $ementacin de$ ti o acom a3ada de a$8Fn e:em $o ara ver su uso,

conce to,+continuacin& se describir e$ com ortamiento de $as o eraciones de$ ti o de una manera ;orma$,E& ara acabar& se desarro$$ar

, '()*9 PID_00146766 7 Estructuras de datos bsicas

Objetivos

+$ ,na$izar este mdu$o %abrBis a$canzado $os ob:etivos si8uientes:

1, !, -, 4, 1,

*onocer $os#+D pila& cola <listaG<saber =uB ro iedades $os di;erencian, Dado un rob$ema& decidir cu$ es e$ #+D ms adecuado ara a$macenar $os datos<saber$o usar, Ser ca azde im $ementar cua$=uierade $os#+D resentados ene$ mdu$o& mediante e$ uso de vectores o unteros, Ser tambiBn ca az de im $ementar nuevas o eraciones en estos#+D, Entender $os costes ?tem ora$es<es acia$esC =ue se derivan de $as di;erentes im $ementaciones de un#+D&<va$orar se8Fn estos criterios cu$ es $a me:or im $ementacin en cada situacin, *odi,car a$8oritmos mediante e$ uso de $os#+D resentados,

En nuestravidadiaria odemos ver estecom ortamiento mu<a menudo, Por e:em $o&si a i$amos$os $atosde una va:i$$a& Fnicamente odremosco8ere$F$timo $ato a3adido a$a i$a& or=uecua$=uierintentodeco8erun $atode$ mediode$a i$a?comoe$ $ato oscurode$a,8ura!C acabar en un destrozo, )tro e:em $o$o tenemos en$os :ue8osde cartas&en$os=ue8enera$mente robamos$ascartas?de unaenunaCde$a artesu erior de$ mazo ?,8ura !C,

'i8ura !,Pi$a de $atos<de cartas

Ene$ mundoin;ormtico tambiBn encontramos i$as&como ore:em $o& en$os nave8adores Heb, *ada vez =ue accedemosa una nueva 8ina&e$ nave8ador$a a3adea una

, '()*9 PID_00146766 10 Estructuras de datos bsicas

i$ade 8inasvisitadas&de manera =uecuando se$eccionamos$ao cin+nterior& e$ nave8adorco8e$a 8ina=uese encuentraen$acimade$a i$a& or=uees :ustamente$a F$tima 8ina visitada, )tro e:em $o$o tenemos en$os rocesadoresde teDtos& en$os =ue$oscambiosintrodu/

Recordad 5ecordad =ue $as o eraciones constructoras son $as o eraciones =ue modi,can e$ estado de $a i$a& mientras =ue $as o eraciones consu$toras son $as =ue consu$tan e$ estado de $a i$a sin modi,car$a,

ti'o i$a ?e$emC o'eraciones crear: I i$a a i$ar: i$a e$em I i$a desa i$ar: i$a I i$a cima: i$a I e$em vacia: i$a I boo$eano errores desa i$ar?crearC cima?crearC ecuaciones p pilaG e elem desa i$ar?a i$ar? &eCC J cima?a i$ar? &eCC J e vacia?crearC J cierto vacia?a i$ar? &eCC J ;a$so %ti'o

En $a si8natura de$ ti o&


9 Kab$amos de 'ila(elem) ara denotar =ue $a i$a a$macena e$ementos de$ ti o 8enBrico elem,

, '()*9 PID_00146766 1- Estructuras de datos bsicas

donde se %a$$a $a cima de $a i$a, Este a untador tambiBn dividir e$ vector en dos artes: arte ocu ada< arte $ibre, ti'o i$a J tu'la ! : tabla L"!#Mde elemG nelem : enteroG %tu'la ;ti o Dada $a re resentacin de$ ti o& e$ si8uiente aso es im $ementar $as o eraciones de$ ti o i$a: %uncion crear?C: 'ila var p: 'ila %var p,nelem :J 0G devuelve pG %%uncion %uncion a i$ar?p: 'ilaG e : elemC:'ila si p,nelem J "!# entonces error Npila llenaOG sino p,nelem :J p,nelem P1G p,!Lp,nelemM:JeG %si devuelve pG %%uncion %uncion desa i$ar?p: 'ilaC:'ila si p,nelem J0entonces error Npila vaciaOG sino p,nelem :J p,nelem /1G %si devuelve pG %%uncion %uncion cima?p: 'ilaC:elem var e : elem %var si p,nelem J0entonces error Npila vaciaOG sino e :J p,!Lp,nelemMG %si devuelve eG %%uncion

Queda or %acer un an$isis a roDimado de $a e,ciencia tem ora$ < es acia$ de $a im $ementacin ara va$orar su va$idez, Para %acer$o& se ca$cu$ar e$ coste asinttico& & de cada o eracin,

E$ coste tem'oral de $as o eraciones es timo& ?1C& <a =ue no %a< nin8Fn buc$e en e$ cuer o de $as ;unciones, Por otro $ado& e$ coste es'acial es bastante obre& ?"!#C& <a =ue e$ vector reserva un es acio ?concretamente& "!# nFmero de e$ementos =ue a$macene $a i$a en un momento dado, osicionesC inde endientemente de$

1.4. jem'lo $e pide de nir una nueva operacin que ample el %!& pila 'a operacin se denominar invertir ydar la vuelta al contenido de la pila( es decir, el primer elemento de la pila pasar a ser el ltimo, el segundo pasar a ser el penltimo, y as sucesivamente ) gura *+

'i8ura 1, ) eracin invertir

cima cima

* l +ltimo elemento ,ue entra es el 'rimero en salir.

V n

V 1

*on e$ ob:etivo de im $ementar $a nueva o eracin& a rovec%aremos e$ com ortamiento LI-O de $as i$asR ara $eer $os e$ementos de $a i$a en orden inverso de $$e8ada, +s>& bastar con desa i$ar cada e$emento de $a i$a ori8en <& a continuacin& a i$ar$o en $a i$a resu$tado, De este modo obtendremos ;ci$mente una i$a en $a =ue $os e$ementos estarn en orden inverso a$ =ue ten>an en $a i$a ori8ina$, E$ a$8oritmo de $a o eracin invertir constar de $os si8uientes asos: 1) *rear $a i$a resu$tado en $a =ue se a i$aran $os e$ementos, 2) 6eere$ e$ementode$a cimade$a i$a ori8en<a i$ar$oen$a i$a resu$tado,

, '()*9 PID_00146766 11 Estructuras de datos bsicas

3) Desa i$ar e$ e$emento acabado de $eer de $a cima de $a i$a ori8en, 4) So$ver a$ unto!mientras $a i$a ori8en no estB vac>a, 'ina$mente& im $ementamos $a o eracin: %uncion invertir?p: 'ilaC:'ila var pinv : 'ila %var pinv :J crear?CG mientras Tvacia?pC.acer pinv :J apilar?pinv&cima?pCCG p:J desapilar?pCG %mientras devuelve pinvG %%uncion

n in$l/s0 una cola suele denominarse con las si$las -I-O (.rst in .rst out).

(na cola es un#+D caracterizado or e$ %ec%o =ue e$ rimer e$emento en entrar es e$ rimero en sa$ir,

6a de,nicin de co$a nos indica =ue $as o eraciones traba:an sobre ambos eDtremos de $a secuencia: un eDtremo reviamente& <a =ue se insertan or e$ ,na$ de $a secuencia< se eDtraen or $a cabecera ?,8ura 6C,

ara a3adir $os

e$ementos<e$ otro ara consu$tar$os o eDtraer$os, En otras a$abras& $os e$ementos se eDtraen en e$ mismo orden en =ue se %an insertado

'i8ura 6, 5e resentacin de una co$a

Encolar Desencolar

jem'losde colas 6asco$asa arecena menudo en nuestravidadiaria,,,Sinir ms$e:os& odemos a,rmar =ue asamos una artede nuestravida %aciendoco$as: aracom rar$a entrada en un cine& ara a8ar en $a ca:a de un su ermercado& ara visitarnos or e$ mBdico& etc, 6a idea siem re es $a misma: se atiende $a rimera ersona de $a co$a& =ue es $a =ue %ace ms rato=uees era&< una vez atentidasa$ede$aco$a<$a ersonasi8uiente asaa ser$a rimerade$aco$a ?,8ura7C,

'i8ura 7, *o$a de moc%i$as ara entrar en un a$ber8ue

1 !

'()*9 PID_00146766 17 Estructuras de datos bsicas '()*9 PID_00146766 1. Estructuras de datos bsicas

mantener $a condicin or $a cua$ U el inicio de la cola es siempre la primera posicin del vectorV nos ob$i8a a des $azar todos $os e$ementos una osicin ?como se uede ver en $a ,8ura 10C, Este des $azamiento com orta =ue $a o eracin ten8a un coste $inea$ ?nelemC,
'i8ura 10, ) eracin desencolar

A A
1234567 MAX

cabeza cabeza

A nelem = 7

cabeza

nelem = 6

Para me:orar $a im $ementacin anterior a3adimos un nuevo atributo entero ? rimC& =ue a untar a$ rimer e$emento de $a co$a de modo =ue $os dos eDtremos de $a misma se des $azarn sobre e$ vector& mientras =ue $os e$ementos a$macenados no se movern ?,8ura 11C, De esta manera& $a nueva re resentacin so$uciona e$ rob$ema de $a ine,ciencia en $a o eracin desenco$ar& or=ue siem re =ue se su rima un e$emento de $a co$a bastar con incrementar e$ atributo rim ara a untar a$ e$emento si8uiente,
'i8ura 11, ) eracin desencolar con e$ cam o rim

Es ms& esta so$ucin consi8ue =ue todas $as o eraciones ten8an un coste timo ?1C, Sin embar8o& resenta otro rob$ema 8rave: desa'rovec.a muc.o es'acio& <a =ue no se reuti$izan $as osiciones $iberadas en $a arte inicia$ de$ vector& %asta e$ unto de =ue si enco$amos<desenco$amos muc%as veces ?;ruto de un uso norma$ de $a co$aC nos odemos =uedar sin es acio& inc$uso aun=ue $a co$a ten8a so$o un e$emento, Para rea rovec%ar estas osiciones inicia$es sin mover $os e$ementos& consideraremos =ue e$ vector es una estructura circular& es decir& =ue des uBs de $a F$tima osicin de$ vector vendr $a rimera osicin, Estamos ante una estructura sin rinci io ni ,n& ta$ como odemos ver en $a ,8ura 1!,

'i8ura 1!, 5e resentacin de una co$a en un vector circu$ar

MAX-1 MAX

MAX-3 MAX

123 4

MAX-2

AA
MAX-3

2 3

prim = MAX-3 ult = 3 ultprim nelem = 7


4

Para $estionar el vector circularmente recurrimos a $a o eracin mdulo& =ue ca$cu$a e$ residuo de $a divisin de dos nFmeros enteros, Dada $a osicin p de un vector de tama3o m& e$ c$cu$o ara averi8uar $a si8uiente osicin de$ vector es: ? mod mCP1

+s> ues& $a re resentacin esco8ida ser $a de$ vector circular con el 'untero rim, E$ coste tem'oral de $as o eraciones ser timo& ?1C& mientras =ue e$ coste es'acial ser tan obre como en $as i$as ?"!#C?<a =ue e$ vector se crea inicia$mente con un tama3o "!#C, 7o obstante& $a im $ementacin circu$ar consi8ue $$enar todo e$ vector 8racias a $a reuti$izacin de $as osiciones $iberadas ara a$macenar nuevos e$ementos, ti'o co$a J tu'la ! : tabla L"!#Mde elemG prim&ult&nelem : enteroG %tu'la ;ti o Dada $a re resentacin de$ ti o& mostramos $a im $ementacin de $as o eraciones de$ ti o co$a: %uncion crear?C: cola var c : cola %var c,prim:J 1G c,ult :J 0G c,nelem :J 0G devuelve cG %%uncion %uncion enco$ar?c : colaG e : elemC:cola si c,nelem J "!# entonces error Ncola llenaOG sino c,ult :J?c,ult mod "!#CP1G c,!Lc,ultM:JeG c,nelem :J c,nelem P1G %si devuelve cG %%uncion

, '()*9 PID_00146766 !1 Estructuras de datos bsicas

%uncion desenco$ar?c : colaC:cola si c,nelem J0entonces error Ncola vaciaOG sino c,prim:J?c,prim mod "!#CP1G c,nelem :J c,nelem /1G %si devuelve cG %%uncion %uncion cabeza?c : colaC:elem var e : elem %var si c,nelem J0entonces error Ncola vaciaOG sino e :J c,!Lc,primMG %si devuelve eG %%uncion %uncion vacia?c : colaC:booleano devuelve c,nelem J 0G %%uncion %uncion $$ena?c : colaC:booleano devuelve c,nelem J "!#G %%uncion

2.4. jem'lo $e pide de nir una nueva operacin, denominada interseccion, que ample el %!& cola ,sta operacin recibir como entrada dos colas con los elementos ordenados de manera crecientey devolver una cola ordenada de forma estrictamente creciente solo con los elementos que aparezcan en las dos colas de entrada ) gura -.+

E$ %ec%o =ue $a co$a estB ordenada nos evita tener =ue recorrer toda $a co$a cada vez =ue =ueramos com robar si contiene un e$emento dado, En otras a$abras& si e$ rimer e$emento de $a co$a a es ms e=ue3o =ue e$ rimer

, '()*9 PID_00146766 !! Estructuras de datos bsicas

e$emento de $a co$a b& <a es se8uro =ue no encontraremos un e$emento i8ua$ en toda $a co$a b& or=ue todos $os e$ementos de $a co$a b sern ma<ores =ue e$ rimero de $a co$a a, Por $o tanto& con esta in;ormacin estab$ecemos =ue $a estrate8ia de $a o eracin interseccion ser $a si8uiente: 1) *rear $a co$a en $a =ue se enco$arn $os e$ementos comunes a ambas co$as de entrada, 2) 4ientras $as dos co$as no estBn vac>as& $eer e$ rimer e$emento de ambas, 3) Si $os dos e$ementos son i8ua$es& enco$ar e$ e$emento en $a co$a resu$tado < desenco$ar$o de $as dos co$as de entrada, En caso contrario& si $os dos e$ementos no son i8ua$es& desenco$ar so$o e$ e$emento ms e=ue3o, 4) So$ver a$ unto!mientras no se %a<a vaciado nin8una de $as dos co$as, 'ina$mente& im $ementamos $a o eracin si8uiendo e$ es=uema anterior: %uncion interseccion?c1:colaG c!:colaC:cola var c-:cola %var c-:Jcrear?CG mientras Tvacia?c1C Tvacia?c!C .acer si cabeza?c1CJ cabeza?c!C entonces c-:Jencolar ?c-&cabeza?c1CCG c1:Jdesencolar ?c1CG c!:Jdesencolar ?c!CG sino si cabeza?c1CW cabeza?c!C entonces c1:Jdesencolar ?c1CG sino c!:Jdesencolar ?c!CG %si %si %mientras devuelve c-G %%uncion

J ti'o $ista ?e$emC o'eraciones crear: I $ista insertar: $ista e$em I $ista borrar: $ista I $ista actua$: $ista I e$em vacia: $ista I boo$eano rinci io: $ista I $ista avanzar: $ista I $ista ,n: $ista I boo$eano errores borrar?Ws&XC avanzar?Ws&XC actua$?Ws&XC

ecuaciones W s&t X listaG e elem crear JW&X insertar?Ws& tX& eC J Wse& tX borrar?Ws& etXC J Ws& tX rinci io?Ws& tXC J W & stX avanzar?Ws& etXC J Wse& tX actua$?Ws& etXC J e Lt J M ,n?Ws& tXC J cierto Lt J,M ,n?Ws& tXC J ;a$so vacia?crearC J cierto vacia?insertar?Ws& tX&eCC J ;a$so %ti'o

En este caso& e$ con:unto de o'eraciones constructoras $eneradoras est ;ormado or crear& insertar < rinci io, Por tanto& $a m>nima secuencia de $$amadas =ue necesitaremos ara obtener $a $ista W%o&$aXes una combinacin

6a re resentacin re=uiere tres e$ementos: un vector?+C& un indicador de$ nFmerode e$ementos a$macenados?ne$emC<un indicador de$ untode interBso e$emento distin8uido?actC,

, '()*9 PID_00146766 !6 Estructuras de datos bsicas

E$ indicador ne$em nos sirve ara contro$ar =ue no sobre asemos e$ nFmero mDimo de e$ementos?4+XC=ue uede a$macenar e$ vector& mientras =ue e$ indicador act a unta a$ e$emento distin8uido de $a $ista ?,8ura 11C,

V 1

V2 !!! Vi-1" Vi Vi#1 !!! V$

n act

ti'o $ista

tu'la ! : tablaL"!#Mde elemG act&nelem : enteroG

%tu'la %ti'o Dada $a re resentacin de$ ti o& im $ementamos $as o eraciones de$ ti o $ista: %uncioncrear?C: lista var l : lista %var l,act :J 1G l,nelem :J 0G devuelve lG %%uncion %uncion insertar?l : listaG e : elemC:lista var i : entero %var si l,nelem J "!# entonces error Nlista llenaOG sino 'ara i :J l,nelem .asta l,act 'aso /1 .acer l,!LiP1M :J l,!LiMG %'ara l,!Ll,actM:JeG l,nelem :J l,nelem P1G l,act :J l,act P1G %si devuelve lG %%uncion

, '()*9 PID_00146766 !7 Estructuras de datos bsicas

%uncion borrar?l : listaC:lista var i : entero %var si l,act X l,nelem entonces error N n de lista o lista vaciaOG sino 'ara i :J l,act .asta l,nelem /1 .acer l,!LiM:Jl,!LiP1MG %'ara l,nelem :J l,nelem /1G %si devuelve lG %%uncion %uncion rinci io?l : listaC:lista l,act :J 1G devuelve lG %%uncion %uncion avanzar?l : listaC:lista si l,act X l,nelem entonces error N n de lista o lista vaciaOG sino l,act :J l,act P1G %si devuelve lG %%uncion %uncion actua$?l : listaC:elem var e : elem %var si l,act X l,nelem entonces error N n de lista o lista vaciaOG sino e :J l,!Ll,actMG %si devuelve eG %%uncion %uncion ,n?l : listaC:booleano devuelve l,act X l,nelemG %%uncion %uncion vacia?l : listaC:booleano devuelve l,nelem J 0G %%uncion

, '()*9 PID_00146766 !0 Estructuras de datos bsicas

%uncion $$ena?l : listaC:booleano devuelve l,nelem J "!#G %%uncion Pero esta im $ementacin de$ #+D lista resenta varios 'roblemas cuando revisamos $as o eraciones insertar <borrar:

6as o eraciones resentan des $azamientos de e$ementos dentro de$ vector& concretamente en $as osiciones a $a derec%a de$ unto de interBs ?en $os buc$esC, Estos des $azamientos %acen =ue e$ coste tem'oral de ambas o eraciones sea $inea$<& or tanto& =ue su e,ciencia sea mu< ma$a teniendo en cuenta $a ;recuencia de uso ?,8ura 16C,

9 9

Si $os e$ementos de $a $ista son $randes& su des $azamiento dentro de$ vector ? ara no desa rovec%ar es acioC es mu< costoso,

6a inte$racin de la lista en una estructura de datos es com $e:a, 6os e$ementos de $a $ista son a untados desde di;erentes com onentes de $a estructura& de modo =ue cada des $azamiento de un e$emento de$ vector im $ica automticamente $a actua$izacin de todos $os a untadores eDternos a$ vector =ue a untan a$ e$emento des $azado ?,8ura 17C, *omo os odBis ima8inar& esta tarea no es trivia$,
V 1

V2 !!! Vi-1" Vi Vi#1 !!! Vn-1V$

n act V1 V2 !!! Vi-1" Vi#1 !!! Vn-1V$

n nelem = act act 'i8ura 17, 2orrar un e$ementode$a$ista+ a;ectaa$asestructuras?2<*C=ue$e a untan

3.3.2. Im'lementacin encadenada Para rom er e$ conce to de secuencial& en =ue e$ sucesor de un e$emento es e$ =ue ocu a $a si8uiente osicin de$ vector& introducimos a continuacin e$ conce to de encadenamiento& en =ue cada e$emento 8uarda $a osicin en =ue se %a$$a su sucesor,

Por tanto& en este caso& $a re resentacin de $a $ista constar de un indicador a$ rimer e$emento? rimC& otro a$ e$emento distin8uido o actua$ ?actC<un vector?+Ccon un indicador ara cada e$emento? eCde cu$ es e$ si8uiente?sucC, En e$ caso de$ F$timo e$emento& e$ indicador tendr un valor nulo& =ue or convenio sue$e ser /1 ?<a =ue no eDiste una osicin ne8ativa en un vectorC,

a b

ti'o $ista J tu'la ! : tablaL"!#Mde tu'la e : elemG suc : enteroG %tu'laG act&prim : enteroG %tu'la ;ti o + artir de esta re resentacin de$ ti o& im $ementamos $as o eraciones =ue nos ermitirn recorrer $a $ista<consu$tarYborrarYinsertar e$ementos en e$$a,

, '()*9 PID_00146766 -0 Estructuras de datos bsicas Pero antes %a< =ue ensar cmo se ueden rea'rovec.ar las 'osiciones del vector ,ue se .an borrado ara a$macenar nuevos e$ementos, + continuacin ana$izamos a$8unas de $as estrate8ias =ue se ueden a $icar ara rea rovec%ar estas osiciones: 9 4arcar todas $as osiciones de$ vector como ocu adas o $ibres a rovec%ando e$ cam o suc& siem re =ue no se dis on8a de nin8una estructura eDtra =ue nos indi=ue =uB osiciones estn $ibres, Para di;erenciar $as osiciones $ibres esco8eremos un va$or no uti$izado en e$ cam o suc& como or e:em $o/!&<a=ue$as osicionesde$ vector son enteros ositivos<e$ va$or nu$o es /1, /roblema: ara cada insercin %a< =ue %acer una bFs=ueda de una osicin $ibre en e$ vector< eso uede ser mu< costoso ?,8ura 1.aC, 9 +3adir un indicador? os$C=ue a unte a $a rimera osicin $ibre de$ vector ?,8ura 1.bC, *uando se acaben $as osiciones $ibres se tendr =ue reor8anizar e$ vector des $azando todos $os e$ementos %acia $a iz=uierda ara de:ar a $a derec%a todos $os es acios $ibres $iberados en e$ borrado de e$ementos, /roblema: ta$ como se %a comentado en $a im $ementacin secuencia$& $a reor8anizacin de$ vector es demasiado costosa, 9 (sar una i$a ara 8estionar $as osiciones $ibres: 'ila de sitios libres, Esta i$a se im $ementa sobre e$ mismo vector de $a $ista& a rovec%ando e$ cam o suc ara encadenar $as osiciones $ibres<evitar uti$izar ms es acio ?,8ura 1.cC, E$ ;uncionamiento es sim $e: cuando se inserta un e$emento en $a $ista se eDtraee$ rimer sitio $ibrede$a i$a? os$C& mientras =ue cuando se borra un e$emento de $a $ista $a osicin $iberada se a3ade a $a i$a, 'i8ura 1., Estrate8ias ara rea rovec%ar $as osiciones $iberadas de$ vector %a& %b& %c& act prim act prim posl act posl prim So$o =ueda reso$ver otro deta$$e ara a;rontar $a im $ementacin de $as o eraciones insertar <borrar: cmo se 'uede actuali1ar el indicador suc del elemento anterior ara =ue a unte a$ nuevo sucesor, Puesto =ue $a re resentacin encadenada no ase8ura =ue $os datos estBn dis uestos secuencia$mente en e$ vector& e$ acceso a$ e$emento anterior a$ actua$ ?o esco8idoC no es trivia$< se debe buscar una so$ucin: 9 Si no se a3ade nada ms a $a re resentacin& %a< =ue recorrer $a $ista desde e$ rinci io& buscando e$ e$emento =ue ten8a en e$ cam o suc $a osicin de$ e$emento actua$, Pero esto im $ica =ue cada $$amada a $as o eraciones insertar <borrar tendr un coste tem ora$ $inea$& ?nC,

, '()*9 PID_00146766 -1 Estructuras de datos bsicas

'ina$mente& $a re resentacin esco8ida es $a de una lista encadenada con elemento %antasma2usando un indicador al elemento anterior al actual ?antC& or=ue nos ermite codi,car todas $as o eraciones de $a si8natura ?eDce to crearCcon un coste constante& ?1C, 'i:aros en =ue $a $ista odr a$macenar %asta 4+X e$ementos& <a =ue se %a sumado una osicin 4+X P1 ara a$macenar e$ ;antasma: ti'o $ista J tu'la ! : tablaL"!#P1M de tu'la e : elemG suc : enteroG %tu'laG ant&posl : enteroG %tu'la ;ti o

a b

, '()*9 PID_00146766 -! Estructuras de datos bsicas *omo se %a mencionado anteriormente& esta re resentacin nos ermite im $ementar todas $as o eraciones con un coste tem'oral constante& eDce to or $o =ue res ecta a $a o eracin crear& =ue tendr un coste $inea$ a$ tener =ue crear $a i$a de es acios $ibres< $$enar$a con todas $as osiciones de$ vector: %uncion crear?C: lista var l : lista %var l,ant :J 1G l,!Ll,antM,suc :J /1G Ninserta elemento fantasmaO 'ara i :J !.asta "!# .acer l,!LiM,suc :J iP1G %'ara l,!L"!#P1M,suc :J /1G l,posl :J !G devuelve lG %%uncion %uncion insertar?l : listaG e : elemC:lista var tmp : entero %var si l,poslJ /1 entonces error Nlista llenaOG sino tmp :J l,poslG l,posl :J l,!Ll,poslM,sucG l,!LtmpM,e :J eG l,!LtmpM,suc :J l,!Ll,antM,sucG l,!Ll,antM,suc :J tmpG l,ant :J tmpG %si devuelve lG %%uncion %uncion borrar?l : listaC:lista var tmp : entero %var si l,!Ll,antM,suc J /1 entonces error N n de lista o lista vaciaOG sino tmp :J l,!Ll,antM,sucG l,!Ll,antM,suc :J l,!LtmpM,sucG l,!LtmpM,suc :J l,poslG l,posl :J tmpG %si devuelve lG %%uncion

, '()*9 PID_00146766 -- Estructuras de datos bsicas %uncion rinci io?l : listaC:lista l,ant :J 1G devuelve lG %%uncion %uncion avanzar?l : listaC:lista si l,!Ll,antM,suc J /1 entonces error N n de lista o lista vaciaOG sino l,ant :J l,!Ll,antM,sucG %si devuelve lG %%uncion %uncion actua$?l : listaC:elem var e : elem %var si l,!Ll,antM,suc J /1 entonces error N n de lista o lista vaciaOG sino e :J l,!Ll,!Ll,antM,sucM,eG %si devuelve eG %%uncion %uncion ,n?l : listaC:booleano devuelve l,!Ll,antM,suc J /1G %%uncion %uncion vacia?l : listaC:booleano devuelve l,!L1M,suc J /1G %%uncion %uncion $$ena?l : listaC:booleano devuelve l,poslJ /1G %%uncion

3.4. jem'lo 0uando hablamos de los esquemas de programacin sobre secuencias, todos conocemos los esquemas derecorridoy bsqueda ! continuacin, implementamos estos dos esquemas sobre una lista 1l2 Para em ezar& recordemos =ue: 9 e$ es=uema de recorrido consiste en a $icar un tratamiento a todos $os e$ementos de $a $ista&

, '()*9 PID_00146766 -4 Estructuras de datos bsicas 9 e$ es=uema de bFs=ueda consiste en situar e$ unto de interBs sobre e$ rimer e$emento de $a $ista =ue cum $e una ro iedad, +s>& <a odemos im $ementar e$ es=uema de recorrido: l :J principio?lCG mientras T n?lC.acer tratamiento?actual?lCCG l :J avanzar ?lCG %mientras 4ientras =ue $a im $ementacin de$ es=uema de bFs=ueda ser: l :J principio?lCG o3 :J '+6S)G mientras T n?lC To3 .acer si propiedad?actual?lCC entonces o3 :J *IE5#)G sino l :J avanzar ?lCG %si %mientras

, '()*9 PID_00146766 -1 Estructuras de datos bsicas 4. Punteros

4.1. Problemas de los vectores

/ 6a a$ternativa a$ uso de $os vectores es $a $estin de memoria din3mica, Este mecanismo nos evita tener =ue estimar inicia$mente e$ es acio =ue necesitaremos ara a$macenar $os e$ementos& <a =ue ediremos e$ es acio a medida =ue $o necesitemos,

Para traba:ar con $a memoria dinmica usaremos un ti o denominado 'untero& de manera =ue una variab$e de ti o untero a # ?en =ue % es un ti o de datos concretoC ser un a untador a un ob:eto de ti o %, E$ untero o;recer un camino de acceso a$ ob:eto a untado, Por e:em $o& si D es una variab$e de ti o untero a Entero& entonces D a untar a un entero ?,8ura !1C,

(n 'unteroes una variab$e =ue 8uarda $a direccin de memoria donde em ieza a a$macenarse e$ ob:eto a$ =ue a unta,

En este caso& e$ sistema o erativo es e$ encar8ado de 8estionar e$ es acio de memoria, Para traba:ar con $os unteros dis onemos de $as 'rimitivas < $os o'eradores si8uientes: 9 'untero a: sirve ara dec$arar un ti o de a untadores a ob:etos de otro ti o, jem'lo Dec$aracin de un ti o t +bc de a untadores a ob:etos de ti o t+bc, ti'o t+bc J tu'la e : enteroG ,,, %tu'la t +bc J 'untero at!bcG %ti'o 9 obtener s'acio:;uncin ara so$icitar e$ es acio necesario ara a$macenar un ob:eto de$ ti o a untado, 6a ;uncin devue$ve un untero =ue a unta a$ es acio concedido ara a$macenar e$ ob:eto, jem'lo E$ untero a unta a un ob:eto de$ ti o t+bc, var p : tp!bc %var p :J obtener,spacio?CG 9 o'erador 4 5: o erador =ue ermite acceder a$ ob:eto a untado or un untero, Escribiremos e$ s>mbo$o detrs de$ nombre de$ untero< devo$ver e$ ob:eto a untado or e$ untero, jem'lo Se asi8na0a$cam o e de$a tu $a a untada or e$ untero , p ,e :J 0G

, '()*9 PID_00146766 -7 Estructuras de datos bsicas 9 liberar s'acio:accin =ue destru<e e$ ob:eto a untado or e$ untero =ue recibe como armetro,E$ ob:etode:ade ser accesib$e< se $iberae$ es acio ocu ado ara oder ser reuti$izado, jem'lo Se$ibera e$ ob:eto de ti o t+bc a untado or e$ untero , liberar,spacio?pCG 9 67LO: es un va$or es ecia$ =ue indica =ue un untero no a unta a nin8una arte, 6a ;uncin obtenerEs acio devue$ve este va$or cuando no =ueda es acio dis onib$e<& en consecuencia& no uede ro orcionar e$ es/ acio so$icitado, 6a accin $iberarEs acio asi8na e$ va$or 7(6) a$ untero una vez %a destruido e$ ob:eto a untado, Por otro $ado& obtendremos un error siem re=ue $$amemosa$a accin $iberarEs acioo a $i=uemos e$ o erador Z [ sobre un untero =ue conten8a e$ va$or 7(6), jem'lo Des uBsdeso$icitare$es acio araa$macenarun ob:eto&siem re debecom robarse sie$sistema nos$o%aconcedido& veri,cando=uee$ untero a unta a a$8Fn sitio, var p : tp!bc %var p :J obtener,spacio?CG si p J 7(6) entonces error Nno hay espacio libreOG sino ,e :J ,e

E$ encadenamiento entre e$ementos?sucCse %ar con unteros,

4.3.1. Pila +continuacin estab$ecemos $a re resentacin<os mostramos $a im $ementacin de $as o eraciones de$ ti o i$a, De $a re resentacin ?,8ura !!C& comentaremos =ue e$ untero rimsiem re a unta a $a cima de $a i$a& eDce to cuando est vac>a,

6os nodos son $os com onentes usados en $a construccin de $as estructuras de datos cuando se traba:a con unteros, *ada nodo contiene e$ e$emento a a$macenar< unoo ms encadenamientos a otros nodos ara oder des $azarse entre e$$os,

%uncion crear?C: 'ila var p: 'ila %var p,prim:J 7(6)G devuelve pG %%uncion %uncion a i$ar?p: 'ilaG e : elemC:'ila var tmp : 'untero anodo %var tmp :J obtener,spacio?CG si tmp J 7(6) entonces error Nno hay espacio libreOG sino tmp ,e :J eG tmp ,suc :J p,primG p,prim :J tmpG %si devuelve pG %%uncion

, '()*9 PID_00146766 -. Estructuras de datos bsicas %uncion desa i$ar?p: 'ilaC:'ila var tmp : 'untero anodo %var si p,primJ 7(6) entonces error Npila vaciaOG sino tmp :J p,primG p,prim :J p,prim ,sucG liberar,spacio?tmpCG %si devuelve pG %%uncion

%uncion cima?p: 'ilaC:elem var e : elem %var si p,primJ 7(6) entonces error Npila vaciaOG sino e :J p,prim ,eG %si devuelve eG %%uncion %uncion vacia?p: 'ilaC:booleano devuelve p,primJ 7(6)G %%uncion

4.3.2. Cola E$'rinci'io de $a co$a ?o eDtremo or donde se eDtraen $os e$ementosC estar siem re a untado or e$ untero rim& mientras =ue e$ .nal de $a co$a ?o eDtremo or donde se a3aden $os e$ementosC estar a untado or e$ untero u$t ?,8ura !4C, *uando $a co$a estB vac>a& $os unteros rim <u$t no a untarn a nin8Fn e$emento,

, '()*9 PID_00146766 40 Estructuras de datos bsicas ti'o nodo J tu'la e : elemG suc : 'untero a nodoG %tu'la co$a J tu'la prim&ult : 'untero a nodoG %tu'la ;ti o Dada $a re resentacin de$ ti o co$a& mostramos $a im $ementacin de sus o eraciones: %uncion crear?C: cola var c : cola %var c,prim:J 7(6)G c,ult :J 7(6)G devuelve cG %%uncion %uncion enco$ar?c : colaG e : elemC:cola var tmp : 'untero anodo %var tmp :J obtener,spacio?CG si tmp J 7(6) entonces error Nno hay espacio libreOG sino tmp ,e :J eG tmp ,suc :J 7(6)G c,ult ,suc :J tmpG c,ult :J tmpG %si devuelve cG %%uncion

, '()*9 PID_00146766 41 Estructuras de datos bsicas %uncion desenco$ar?c : colaC:cola var tmp : 'untero anodo %var si c,primJ 7(6) entonces error Ncola vaciaOG sino tmp :J c,primG c,prim :J c,prim ,sucG liberar,spacio?tmpCG %si devuelve cG %%uncion %uncion cabeza?c : colaC:elem var e : elem %var si c,primJ 7(6) entonces error Ncola vaciaOG sino e :J c,prim ,eG %si devuelve eG %%uncion %uncion vacia?c : colaC:booleano devuelve c,primJ 7(6)G %%uncion 4.3.3. Lista So$vemos a esco8er $a lista encadenada con 'unto de inter/s 2 elemento %antasma, E$ untero ant a untar a$ e$emento anterior a$ unto de interBs < no a$ e$emento distin8uido, De este modo& se odr acceder ;ci$mente a$ redecesor de$ e$emento distin8uido ?,8ura !6C,

ti'o nodo J tu'la e : elemG suc : 'untero a nodoG %tu'la $ista J tu'la prim&ant : 'untero a nodoG %tu'la %ti'o

, '()*9 PID_00146766 4! Estructuras de datos bsicas Dada $a re resentacin de$ ti o $ista& mostramos $a im $ementacin de sus o eraciones: %uncion crear?C: lista var l : lista %var l,prim:J obtener,spacio?CG Npara el elemento fantasmaO si l,primJ 7(6) entonces error Nno hay espacio libreOG sino l,ant :J l,primG l,ant ,suc :J 7(6)G %si devuelve lG %%uncion %uncion insertar?l : listaG e : elemC:lista var tmp : 'untero anodo %var tmp :J obtener,spacio?CG si tmp J 7(6) entonces error Nno hay espacio libreOG sino tmp ,e :J eG tmp ,suc :J l,ant ,sucG l,ant ,suc :J tmpG l,ant :J tmpG %si devuelve lG %%uncion %uncion borrar?l : listaC:lista var tmp : 'untero anodo %var si l,ant ,suc J 7(6) entonces error N n de lista o lista vaciaOG sino tmp :J l,ant ,sucG l,ant ,suc :J tmp ,sucG liberar,spacio?tmpCG %si devuelve lG %%uncion

, '()*9 PID_00146766 4- Estructuras de datos bsicas %uncion rinci io?l : listaC:lista l,ant :J l,primG devuelve lG %%uncion %uncion avanzar?l : listaC:lista si l,ant ,suc J 7(6) entonces error N n de lista o lista vaciaOG sino l,ant :J l,ant ,sucG %si devuelve lG %%uncion %uncion actua$?l : listaC:elem var e : elem %var si l,ant ,suc J 7(6) entonces error N n de lista o lista vaciaOG sino e :J l,ant ,suc ,eG %si devuelve eG %%uncion %uncion ,n?l : listaC:booleano devuelve l,ant ,suc J 7(6)G %%uncion %uncion vacia?l : listaC:booleano devuelve l,prim ,suc J 7(6)G %%uncion 4.4. Peli$ros de los 'unteros +ntes de continuar& %a< =ue tener en cuenta =ue $os unteros no son $a anacea ara im $ementar estructuras de datos& <a =ue tambiBn resentan rob$emas, En $os si8uientes suba artados veremos unos cuantos, 4.4.1. La memoria din3mica no es in.nita 6a memoria dinmica no uede 8arantizar $a ca acidad de una estructura ?cuntos ob:etos cabrnC& or=ue es un recurso com artido ?como un sacoC a$ =ue todos $os ro8ramas so$icitan e$ es acio =ue necesitan, Eso im osibi$ita =ue e$ 8estor de memoria ueda redecir todas $as eticiones =ue %arn $os ro8ramas <& or $o tanto& desconozca e$ es acio de =ue dis ondr en cada instante,

a) Si se %an uti$izado vectores& <= son dos tu $as =ue contienen un vector <un entero,6a asi8nacin co iare$ cam o entero<e$ contenido de$ vector& dando como resu$tado dos 'ilas i$uales e inde'endientes, b) Si se %an uti$izado unteros& <=son dos tu $as =ue contienen un untero ? rimC, 6a asi8nacin sim $emente co iar e$ cam o de $as tu $asG es decir& e$ untero rimde$asdos i$as a untara$a misma direccinde memoria, Por tanto& e$ resu$tado ser una +nica 'ila com artida or <=,

'i8ura !0, 5esu$tado de $a o eracin %a& a p '

:J = en ;uncin de $a im $ementacin esco8ida ara $as i$as %b& p '

q '

6a so$ucin consistir en de,nir una nueva o eracin denominada du'licar& =ue %ar $a co ia eDacta de un ob:eto sobre otro ob:eto de$ mismo#+D,

*omo e:em $o& os mostramos $a im $ementacin de $a o eracin du $icar en e$#+D pila& tanto ara $a re resentacin con vectores como ara $a re resentacin con unteros: %uncion du $icar?p: 'ilaC:'ila var q: 'ilaG i : entero %var q,nelem :J p,nelemG 'ara i :J 1.asta p,nelem .acer q,!LiM:Jduplicar?p,!LiMCG %'ara devue$ve qG %%uncion %uncion du $icar?p: 'ilaC:'ila var q: 'ilaG n1&n!:'untero a nodo %var si p,primJ 7(6) entonces q,primJ 7(6)G sino n1:Jp,primG n!:Jobtener,spacio?CG si n!J 7(6) entonces error Nno hay espacio libreOG sino q,prim:J n!G n! ,e :J duplicar?n1 ,eCG %si mientras n1 ,suc ,J 7(6) .acer n! ,suc :J obtener,spacio?CG si n! ,suc J 7(6) entonces error Nno hay espacio libreOG sino n1:Jn1 ,sucG n!:Jn! ,sucG n! ,e :J duplicar?n1 ,eCG %si %mientras n! ,suc :J 7(6)G %si devuelve qG %%uncion

Para reso$ver este rob$ema a $icaremos $a misma so$ucin =ue en $a o eracin de asi8nacin, En $u8ar de usar e$ o erador de i8ua$dad& cada #+D de,nir una o eracin denominadai8ua$& =ue com robar si dos ob:etos son i8ua$es se8Fn $a de,nicin de i8ua$dad en e$ ti o,

Por e:em $o& en e$ caso de $as i$as diremos =ue dos i$as son i8ua$es si contienen $os mismos e$ementos en e$ mismo orden& mientras =ue e$ caso de $as $istas tambiBn ediremos =ue e$ unto de interBs estB situado en e$ mismo $u8ar, *omo e:em $o de $a o eracin i8ua$& os ad:untamos su im $ementacin en e$#+D pila& tanto ara $a re resentacin con vectores ? rimera ;uncinC como ara $a de unteros ?se8unda ;uncinC: %uncion i8ua$?p1&p!:'ilaC:booleano var ig : booleanoG i : entero %var ig :J ?p1,nelem J p!,nelemCG i :J 1G mientras ?i \ p,nelemC ig .acer ig :J igual?p1,!LiM&p!,!LiMCG i :J iP1G %mientras devuelve igG %%uncion

, '()*9 PID_00146766 47 Estructuras de datos bsicas %uncion i8ua$?p1&p!:'ilaC:booleano var ig : booleanoG n1&n!:'untero a nodo %var n1:Jp1,primG n!:J!, ,J ,J J

JJ

Para so$ucionar este rob$ema& sim $emente debemos evitar modi,car $os armetros de entrada, Si ;uese necesario modi,car a$8Fn armetro de entrada en $a ;uncin& usar>amos $a o eracin du $icar de$ ti o ara crear una co ia de$ ob:eto<traba:ar con e$$a,

Pero esta so$ucin uede rovocar un 'roblema de ine.ciencia& <a =ue $a du $icacin de ob:etos uede ser mu< costosa ? or e:em $o& en e$ caso de una i$a $$ena de e$ementosC, Para reso$ver$o& odemos convertir $as ;unciones en acciones& de manera =ue e$ resu$tado de $a o eracin =uede en uno de $os armetros de entsa$< nos a%orremos as> e$ coste de $a co ia, *omo e:em $o de $a rob$emtica& os damos $a im $ementacin de una ;uncin ara ;usionar dos i$as sin mantener e$ orden de $os e$ementos, *omo $a ;uncin es eDternaa$ ti o& no odr accedera$a re resentacin<so$o odr uti$izar $as o eraciones ro orcionadas or e$#+D pila,

, '()*9 PID_00146766 40 Estructuras de datos bsicas 6a rimera versin es incorrecta si $as i$as se %an im $ementado con unteros& or=ue& a$ retornar de $a $$amada& $a i$a ! se %a vaciado< $a i$a 1 contiene nuevos e$ementos: %uncion ;usionar?p1&p!:'ilaC:'ila mientras Tvacia?p!C .acer p1:Japilar?p1&cima?p!CCG p!:Jdesapilar?p!CG %mientras devuelve p1G %%uncion 6a se8unda im $ementacin es correcta& <a =ue es inde endiente de $a im $ementacin or=ue crea unas co ias? a < bC ara rote8er $as i$as 1 < !: %uncion ;usionar?p1&p!:'ilaC:'ila var pa&pb: 'ila %var pa :J duplicar ?p1CG pb :J duplicar?p!CG mientras Tvacia?pbC.acer pa :J apilar?pa&cima?pbCCG pb :J desapilar?pbCG %mientras devuelve paG %%uncion Para ,na$izar& $a tercera im $ementacin es $a ms e,ciente de $as tres& uesto =ue evita $a du $icacin de $a i$a 1mediante su conversin en un armetro de entsal: accion ;usionar?entsal p1:'ilaG ent p!:'ilaC var pb : 'ila %var pb :J duplicar?p!CG mientras Tvacia?pbC.acer p1:Japilar?p1&cima?pbCCG pb :J desapilar?pbCG %mientras %accion

4.4.3. %ectos laterales Dado un ob:eto a untado or varios unteros& cua$=uier modi,cacin de$ ob:eto mediante un untero com orta un e%ecto lateral& < es =ue e$ resto de unteros vern e$ ob:eto modi,cado sin %aber$o tocado, Ka< e;ectos $atera$es deseados o contro$ados& ero tambiBn $os %a< errneos o no contro$ados,

, '()*9 PID_00146766 4. Estructuras de datos bsicas 4.4.4. Re%erencias col$adas Kab$amos de re%erencia col$ada cuando un untero a unta a un ob:eto =ue no eDiste, Si intentamos acceder a B$ ?con e$ o erador C& e$ resu$tado es im redecib$e, Por e:em $o& en $a ,8ura -0& e$ untero r acaba co$8ado, 'i8ura -0, E:em $o de una re;erencia co$8ada p"r ' puntero a tAbc ()ar p '= obtenerEspacio%&* r '= p*

liberarEspacio%p&*

4.4.8. Retales (n retal es un ob:eto =ue %a obtenido e$ es acio a travBs de $a ;uncin obtenerEs acio& ero =ue es inaccesib$e or=ue no est a untado or nin8Fn untero, 7o %a< ;orma de acceder a B$, 6a ,8ura -1 muestra cmo e$ ob:eto a untado inicia$mente or e$ untero se convierte en un reta$, 'i8ura -1, E:em $o de un reta$ p"r ' puntero a tAbc ()ar p '= obtenerEspacio%&* r '= obtenerEspacio%&* p '= r*

6os reta$es ueden rovocar un error de$ sistema o erativo o sim $emente no a;ectara$a e:ecucin<di,cu$tar$a de uracin de$ cdi8o,Ka< sistemas o erativos =ue se encar8an de recu erar automticamente estos reta$es u ob:etos inaccesib$es& ero trataremos de evitar$os siem re =ue sea osib$e& <a =ue son e$i8rosos, +$8unos e:em $os de situaciones =ue ueden crear reta$es< =ue debemos vi8i$ar son: 9 6a declaracin de variables au9iliares de$ ti o, Si $os ob:etos se %an im $ementado con unteros& a$ sa$ir de una ;uncin =uedarn como reta$es& <a =ue se e$iminarn $os unteros =ue $os %ac>an accesib$es, accion concatenar?entsal l1:listaG ent l!:listaC var lb : lista %var ,,, lb :J duplicar?l!CG

,,, Nvacia?lbCJ '+6S)O %accion

, '()*9 PID_00146766 11 Estructuras de datos bsicas accion destruir?entsal p: 'ilaC var tmp : 'untero anodo %var mientras p,prim,J 7(6) .acer tmp :J p,prim ,sucG destruir?p,prim ,eCG liberar,spacio?p,primCG p,prim :J tmpG %mientras %accion 'ina$mente& como e:em $o& im $ementamos una accin =ue concatena dos $istas< =ue inc$u<e una $$amadaa$a nueva o eracin destruir ara $iberar e$ es acio =ue ocu a $a variab$e auDi$iar $b < as> evitar e$ rob$ema de $os reta$es: accion concatenar?entsal l1:listaG ent l!:listaC var lb : lista %var mientras T n?l1C .acer l1:Javanzar ?l1CG %mientras lb :J duplicar?l!CG lb :J principio?lbCG mientras T n?lbC.acer l1:Jinsertar?l1&actual?lbCCG lb :J avanzar ?lbCG %mientras destruir?lbCG %accion

4.4.:. Conclusin 6os unteros o;recen ms osibi$idades< ,eDibi$idad a$a %orade dise3ar estructuras& ero tambiBn deben uti$izarse con ms cuidado& <a =ue son una ;uente ma<or de rob$emas, I8ua$mente& siem re =ue im $ementemos un#+D inc$uiremos: 9 6as o eraciones indicadas en $a si8natura de$ ti o& or=ue son $as =ue ro orcionan $a ;unciona$idad de$ mismo, 9 6as o eraciones i8ua$& du $icar <destruir& or=ue %acen =ue e$ ti o sea trans arente a $a im $ementacin,

En resumen&$a im $ementacinde un#+D debe inc$uir $as o eraciones de $a si8natura<$as o eracionesi8ua$& du $icar <destruir,

4.8. jem'lo de im'lementacin de.nitiva; lista encadenada ti'o nodo J tu'la e : elemG suc : 'untero a nodoG %tu'la $ista J tu'la prim&ant : 'untero a nodoG %tu'la %ti'o accion crear?sal l : listaC si l,prim,J 7(6) entonces destruir?lCG Npara evitar retalesO %si l,prim:J obtener,spacio?CG Npara el elemento fantasmaO si l,primJ 7(6) entonces error Nno hay espacio libreOG sino l,ant :J l,primG l,ant ,suc :J 7(6)G %si %accion accion insertar?entsal l : listaG ent e : elemC var p: 'untero anodo %var p:J obtener,spacio?CG si pJ 7(6) entonces error Nno hay espacio libreOG sino duplicar?p ,e&eCG p ,suc :J l,ant ,sucG l,ant ,suc :J pG l,ant :J pG %si %accion

, '()*9 PID_00146766 1- Estructuras de datos bsicas accion borrar?entsal l : listaC var p: 'untero anodo %var si l,ant ,suc J 7(6) entonces error N n de lista o lista vaciaOG sino p:J l,ant ,sucG l,ant ,suc :J p ,sucG destruir?p ,eCG Npara evitar retalesO liberar,spacio?pCG %si %accion accion rinci io?entsal l : listaC l,ant :J l,primG %accion accion avanzar?entsal l : listaC si l,ant ,suc J 7(6) entonces error N n de lista o lista vaciaOG sino l,ant :J l,ant ,sucG %si %accion %uncion actua$?l : listaC:elem var e : elem %var si l,ant ,suc J 7(6) entonces error N n de lista o lista vaciaOG sino duplicar?e&l,ant ,suc ,eCG %si devuelve eG %%uncion %uncion ,n?l : listaC:booleano devuelve l,ant ,suc J 7(6)G %%uncion %uncion vacia?l : listaC:booleano devuelve l,prim ,suc J 7(6)G %%uncion

, '()*9 PID_00146766 14 Estructuras de datos bsicas accion du $icar?sal l!:listaG ent l1:listaC var n1&n!:'untero a nodoG e : elem %var crear?l!CG n1:Jl1,prim ,sucG n!:Jl!,primG mientras n1,J 7(6) .acer n! ,suc :J obtener,spacio?CG si n! ,suc J 7(6) entonces error Nno hay espacio libreOG sino n!:Jn! ,sucG duplicar?n! ,e&n1 ,eCG si n1J l1,ant entonces l!,ant :J n!G %si n1:Jn1 ,sucG %si %mientras n! ,suc :J 7(6)G %accion %uncion i8ua$?l1&l!:listaC:booleano var ig : booleanoG n1&n!:'untero a nodo %var n1:Jl1,primG n!:Jl!,primG ig :J?igual?l1,ant&n1C igual?l!,ant&n!CC ?Tigual?l1,ant&n1C Tigual?l!,ant&n!CCG NNo comparamos el contenido de los elementos fantasmaO si ig entonces n1:Jn1 ,sucG n!:Jn! ,sucG %si mientras ?n1J,7(6)C ?n!J,7(6)C ig .acer ig :J igual?n1 ,e&n! ,eC ??igual?l1,ant&n1C igual?l!,ant&n!CC ?Tigual?l1,ant&n1C Tigual?l!,ant&n!CCCG si ig entonces n1:Jn1 ,sucG n!:Jn! ,sucG %si %mientras devuelve ?n1J 7(6)C ?n!J 7(6)CG %%uncion

, '()*9 PID_00146766 11 Estructuras de datos bsicas

J J

6a lista circular recic$a e$ encadenamiento de$ F$timo e$emento ara =ue a unte a$ rimer e$emento de $a $ista, E$ resu$tado es una $ista sin rimero ni F$timo,

6a venta:a rinci a$ de este ti o de $ista es =ue& dado un e$emento& siem re se uede acceder a cua$=uier otro e$emento de $a $ista& or=ue e$ F$timo e$emento de $a $ista siem re a unta a$ rimero ?,8ura --C, 'i8ura --, 6ista circu$ar

6a $ista circu$ar ;aci$ita $a im $ementacin de $os a$8oritmos <a =ue& como todos $os encadenamientos son de$ mismo ti o& nos evita tener =ue codi,car un tratamiento es ecia$ ara e$ F$timo e$emento, Si a3adimos un untero a $a $ista circu$ar ara desi8nar un e$emento como e$ rimero& entonces odremos variar e$ rinci io de $a $ista sim $emente des $azando este untero& mientras =ue en $a $ista encadenada era necesario des $azar e$ementos,

Dada una $ista cua$=uiera& a veces es necesario %acer un recorrido ordenado de $os e$ementos or e$ va$or de uno de sus cam os, Este cam o se $$amar c$ave,

= = =

Para dis oner de una lista ordenada no %a< =ue modi,car $a re re sentacin& sino =ue basta con modi,car $a im $ementacin de ciertas o eraciones con $a si8uiente ,na$idad:

9 9

mantener$a $ista desordenada en $as actua$izaciones<ordenar$a antes de em ezar un recorrido& o bien mantener $a $ista siem re ordenada,

Si esco8emos $a rimera o cin& entonces se tendr =ue modi,car $a o eracin rinci io& =ue se convertir en $a o eracin ms costosa& <a =ue tendr =ue ordenar todos $os e$ementos de $a $ista ara %acer e$ recorrido, En cambio& si esco8emos $a se8unda a$ternativa& $a o eracin a modi,car ser insertar& <a =ue tiene =ue buscar secuencia$mente e$ unto donde tiene =ue a3adir e$ e$emento ara mantener $a ordenacin, En este caso& $a o eracin ms costosa ser insertar ero& a cambio& $a $ista siem re estar ordenada, De endiendo de cmo se distribu<an $as inserciones< $os recorridos en una e:ecucin& nos interesar una a$ternativa u otra, Por e:em $o& si e$ a$8oritmo resenta dos ;ases di;erenciadas& una rimera en =ue se constru<e $a $ista < una se8unda en =ue so$o se consu$ta& entonces $a rimera a$ternativa arece $a me:or&<a=ue$as actua$izaciones tendrne$ coste m>nimo<$a $istase ordenar una so$a vez ?:usto en e$ rimer recorridoC,

, '()*9 PID_00146766 1. Estructuras de datos bsicas

Resumen

En este mdu$o se %an introducido $os ti os bsicos de datos ara a$macenar $as secuencias: pilas& colas < listas, 6os tres ti os o;recen o eraciones ara acceder de una manera secuencia$ a $os datos& ero se di;erencian en $a manera de %acer$o, +s> ues& de endiendo de $a situacin en =ue nos encontremos& esco8eremos e$ ti o =ue ms se adecue a$ com ortamiento re=uerido, #ambiBn %emos visto cmo se traba:a con un ti o de datos a artir de su si8natura sin conocer $a im $ementacin, Esta es $a caracter>stica rinci a$ de un tipo abstracto de datos, +simismo& %emos comentado cmo se a3aden funciones e4ternas a$ ti o< como se inte8ran di;erentes ti os en una estructura de datos com $e:a, Kemos a rendido a construir nuevos #+D ara oder mode$izar situaciones de$ mundo rea$, Primero& es eci,cando $a signatura de$ ti o con $as o eraciones =ue se odrn a $icar< $ue8o abordando su implementacin, 6a im $ementacin consistir en esco8er una re resentacin de $os datos<codi,car $as o eraciones eva$uando su coste es acia$<tem ora$, Esta eva$uacin es im ortante or=ue& dada $a es eci,cacin de un ti o& siem re %abr ms de una im $ementacin osib$e < necesitaremos un sistema ara decidir cu$ es $a im $ementacin ms adecuada ara nuestro rob$ema, +dems& %emos estudiado cmo se a$macenaban $os datos a rovec%ando =ue $a re resentacin era secuencial&< %emos visto a$8unos de $os rob$emas =ue resenta esta a$ternativa, Para su erar$os& %emos introducido e$ conce to de re resentacin encadenada& =ue consiste en es eci,car en $a estructura de datos $a re$acin =ue %a< entre $os e$ementos, )tro tema en =ue se %a ro;undizado es en e$ uso de $os vectores < de $os punteros, Se %an im $ementado $os ti os bsicos con ambos sistemas< se %an comentado sus venta:as< desventa:as,#ambiBn se%a visto =ue es necesario a3adir $as o eraciones i8ua$& du $icar < destruir a $a im $ementacin de un ti o si se =uiere 8arantizar un com ortamiento idBntico inde endientemente de $a im $ementacin esco8ida, Por otra arte& a rovec%ando e$ tema de $os unteros& se %a eD $icado e$ sistema de gestin de la memoria dinmica& as> como tambiBn $os e$i8ros =ue resenta ?reta$es& re;erencias co$8adas& etc,C, Para acabar& %emos visto brevemente tres variantes de$ ti o $ista =ue a ortan so$uciones ara situaciones es ecia$es: listas circulares& listas doblemente encadenadas <listas ordenadas,

, '()*9 PID_00146766 60 Estructuras de datos bsicas

Actividades

1, !, -, 9 9

Im $ementaddos i$asenunso$ovector&de manera=uee$costetem ora$sea ?1C<=ue e$ tota$dee$ementosa$macenadosno sobre ase$aca acidadde$ vector, E$#+D lista ese$ms ,eDib$ede$oseD $icadosene$ mdu$o& %astae$ untodeconsiderar $os#+Dcola <pila comocasos articu$aresde este, Para demostrar$o&im $ementad una i$a <unaco$a usando una$ista encadenadacon untodeinterBs, +m $iad e$#+D pila ?im $ementadocon vectoresC a3adiendo$aso eracionessi8uientes: base? C& =ue devue$ve e$ e$emento =ue %ace ms tiem o =ue est a i$ado en$a i$a G ndesa i$ar? &nC& =ue desa i$a n e$ementos de$a i$a ,Si$a i$acontiene menosde n e$ementos& desa i$ar todos$os =ue %a<a,

4. +m $iad e$#+D cola im $ementadocon unteros& a3adiendo$aso eracionessi8uientes:

9 9

num?cC&=ue devue$vee$ nFmerodee$ementos=ue%a<en$aco$a cG ndesenco$ar?c&nC& =ue desenco$a n e$ementos de$aco$a c, Si no %a< su,cientes e$ementosen$aco$a ara desenco$ar&seconsiderar unasituacin errnea,

8. Dado e$#+D lista im $ementado ene$ mdu$ocomo una$ista encadenadacon unteros& a3adid$as o eraciones si8uientes:

9 9

$eer?$&iC& =ue devue$ve e$ i/Bsimoe$ementosituadoa$a derec%ade$ untodeinterBs de$a$ista $G

esimo?$C& =ue sitFa e$ unto deinterBs sobre e$ e$emento i/Bsimo res ecto a$ rinci io de$a$ista $,Si$a$ista est vac>aono%a< su,cientese$ementos& retornae$va$or 7(6),

1, !, -, 4, 1, 9 9 9 9 9 9

En e$ mdu$o %emos vistoim $ementadas$as o eraciones destruir& du $icar e i8ua$ ara ase8urar $a trans arencia de $a im $ementacin de $os #+D pila < lista, Si8uiendo e$ e:em $ode$os#+Dcomentados&im $ementad estaso eracionesene$#+D cola, Dise3ad una accin =ue muestre$a re resentacin binaria de un nFmero$e>do de$a secuencia de entrada, Para e$$o odBis usar una i$a =ue a$macene $os resu$tados de $as divisiones arcia$es or$a base ?=ue es !C, Por e:em $o& si$a entrada es e$ nFmero 77&$a sa$ida deber>a ser1001101, *onstruid un nuevo #+D denominado pico =ue mezc$e $as o eraciones de $as i$as < de$asco$as sobre una secuencia: crear& a i$ar& enco$ar& desenco$ar& desa i$ar& cima& co$a <vacia, Im $ementad unaco$a uti$izando dos i$as, *odi,cad$aso eraciones bsicasde$asi8natura de$ ti o co$a, *read un #+D con5unto =ue re resente un con:unto de e$ementos < =ue o;rezca como m>nimo$as o eraciones si8uientes: a3adir?s&eC: a3ade e$ e$emento e a$ con:unto s& borrar?s&eC: borra e$ e$emento e de$ con:unto s& union?s&tC: a3ade$ose$ementosde$con:unto t a$ con:unto s& interseccion?s&tC:borra de$ con:untos$ose$ementos =ue no estn ene$con:untot& di;erencia?s&tC: borra de$ con:unto s $os e$ementos =ue estn en e$ con:untot& tama3o?sC: devue$ve e$ nFmero de e$ementos de$ con:unto s,

11. Im $ementad un#+D ara mode$izar un editor de teDtos, Este#+D deber>a ro orcionar $as o eraciones si8uientes:

9 9 9 9 9 9

a3adir?t&cC: a3ade e$ carcter c en $a osicin de$ cursor < des $aza e$ cursor a $a derec%a& borrar?tC: borra e$ carcter donde est e$ cursor < des $aza e$ cursor a$ carcter de $a iz=uierda& iz=uierda?tC: muevee$cursoruncarctera$aiz=uierda& derec%a?tC: muevee$cursoruncarctera$a derec%a& inicio?tC: mueve e$ cursor a$ inicio de$ teDto o sobre e$ carcter situado ms a $a iz=uierda& cursor?tC: devue$ve e$ carcter sobre e$ =ue est e$ cursor,

12. Escribid una accin creciente =ue& dada una$ista de enteros&$a devue$va ordenada de modocreciente, @QuB variacin tendr>ais =ue %acer ene$cdi8o ara =ue$a ordenacinde$a $ista ;uera estrictamente crecienteA

, '()*9 PID_00146766 61 Estructuras de datos bsicas

13. (naemisoraderadioen$>nea=uiere automatizar$a8estinde$as$istasdere roduccin, Por este motivo decide or8anizar$as canciones de =ue dis one en una estructura de datos, 6os directivos de$a emisora deciden =ue se necesitan$as si8uientes o eraciones ara ro8ramar$a mFsicaa emitir:

9 9 9 9 9 9

crear: I radio&$a emisora tiene e$ arc%ivo sonoro com $etamente vac>o, a3adir: radio cancion I radio&$a emisora a3ade una cancin nueva a su arc%ivo sonoro, su8erir: radio entero I cancion& devue$ve$acancin =uetiene$a duracin dada en se8undos<=ue menos veces se %a emitido en$a radio, se$eccionar: radio entero I cancion& devue$ve $a cancin =ue tiene $a duracin dada en se8undos<=ue se %a emitido ms veces, emitir: radio cancion I radio& se toma notade =ue$acancin se emitir en$a radio, *ada vez=ueseemite unacancinse$$amaa estao eracin, borrar: radio entero I radio& borra $as n canciones =ue se %an emitido menos veces,Encasode em ate esindi;erente$acancin =ue se se$eccione,

E$ nFmero de canciones de =ue dis one $a radio es conocido& ero tambiBn sabemos =ue cada semana$aemisoraad=uiere nuevascanciones<$asa3adea$arc%ivo,Paracadacancin se a$macena un nFmero =ue$aidenti,ca< su duracin en se8undos, 6a em resa os ide =ue de,nis e$#+D radio < =ue$oim $ementBis de manera =ue todas$as o eraciones ten8an e$ m>nimocoste tem ora$ osib$e,

, '()*9 PID_00146766 6! Estructuras de datos bsicas

jercicios de autoevaluacin

1, !, -,

Dibu:ade$ resu$tadodea $icar$a secuenciadeo eracionessi8uiente sobre una i$avac>a : a i$ar? &1CG a i$ar? &7CG desa i$ar? CG a i$ar? &!CG a i$ar? &-CG desa i$ar? CG a i$ar? &1CG a i$ar? &.CG Dibu:ad e$ resu$tado de a $icar $a secuencia de o eraciones si8uiente sobre una co$a vac>a =: enco$ar?=&1CG enco$ar?=&7CG desenco$ar?=CG enco$ar?=&!CG enco$ar?=&-CG desenco$ar?=CG enco$ar?=&1CG enco$ar?=&.CG Escribid una ;uncin ba$anceado=ue$ea una secuenciade entrada ;ormada or arBntesis< corc%etes<=uecom ruebe =ue todos estncorrectamente ba$anceados uti$izando una i$a,Es decir&$a ;uncin debe veri,car =ue todos$os arBntesis abiertos secierran ene$ orden corres ondiente,6a secuencia debeacabarconun unto,Pore:em $o: Si$a entrada esU?LM??CCCLM ,V & retornar *IE5#), Encambio&si$a entrada ;ueraU?L?CCM ,V& retornar>a'+6S),

9 9

4. Escribid una accin ;ibonacci =ue ca$cu$e $a sucesin de 'ibonacci con a<uda de una co$a, 6a sucesin de'ibonacciem ieza as>:011!-101- !1 -4 11 0. ,,,

, '()*9 PID_00146766 6- Estructuras de datos bsicas

!olucionario
1.2 2.

1! 2!
p q

3. *ada vez =ue e$ a$8oritmo $ee un corc%ete o arBntesis de a ertura& tiene =ue a i$ar e$ s>mbo$o en$a i$a&mientras =uecada vez =ue encuentra un arBntesisocorc%etedecierre en $a secuenciade entrada&tiene =ueconsu$tar$acimade$a i$a<com robar =uee$s>mbo$ode cierre$e>do secorres ondecone$s>mbo$odea ertura =ue%a< en$acima,Si secorres onde& e$a$8oritmo desa i$a$acima< rosi8ue$ae:ecucin,Encasocontrario&sinocoincideosi$a i$a est vac>a&$a eD resin no estar bien ba$anceada, 6a eD resin estar bien ba$anceada sia$$eere$ unto?,C&=ueindicae$ ,na$de$a secuencia&$a i$a est vac>a, %uncion ba$anceado?C: booleano var o3 : booleanoG c : caracterG p : 'ila?caracterC%var crear?pCG o3 :J *IE5#)G c :J leer0aracter?CG mientras ?c ] ] ,J , C o3 .acer

si ?c J ]?]C ?c J ]L]Centonces apilar?p&cCG c :J leer0aracter?CG sino si Tvacia?pCentonces si c J ]C] entonces o3 :J cima?pCJ ]?] G sino o3 :J cima?pCJ ]L] G %si si o3 entonces desapilar?pCG c :J leer0aracter?CG %si sino o3 :J '+6S)G %si %si %mientras devuelveo3 vacia?pCG %%uncion 4. accion ,bonacci?ent n : enteroC var q : cola?enteroCG a&b&i : enteroG %var crear?qCG encolar?q&0CG encolar?q&1CG 'arai :J 1.asta n .acer a :J cabeza?qCG desencolar?qCG b :J cabeza?qCG desencolar?qCG encolar?q&bCG encolar?q&a PbCG escribir,ntero?aCG %'ara %accion

, '()*9 PID_00146766 64 Estructuras de datos bsicas "losario abstraccin f Sim $i,cacinde$area$idadteniendoencuentaso$ouna artede esta, actual ad5 Dic%o de$ e$emento distin8uido de una$ista& =ue sirve de re;erencia ara a $icar $as o eraciones, al$oritmo m *on:unto de asos ara reso$ver un rob$ema, cabe1a m E$ementosituadoa$ rinci iode unaco$a, cima f ^$timoe$ementoen$$e8ara una i$a<=ue sere$ rimeroensa$irdee$$a, cola f #i o abstracto de datos caracterizado or e$ %ec%o de =ue e$ rimer e$emento en entrar es e$ rimero en sa$ir, coste constante ?1C m 4edida =ue es ,:a< no de ende de$ nFmero de e$ementos, coste es'acial m 4edida de$ es acio =ue ocu a unaim $ementacinconcretade unti o de datos, coste lineal ?nCm 4edida=uesere$aciona$inea$mentecone$ nFmerodee$ementos, coste tem'oral m 4edida de$ tiem o =ue re=uiere una o eracin en unaim $ementacin concreta de un ti o de datos, encadenamiento m Indicador =ueidenti,ca$a osicin =ue ocu a otro e$emento, estado m Descri cin de una estructura en uninstante determinado, estructura circular f Estructura sin rinci io ni ,n& en $a cua$ tras $a F$tima osicin viene$a rimera osicin, %antasma m E$emento es ecia$ =ue se8uarda en$a rimera osicin de una secuencia ara =ue e$ e$emento actua$ ten8a siem re un redecesor, -I-O f 6irst in rst out, %uncin e9terna f 'uncin =ue no uede accedera$a re resentacin de$ti o<so$o uede usar$as o eraciones ;aci$itadas or$a si8natura de$ ti o, %uncin'arcial f 'uncin =ue no est de,nida ara todoe$ dominiode$os armetrosde entrada, im'lementacin f *odi,cacin concreta de un ti o de datos, LI-O f 'ast in rst out, lista f #+Dcaracterizado ore$ %ec%ode =ue ermite a3adir& borraroconsu$tarcua$=uier e$emento de$a secuencia, listacon'untode inter/s f 6ista =uecontiene une$ementodistin8uidoa untado ore$ unto deinterBs<=ue sirve de re;erencia ara a $icar$as o eraciones, lista circular f 6ista en =ue se recic$a e$ encadenamiento de$ F$timo e$emento ara =ue a unte a$ rimer e$emento, E$ resu$tado es una$ista sin rimero ni F$timo, listadoblemente encadenada f 6ista en =ue cada e$emento tiene dos encadenamientos: uno a$ nodo anterior<otro a$ nodo si8uiente, lista ordenada f 6ista en =ue $os e$ementos estn ordenados or e$ va$or de uno de $os cam os, Este cam o se denomina clave, memoriadin3mica f 4ecanismo ara so$icitar memoria en tiem o de e:ecucin a$ sistema o erativo, mdulo m ) eracin=ueca$cu$ae$ restode$adivisindedos nFmeros enteros, 67LO m Sa$ores ecia$=ueindica=ue un unteronoa untaanin8Fnsitio, o'eracin constructora f ) eracin de$ ti o =ue devue$ve un va$or de$ mismo ti o,

, '()*9 PID_00146766 61 Estructuras de datos bsicas o'eracin consultora f ) eracin de$ ti o =ue devue$ve un va$or de otro ti o, o'eracin $eneradora f ) eracin =ue ;orma arte de$con:untom>nimodeo eraciones constructoras necesarias ara8enerarcua$=uierva$orde$ti o, o'eracin modi.cadora f ) eracinconstructora =ue no es8eneradora de$ti o, 'ilaf #i o abstractode datoscaracterizado ore$%ec%ode=uee$F$timoe$ementoen entrar es e$ rimero en sa$ir, 'unterom Sariab$e =ue a$macena$a direccin de memoria en =ue em ieza e$ ob:eto a$ =ue a unta, re%erencia col$ada esim redecib$e, f Puntero=uea untaaun ob:eto=ue<anoeDiste,SiseintentaaccederaB$e$ resu$tado

retal m )b:eto =ue esinaccesib$e& or=ue no est a untado or nin8Fn untero< no %a< manera de acceder a B$, secuencia f *on:unto de e$ementos dis uestos en un orden es ec>,co, 'ruto de esta ordenacin& dado une$ementode$a secuencia %ab$aremos de$ redecesor?comoe$e$emento anteriorC<de$ sucesor?comoe$e$ementosi8uienteC, si$natura f Es eci,cacin ;orma$ de$com ortamientode$aso eracionesde unti o, Para cadao eracin estab$ece$os armetros&e$ resu$tado&$ascondicionesde error<$asecuaciones =ue re,e:an su com ortamiento, ti'o abstractodedatos m #i ode datosa$=uese$e%a a3adidoe$conce tode abstraccin araindicar =ue$aim $ementacin de$ ti o esinvisib$e ara$os usuarios de$ ti o, si8$a <A= ti'odedatos m *on:unto de va$ores<de una serie de o eraciones =ue se ueden sobree$$os,6aso eracionescum $irnciertas ro iedades=ue determinarnsucom ortamiento, vac&o >a ad5 Que& a $icado a una estructura& no contiene nin8Fn e$emento, vector m #ab$a unidimensiona$, a $icar

, '()*9 PID_00146766 66 Estructuras de datos bsicas #iblio$ra%&a #alc31ar0 ?. L. ?!001C, /rogramacin metdica, 4adrid: 4c_raH/Ki$$, -ranc.0 @. ?!001C, ,structures de dades ,speci caci, disseny i implementaci , 2arce$ona: Edi/ cions (P*, Aart&0 6.B Orte$a0 C.B Derdejo0 ?. A. ?!001C, ,structuras de datos y mtodos algortmicos7 e5ercicios resueltos, 4adrid: Pearson Educacin, Eeiss0 A.A?1..1C, ,structurasdedatosy algoritmos, 4adrid: +ddison/`es$e<,

Você também pode gostar