Professional Documents
Culture Documents
1M
M
$. P34C+ S A2I+N14 %+ !I S 1AS +N !A a A %AS SI2 P !+S-
Para poder procesar "na lista& se necesita la estr"ct"ra de s"s nodos ' la
(aria*le de comien:o.
4peraciones-
> Insertar "n elemento.
> Porrar "n elemento.
> 3ecorrer la lista.
> P"scar "n elemento.
!a forma m7s normal de representar listas enla:adas es "sar memoria
din7mica. 6na lista enla:ada tam*iDn se p"ede sim"lar "sando arra's =memoria
est7tica;& pero es poco eficiente.
Para ello "tili:arAa 2 arra's del mismo tama@o ' con la misma n"meracin
de Andices& tal 8"e en "n arra' g"ardarAa los campos de informacin de la lista& '
para cada campo de informacin en la posicin correspondiente en el otro arra'
g"ardarAa el Andice del sig"iente elemento a ese nodo.
+s decir en ese seg"ndo arra' g"ardarAa los campos enlace mediante (alores
de Andice.
a 9 . i :
Adem7s de los 2 arra's& tengo 8"e tener "na (aria*le 8"e contenga el Andice
del primer elemento de la lista. +l Fltimo elemento& tiene en el campo de enlace el
(alor M.
Info Sig
1
2
T
$
) .
6
A
7
I
/
0
1M a
3ecorrido e "na lista enl a : ada-
Consiste en paras por todos s"s nodos ' procesarlos.
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
Algoritmo recorrido
?ar
Com- p"ntero a nodo
Inicio
3ecorrer =com;
.in
Procedimiento recorrer =prin- p"ntero a nodo;
?ar
Ptr- p"ntero a nodo
Inicio
Si prin Q Nil
+ntonces escri*ir R!ista (aciaS
Sino ptr prin
2ientras ptr KL nil ptrsig KL nil
cprocesar ptrinfod
ptr ptrsig
fin mientras posicionarme en el Fltimo nodo
fin si .
fin
P"s8"eda de "n nodo-
Se trata de locali:ar "n nodo 8"e c"mpla "na determinada condicin =por
e#emplo 8"e s" campo de informacin (alga "n (alor determinado;.
A la 9ora de 9acer las *Fs8"edas tendremos en c"enta si la lista est7
ordenada o no& ' si est7 ordenada por el criterio de *Fs8"eda tendrD 8"e
apro(ec9arlo.
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
Algoritmo *"s8"eda
?ar
P&com- p"ntero a nodo
+lem- KtipoL
Inicio
P"scar =com&elem&p;
.in
Procedimiento *"scar =prin- p"ntero a nodoJ e- KtipoLJ ent>sal pos- p"ntero a
nodo;
Inicio
Pos prin
2ientras =posinfo KL +; ' =pos KL NI!;
Pos
possig
.in mientras
.in
PFs8"eda de "n nodo o rdenado ascendentemente-
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
Algoritmo *"s8"eda
?ar
P&com- p"ntero a nodo
+lem- KtipoL
Inicio
P"scar =com&elem&p;
.in
Procedimiento *"scar =prin- p"ntero a nodoJ e-KtipoLJent>sal pos- p"ntero a nodo;
Inicio
Pos prin
2ientras =e L posinfo; ' =pos KL NI!;
Pos possig
.in mientras
Si posinfo KL e
+ntonces pos NI!
.in si
.in
1ratamiento de la memoria din7mica-
Siempre 8"e se 9ace "na insercin en "na estr"ct"ra din7mica& tenemos 8"e
coger de memoria tantos *'tes de memoria din7mica como oc"pa el nodo de la
estr"ct"ra din7mica& ' c"ando *orramos "n elemento& tendremos 8"e li*erar la
memoria oc"pada por ese elemento. Para conseg"ir este mane#o& todos los
leng"a#es de programacin tienen 2 instr"cciones 8"e permiten reser(ar memoria
' li*erar memoria din7mica& ' asignar en el caso de la reser(a la memoria a "n
p"ntero& ' en el caso de la li*eracin se li*era la memoria asignada a "n p"ntero.
Pascal - N+h & %ISP4S+
C - 2A!!4C & .3++ CH
H - N+h & %+!+1+
!a instr"ccin de reser(a de memoria lle(ara "n Fnico arg"mento& 8"e ser7
el tipo de datos para el 8"e se 9ace la reser(a de memoria& ' segFn el tama@o de ese
tipo& esa instr"ccin sa*r7 el nFmero de *'tes 8"e tiene 8"e reser(ar. O lo 8"e
de("el(e es "n p"ntero al comien:o de la :ona 8"e se 9a reser(ado. +ste (alor
de("elto ser7 el 8"e tenemos 8"e asignar a "n p"ntero al tipo de datos para el 8"e
se 9ace la reser(a.
!a f"ncin li*erar memoria lle(a "n Fnico arg"mento 8"e es el tipo
p"ntero& ' lo 8"e 9ace es li*erar la memoria asignada a ese p"ntero& para lo c"al es
imprescindi*le 8"e a ese p"ntero pre(iamente se le 9a'a 9ec9o "na asignacin de
memoria din7mica con al f"ncin de reser(a.
?ar p- p"ntero a KtipoL
P Q resemem =KtipoL;
!i*emem =K(arep"nteroL;
Nosotros (amos a sim"lar el tratamiento de la memoria din7mica de la
sig"iente forma- ?amos a s"poner 8"e todas las posiciones li*res de memoria est7n
enla:adas entre sA a tra(Ds de "na lista enla:ada& a la 8"e (amos a llamar %ISP
=lista de memoria disponi*le;& donde la primera posicin de esa lista (iene
ap"ntada por la (aria*le %ISP.
Cada (e: 8"e 8"eremos 9acer "na insercin en "na estr"ct"ra din7mica&
cogeremos la primera posicin de %ISP& ' se la asignaremos al p"ntero 8"e (a a
contener a ese elemento.
O c"ando 8"eramos *orrar "n elemento de "na estr"ct"ra din7mica para
indicar 8"e li*eramos la memoria "tili:ada por ese elemento& lo 8"e 9aremos ser7
insertarlo en el %ISP& pero siempre al comien:o.
SegFn esto& todo *orrado en el %ISP e8"i(aldr7 a "na instr"ccin de
reser(a de memoria en c"al8"ier leng"a#e& ' toda insercin en el %ISP& e8"i(aldr7
a la instr"ccin de li*erar memoria en c"al8"ier leng"a#e.
4(erflo< ' 6nderflo < -
!a memoria del ordenador tiene "n tama@o limitado& por lo 8"e la memoria
din7mica tam*iDn tendr7 "n tama@o limitado& es decir& 8"e p"ede ser 8"e se nos
agote.
+sta sit"acin& se conoce como 4?+3.!4h.
Siempre 8"e se 9aga "na instr"ccin de reser(a de memoria& tendremos 8"e
compro*ar antes si nos 8"eda memoria li*re. +so en c"al8"ier leng"a#e oc"rre
c"ando la instr"ccin de reser(ar de memoria de("el(e el (alor NI!.
Si %ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Ig"al se 9ace para *orrar "n elemento de "na estr"ct"ra din7mica& para
*orrarlo& esa estr"ct"ra tiene 8"e tener al menos "n elemento. Si no lo tiene e
intentamos *orrarlo& se prod"ce "n 6N%+3.!4h.
Por esto& lo primero 8"e tenemos 8"e pro*ar en "na estr"ct"ra din7mica& es
preg"ntar si tiene algo.
Si comien:o Q Nil
+ntonces escri*ir R!ista ?aciaS
Si slo mane#o "na estr"ct"ra din7mica& preg"nto por %ISP& si tra*a#o con
(arias estr"ct"ras din7micas cada "na de "n tipo& 9a*r7 tantas %ISP como
estr"ct"ras din7micas.
Insercin en "na lista enla : a da-
Antes de reali:ar c"al8"ier proceso de insercin& tendrD 8"e (er si me
8"eda memoria disponi*le. Si es posi*le 9acer la insercin& lo primero ser7
reser(ar la memoria para el elemento 8"e 8"iero reser(ar. Para nosotros ser7
coger el primer elemento de %ISP.
+n seg"ndo l"gar& asignaremos los (alores correctos al elemento 8"e (amos
a insertar& es decir& asignaremos al campo de informacin del n"e(o elemento con
la informacin& ' desp"Ds act"ali:amos el campo de enlace.
A la 9ora de asignar "n (alor al campo de enlace& lo primero ser7 locali:ar
la posicin en la 8"e tenemos 8"e locali:ar el sig"iente elemento& ' se p"eden dar
los sig"ientes casos-
1. Insercin al comien:o de la lista- Se modifica el (alor de la (aria*le
comien:o.
2. Insercin en c"al8"ier otro l"gar de la lista& incl"ido el final- +n este
caso& tendremos 8"e conocer tam*iDn el nodo 8"e (a a estar delante de
la posicin de insercin& 'a 8"e a la 9ora de insertar ese n"e(o elemento&
(a a oc"rrir 8"e el nodo de la posicin anterior a la de insercin ap"nte
al n"e(o elemento& ' 8"e el n"e(o ap"nte al nodo de la posicin a la 8"e
insertamos.
A la 9ora de locali:ar la posicin de insercin depender7 de la aplicacin en
partic"lar.
Como e#emplo de insercin& (amos a dar la insercin en "na lista ordenada
ascendentemente por el campo de informacin-
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
Procedimiento insercion =ent>sal com- p"ntero a nodoJ elem-KtipoL;
?ar
!"g& !"gp& n"e(o- p"ntero a nodo
Inicio
Si %ISP Q Nil
+ntonces escri*ir RNo 9a' memoria disponi*leS
Sino n"e(o %ISP
%ISP
%ISPSIG
N"e(oinfo elem
Si =com Q Nil; o =elem K cominfo;
+ntonces n"e(osig Com
Com n"e(o
Sino l"gp com
!"g comsig
2ientras =elem L l"ginfo; ' =l"g KL Nil;
!"gp l"g
!"g l"gsig
.in mientras
N"e(osig l"g
!"gpsig n"e(o
.in si
.in
.in si
Porrado en "na lista e n la : a da-
Se trata de *orrar "n nodo 8"e contenga "na determinada informacin de
"na lista enla:ada simple& a"n8"e el criterio de *orrado podrAa ser otro en l"gar
del campo de informacin.
Siempre 8"e se 9ace "n *orrado de "na estr"ct"ra din7mica& en general& lo
primero es compro*ar 8"e la estr"ct"ra no est7 (acAa& ' "na (e: determinado esto&
tendrD 8"e locali:ar el nodo a *orrar.
Se p"eden dar 2 casos-
> +l nodo a *orrar sea el primero.
> C"e el nodo a *orrar oc"pe c"al8"ier otra posicin.
Si es el del comien:o& cam*iar7 la (aria*le de comien:o de la lista por8"e
a9ora tendr7 8"e ap"ntar al sig"iente elemento& al de comien:o. Si el elemento
oc"pa c"al8"ier otra posicin& tendrD 8"e locali:ar la posicin del elemento ' de s"
predecesor& por8"e para desenla:arlo de la lista& el predecesor tendr7 8"e ap"ntar
al elemento 8"e le sig"e al nodo a *orrar.
.inalmente& "na (e: desenla:ado el nodo& 9a*r7 8"e li*erar la memoria 8"e
oc"pa*a. +so en c"al8"ier leng"a#e e8"i(ale a 9acer la operacin de li*erar
memoria& ' en pse"docdigo serAa insertar el elemento al principio de %ISP.
Procedimiento *orrar =ent>sal com- p"ntero a nodoJ elem- KtipoL;
?ar
!"g& l"gp- p"ntero a nodo
Inicio
Si com Q Nil
+ntonces escri*ir R!ista (aciaS
Sino l"gp nil
!"g com
2ientras =elem L l"ginfo; ' =l"g KL Nil;
!"gp l"g
!"g
l"gsig
.in mientras
Si elem KL l"ginfo
+ntonces escri*ir RNo e,iste el nodo a *orrarS
Sino Si l"gp Q Nil
+ntonces com
comsig Sino l"gpsig
l"gsig .in si
!"gsig %ISP
%ISP l"g
.in si
.in
.in si
). !IS1AS CI3C6!A3+S C4N CA P +C +3 A-
6na lista con ca*ecera& en general es "na lista enla:ada simple normal& pero
en la 8"e el primer nodo es "n nodo especial 8"e no sir(e para g"ardar
informacin (7lida& sino solamente para marcar 8"e es el primer nodo.
Ca*ecera
Ta' dos tipos de listas enla:adas con ca*ecera-
> !istas enla:adas con ca*ecera ' tierra- +l primer nodo (a a ser la
ca*ecera& ' el Fltimo ap"nta a nil. No se "tili:a por8"e perdemos "n
nodo ' no tienen (enta#as.
> !istas circ"lares con ca*ecera- Se caracteri:an por8"e tienen "n nodo
ca*ecera& ' adem7s el Fltimo nodo ap"nta al nodo ca*ecera.
+n c"al8"ier lista enla:ada con ca*ecera el primer nodo con informacin
Ftil es el sig"iente a comien:o =Comsig;.
+n "na lista circ"lar con ca*ecera& la (enta#a 8"e presenta respecto a "na
normal& es 8"e en las inserciones ' *orrados no 9a' 8"e s"poner ningFn caso
especial& p"es todos los nodos& incl"ido el primero Ftil& tienen "n predecesor.
Al recorrer la lista completa& empe:aremos *"scando la informacin por el
sig"iente a comien:o& ' sa*emos 8"e 9emos llegado al final de la lista c"ando el
sig"iente al p"ntero 8"e recorre la lista sea comien:o.
PFs8"eda en "na lista circ"l a r c o n ca*ecera-
Procedimiento *"s8"eda =com- p"ntero a nodoJ elem-KtipoL;
?ar
Ptr- p"ntero a nodo
Inicio
Ptr comsig
2ientras =ptrinfo KL elem; ' =ptr KL com;
Ptr ptrsig
.in mientras
Si ptrsig Q com
+ntonces escri*ir R+lemento no encontradoS
.in si
.in
Insercin en "na lista circ"l a r c o n ca*ecera-
Procedimiento insercion =com- p"ntero a nodoJ elem- KtipoL;
?ar
!"g&l"gp&n"e(o- p"ntero a nodo
Inicio
Si %ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP %ISPsig
N"e(oinfo +lem
!"gp com
!"g comsig
2ientras =elem L l"ginfo; ' =l"g KL com;
!"gp l"g
!"g l"gsig
.in mientras
N"e(osig l"g
!"gpsig n"e(o
.in si
.in
Porrado en "na lista circ"lar con ca*ecera-
Procedimiento *orrado =com- p"ntero a nodoJ elem-KtipoL;
?ar
!"g&l"gp- p"ntero a nodo
Inicio
Si comQcomsig
+ntonces escri*ir R!ista (aciaS
Sino l"gp com
!"g comsig
2ientras =l"ginfo KL elem; ' =l"g KL com;
!"gp l"g
!"g l"gsig
.in mientras
Si l"g Q com
+ntonces escri*ir R+lemento no encontradoS
Sino l"gpsig l"gsig
!"gsig %ISP
%ISP l"g
.in si
.in
.in si
6. !IS1AS %4P!+2+N1+ +N!AaA%AS-
!as listas enla:adas simples se caracteri:an por8"e desde "n nodo solo
p"edo acceder al sig"iente a ese nodo& por lo 8"e solo p"edo acceder al sig"iente a
ese nodo& por lo 8"e solo p"edo recorrer la lista en "n sentido& de principio a fin.
!as listas do*les se caracteri:an por8"e desde "n nodo podemos acceder
directamente tanto al sig"iente como al anterior a ese. +s decir& por cada nodo
tendremos 2 campos enlace& "no para enla:ar "n nodo con el sig"iente& ' otro para
enla:ar a "n nodo con el nodo anterior a Dl.
%e esta manera& la lista la podemos recorrer en los 2 sentidos& de principio a
fin& mo(iDndonos con el enlace al nodo sig"iente o de fin a principio mo(iDndonos
con el enlace al nodo anterior. Para 8"e se p"eda 9acer este seg"ndo recorrido&
adem7s de "na (aria*le comien:o para cada lista& 8"e contiene la direccin del
primer nodo de la lista& necesitaremos tam*iDn otra (aria*le especial 8"e
denominaremos fin o final& 8"e ap"nta al Fltimo nodo de la lista.
SegFn esto& la estr"ct"ra de "na lista do*lemente enla:ada& ser7 la
sig"iente-
> Cada lista tendr7 2 (aria*les& comien:o ' final& del tipo p"ntero a nodo
do*le& 8"e contendr7n respecti(amente la direccin al primer ' Fltimo
nodo de la lista.
> !a estr"ct"ra de cada nodo ser7-
1ipo nodoedo*le- registro
Info- KtipoL
Sig- p"ntero a nodoedo*le
Ant- p"ntero a nodoedo*le
.in registro
IN.4
ant sig
+l campo sig"iente del Fltimo nodo tendr7 (alor NI!& ' el campo anterior
del primer nodo tam*iDn tendr7 (alor NI!& para indicar 8"e no 9a' nada antes del
primer nodo.
!a caracterAstica de "na lista do*lemente enla:ada (acAa es 8"e el comien:o
' el final son ig"ales ' ap"ntan a NI!.
Si =com Q final; ' =com Q Nil;
!ista do*lemente enla:ada con "n solo elemento-
Si =com Q final; ' =com KL Nil;
Para implementar la insercin ' el *orrado de "na lista do*lemente
enla:ada& (amos a s"poner 8"e la lista de espacio disponi*le tiene la forma de "na
lista do*lemente enla:ada.
3ecorrido de "na lista do*lemente enla : ada-
Para pasar por todos los nodos de la lista& podemos 9acerlo ig"al 8"e "na
lista enla:ada simple& solo 8"e a9ora la podemos recorrer la lista 9acia delante con
el campo SIG& ' 9acia atr7s con el campo AN1.
3ecorrido 9acia delante-
Procedimiento recorridoeadelante =com- p"ntero a nodo do*le;
?ar
Ptr- p"ntero a nodo do*le
Inicio
Ptr Comien:o
2ientras =ptr KL Nil;
cProcesar P13.IN.4d
ptr
ptrsig fin
mientras
fin
3ecorrido 9acia atr7s-
Procedimiento recorridoeadelante =com- p"ntero a nodo do*le;
?ar
Ptr- p"ntero a nodo do*le
Inicio
PGINA 1M /176
Ptr .inal
2ientras =ptr KL Nil;
cProcesar P13.IN.4d
ptr
ptrant fin
mientras
.in
PFs8"eda e n "na lista do*lemente enla : a da-
+s e,actamente ig"al 8"e en "na lista enla:ada simple& solo 8"e a9ora
p"edo *"scar el elemento *"scado desde el comien:o ' mo(iDndome con SIG o
desde el final ' mo(iDndome con AN1.
Si tengo "na idea de por donde (a a estar el elemento& empe:are por donde
sea me#or.
Procedimiento *"s8"eda =com- p"ntero a do*le nodoJ final- p"ntero a do*le nodoJ
elem- KtipoLJ ent>sal l"g- p"ntero a do*le nodo;
?ar
Ptr& l"g- p"ntero a do*le nodo
Inicio
!"g nil
Ptr final
2ientras =ptr KL nil; ' =elemento L ptrinfo;
Ptr ptrant
.in mientras
Si =ptr KL nil; ' =elemento
ptrinfo; +ntonces l"g ptr
.in si
.in
Insercin en "na lista do*lemente enla : a da-
!o primero es (er si me 8"eda espacio disponi*le en memoria din7mica& si
me 8"eda& reser(o memoria para "n n"e(o elemento ' meto la informacin 8"e
8"iero en s" campo de informacin& ' lo sig"iente es act"ali:ar s"s campos de
enlace.
Casos partic"lares-
> Insercin al comien:o si la lista est7 (acAa.
> Insercin al comien:o si la lista no est7 (acAa.
> Insercin al final.
> Insercin en medio de la lista.
PGINA 11 /176
Procedimiento insercion =ent>sal com- p"ntero a nodoedo*leJ ent>sal final- p"ntero
a
(ar
nodoedo*leJ elem- KtipoL;
l"g& n"e(o- p"ntero a nodoedo*le
Inicio
si %ISP Q Nil
entonces escri*ir RNo 9a' memoriaS
sino n"e(o %ISP %ISP
%ISPSig
N"e(oinfo elem
Si com Q nil
+ntonces n"e(osig NI!
N"e(oant NI!
Com n"e(o
.inal n"e(o
Sino si elem K cominfo
+ntonces n"e(osig com
N"e(oant nil
Comant n"e(o
Com n"e(o
Sino l"g
comsig
2ientras =elem L l"ginfo; ' =l"g KL Nil;
!"g l"gsig
.in mientras
Si l"g KL nil
+ntonces n"e(osig l"g
N"e(oant
l"gant !"gantsig
n"e(o !"gant
n"e(o
Sino n"e(osig nil
N"e(oant final
.inalsig n"e(o
.inal n"e(o
.in si
.in
.in si
.in si
.in si
Porrado en "na lista do*lemente enl a : ada-
Primero 9a' 8"e (er si la lista tiene algFn elemento& ' si tiene algFn
elemento& 9a*r7 8"e *"scar si el elemento 8"e 8"eremos *"scar e,iste en la lista& '
si e,iste& *"sco en 8"e posicin se enc"entra.
Casos partic"lares-
> Porrado del primer nodo.
> Porrado del Fltimo nodo.
> Porrado de c"al8"ier nodo.
%esp"Ds de todo esto& 9a*r7 8"e li*erar la memoria del nodo.
Procedimiento *orrado =ent>sal com- p"ntero a nodoedo*leJ ent>sal final- p"ntero
a
(ar
nodoedo*leJ elem- KtipoL;
l"g- p"ntero a nodoedo*le
inicio
si com Q Nil
entonces escri*ir R!ista (aciaS
sino l"g com
mientras =l"ginfo KL elem; ' =l"g KL nil;
l"g
l"gsig fin
mientras
si l"g Q Nil
entonces escri*ir RNo encontradoS
sino si l"g Q com
entonces com
comsig si com
Q Nil
entonces final nil
sino comant nil
fin si
sino si l"g KL final
entonces l"gantsig
l"gsig l"gsigant
l"gant
sino l"gantsig nil
final l"gant
fin si
fin si
fin si
fin
fin si
l"gsig %ISP
%ISP l"g
7. PI!AS-
6na pila es "na estr"ct"ra lineal de datos con la caracterAstica especial de
8"e a9ora& no podemos 9acer las inserciones ' las eliminaciones en c"al8"ier
l"gar& sino 8"e o*ligatoriamente las tenemos 8"e 9acer por "n e,tremo de la lista.
+se e,tremo lo llamamos cima de la pila.
PGINA 1 /176
+sto s"pone 8"e se procesen los elementos de la pila en orden in(erso a s"
entrada en la estr"ct"ra& es decir& el primer elemento de la pila 8"e "sare ser7 el
Fltimo 8"e 9a entrado =!I.4;.
Con "na pila podemos 9acer dos operaciones *7sicas& P6ST =meter; ' P4P
=sacar;.
Aparte de estas dos f"nciones se p"eden definir otras como la de pila (acAa o
top& 8"e me dice c"al es elemento 8"e est7 en la cima de la pila pero sin sacarlo.
Se p"ede implementar con memoria est7tica =arra's; o con memoria
din7mica =listas enla:adas;.
Si "tili:o "n arra'& tendrD 8"e definir c"al es el tama@o m7,imo del arra'&
8"e ser7 el de la pila& ' aparte tendrD definida "na (aria*le cima 8"e tendr7 en
cada momento el Andice 8"e corresponde al elemento del arra' 8"e est7 en la cima
de la pila.
Pila Q arra' U1..ma,epilaV de KinfoL
Cima- entero
Para se@alar 8"e la cima est7 (acAa& cima es ig"al a M por8"e no tiene 8"e
ap"ntar a ningFn elemento.
Implementacin de "na pila con memoria e s t7tic a -
Algoritmo prinepila
Const
2a,epila Q Kma,epilaL
?ar
P- arra' U1..ma,epilaV de KinfoL
C- entero
+lem- KinfoL
Inicio
C M
!eer =elem;
Si pilae(acia =C; Q (erdadero
+ntonces escri*ir RPila (aciaS
Sino sacar =pila&c&elem;
+scri*ir R+lemento sacadoSelem
.in si
.in
."ncion pilae(acia =cima- entero;- *ooleano
Inicio
Si cima Q M
+ntonces retorno (erdadero
Sino retorno falso
.in si
.in
Procedimiento meter =ent>sal pila- arra'U1..ma,epilaV de KinfoLJ cima- enteroJ
elem-KinfoL;
Inicio
si cima Q ma,epila
entonces escri*ir RPila llenaS
PGINA 1$ /176
sino cima cima H 1
pilaUcimaV elem
fin si
.in
."ncion cimaepila =pila- arra'U1..ma,epilaV de KinfoLJ cima- entero;-KinfoL
Inicio
3etorno pilaUcimaV
.in
Procedimiento sacar =ent>sal pila- arra'U1..ma,epilaV de KinfoLJ cima- enteroJ
ent>sal e- KinfoL;
Inicio
+ cimaepila =cima&pila;
Cima cima i 1
.in
Implementacin de "na pila con memoria din7mica-
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
Algoritmo mane#oepila
?ar
Cima- p"ntero a nodo
+lem- KtipoL
Inicio
Cima nil
2eter =cima&elem;
Si pilae(acia =cima;
+ntonces escri*ir RNo 9a' memoriaS
Sino sacar =cima&elem;
+scri*ir R+lemento sacadoSelem
.in si
.in
."ncion pilae(acia =cima- p"ntero a nodo;- *ooleano
Inicio
Si cima Q nil
+ntonces retorno (erdadero
Sino retorno falso
.in si
.in
Procedimiento poner =ent>sal cima- p"ntero a nodoJ elem- KtipoL;
?ar
PGINA 1) /176
N"e(o- p"ntero a nodo
Inicio
Si %ISP Q nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP %ISPsig
N"e(oinfo elem
N"e(osig cima
Cima n"e(o
.in si
.in
."ncion cimaepila =cima- p"ntero a nodo;-KtipoL
Inicio
3etorno cimainfo
.in
Procedimiento sacar =ent>sal cima- p"ntero a nodoJ ent>sal elem- KtipoL;
?ar
Porrado- p"ntero a nodo
Inicio
+lem cimaepila =cima;
Porrado cima
Cima cimasig
Porradosig %ISP
%ISP *orrado
.in
Aplicacion e s de las pil a s-
6n e#emplo tApico de "so de pilas& es en las llamadas entre f"nciones. +n este
caso& el sistema operati(o "tili:a "na pila en donde (a g"ardando la direccin de
retorno de cada "na de estas llamadas.
/. C4!AS-
6na cola tam*iDn es "na lista lineal de elementos& en la 8"e las inserciones
se 9acen por "n e,tremo de la lista& ' los *orrados por otro. !as inserciones se
9acen por el final ' los *orrados por el principio.
+sto significa 8"e es "na estr"ct"ra del tipo .I.4.
Sea c"al sea la implementacin& siempre tendr7n 8"e e,istir 2 (aria*les&
frente ' final& 8"e ap"nten al comien:o ' al fin de la cola respecti(amente.
Podemos implementar "na cola con memoria est7tica =arra's; ' con
memoria din7mica =listas enla:adas;.
Si implementamos la cola con arra's& tendremos "n arra' llamado cola& 8"e
contiene el tipo de informacin 8"e contiene la cola& ' aparte dos (alores& frente '
final& c"'o (alor ser(ir7 como el Andice 8"e indica 8"e elemento est7 al frente ' al
final de la cola.
PGINA 16 /176
!a cola estar7 (acAa c"ando frente ' final no ap"nten a ningFn Andice del
arra'& ' esto ser7 c"ando frente ' final (algan M si el arra' se empie:a a n"merar a
partir del 1.
Aparte de la f"ncin 8"e me dice si la cola est7 (acAa& tendrD 8"e
implementar f"nciones de sacar ' meter "n elemento.
Para insertar "n elemento en "na cola& 9a*rAa 8"e incrementar el (alor en
la (aria*le final& ' desp"Ds introd"cir en la cola del final el elemento.
Para eliminar "n elemento de "na cola& *astarAa primero (er 8"e elemento
est7 al frente de la cola& ' para eliminarlo a"mentar el frente en "na "nidad.
Si solo consideramos esta posi*ilidad& es decir& mane#ar el arra' solo
incrementando& no lo estarAamos "tili:ando eficientemente& por8"e podrAamos
llegar al caso en 8"e 9a*iendo posiciones li*res al comien:o del arra' no
p"diDsemos "sarlas c"ando el final alcan:ase el m7,imo Andice del arra'.
Para e(itar esto& el arra' 8"e implementa la cola& lo (amos a tratar como "n
arra' circ"lar =s"ponemos 8"e desp"es de la posicin N del arra'& (iene la posicin
1;. +sto 8"iere decir 8"e si la cola no est7 llena& desp"Ds de final Q 2a,& (iene final
Q 1& ' al sacar el elemento de la cola& si no est7 (acAa& desp"Ds de frente Q N& (endr7
frente Q 1& ' si desp"Ds de sacar el elemento la cola 8"eda (acAa& act"ali:aremos
frente ' final a M.
Si frente es ig"al a final ' son distintos de M antes de sacar "n elemento&
8"iere decir 8"e ese elemento es el Fltimo.
Antes de insertar "n elemento& tendrD 8"e (er si la cola est7 llena =frente Q 1
' final Q 2a, o frente Q final H 1;.
Implementacin de colas con memoria est 7 tica-
1ipo datos- arra' U1..ma,ecolaV de KtipoL
Algoritmo mane#oecola
?ar
Cola- datos
.rente& final- entero
+lem& res"lt- KtipoL
Inicio
.rente M
.inal M
2eterecola =frente&final&cola&elem;
Si colae(acia =frente&final; Q (erdadero
+ntonces escri*ir RCola (acAaS
Sino sacarecola =frente&final&cola&res"lt;
+scri*ir R+lemento sacadoSres"lt
.in si
.in
."ncion colae(acia =frente- enteroJ final- entero;- *oolean
Inicio
Si =frente Q M; ' =final Q M;
+ntonces retorno (erdadero
PGINA 17 /176
Sino retorno falso
.in si
.in
Procedimiento meterecola =ent>sal cola-datosJ ent>sal frente-enteroJ ent>sal
final-enteroJ
Inicio
+lem- KtipoL;
Si ==frente Q 1; ' =final Q 2a,ecola;; o frente Q final H 1
+ntonces escri*ir RCola llenaS
Sino si colae(acia =frente&final; Q (erdadero
+ntonces frente 1
.inal 1
Sino si final Q 2a,ecola
+ntonces final 1
Sino final final H 1
.in si
.in si
.in
.in si
ColaUfinalV elem
Procedimiento sacarecola =ent>sal cola-datosJ ent>sal frente-enteroJ ent>sal
final-enteroJ
Inicio
+lem colaUfrenteV
Si frente Q final
+ntonces frente M
.inal M
+lem- KtipoL;
Sino si frente Q 2a,ecola
+ntonces frente 1
Sino frente frente H 1
.in si
.in si
.in
Implementacin de colas con memoria din7mica-
."ncion colae(acia =com- p"ntero a nodoedo*le;- *ooleano
Inicio
Si com Q nil
+ntonces retorno (erdadero
Sino retorno falso
.in si
.in
Procedimiento meterecola =ent>sal com- p"ntero a nodoedo*leJ
ent>sal final- p"ntero a nodoedo*leJ elem- KtipoL;
(ar
n"e(o- p"ntero a nodoedo*le
Inicio
Si %ISP Q nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP %ISPsig
N"e(oinfo elem
N"e(oant final
N"e(osig nil
.inalsig n"e(o
.inal n"e(o
Si colae(acia =frente; Q (erdadero
+ntonces frente n"e(o
.in si
.in si
.in
Procedimiento sacarecola =ent>sal com- p"ntero a nodoedo*leJ
ent>sal final- p"ntero a nodoedo*leJ res"lt- KtipoL;
(ar
ptr- p"ntero a nodoedo*le
Inicio
3es"lt cominfo
Ptr com
Com comsig
Si com Q nil
+ntonces final nil
Sino comant nil
.in si
Ptrsig %ISP
%ISP ptr
.in
Aplicacion e s de las col a s-
!as colas se s"elen "tili:ar en los procesos por lotes ' en la "tili:acin de
rec"rsos del sistema.
C"ando "n proceso 8"iere "sar "n rec"rso ' otro lo est7 "sando& tendr7 8"e
ponerse en la cola& ' se ir7 asignando el rec"rso segFn el orden en 8"e se 9a pedido.
A (eces& la "tili:acin de rec"rsos por parte de los procesos& nos interesa
8"e ciertos procesos tengan ma'or prioridad 8"e otros& incl"so a"n8"e lleg"en
m7s tarde& ' para ello "tili:arAamos las colas de prioridades.
Cada elemento de la cola& tendr7 otro campo 8"e indi8"e s" prioridad& tal
8"e a la 9ora de sacar "n elemento de la cola& saco el del frente& ' a la 9ora de
insertar "n elemento en la cola& tendrD en c"enta la prioridad del elemento 8"e
8"iero insertar& ' para ello se inserta en la cola por orden de prioridad& ' si 9a'
mas elementos 8"e tienen la misma prioridad 8"e el 8"e 8"eremos insertar& los
procesamos segFn s" orden de llegada& es decir& 8"e lo colocamos como el Fltimo
de los elementos con esa prioridad.
%4P!+S C4!AS 4 PIC4!AS-
6na *icola es "na lista lineal de elementos en la 8"e las inserciones '
*orrados es p"eden 9acer por c"al8"iera de s"s e,tremos.
?a a 9a*er 2 (aria*les& i:8"ierda ' derec9a& 8"e ap"ntan a s"s e,tremos.
Ta' 2 tipos especiales de *icolas-
> %e entrada restringida- C"e permite inserciones solo por "n e,tremo '
*orrados por los dos.
> %e salida restringida- C"e permite inserciones por c"al8"ier e,tremo '
*orrado solo por "no.
Se p"eden implementar con memoria est7tica o din7mica.
EJERCI CIOS: TEMA 11
1. %ise@ar "n algoritmo 8"e colo8"e el primer nodo de "na lista enla:ada como
penFltimo& pero cam*iando solo los campos enlace. !a lista es "na lista
enla:ada do*le.
Procedimiento res"ltado =ent>sal com- ptrea nodoJ ent>sal final- ptrea nodo;
?ar
Prin- p"ntero a nodo
Inicio
Si =com Q final; o =comsig Q final;
+ntonces escri*ir RNo se p"ede 9acer el cam*ioS
Sino prin com
Comsig final
Comant
finalant
.inalantsig com
.inalant com
Com prinsig
Comant nil
.in si
.in
2. %ada "na cadena de caracteres C1& en "n arra' de longit"d m7,ima N& ' con el
fin de cadena WkX& ' dada otra cadena C2 almacenada en "na lista enla:ada
simple& 8"e cada nodo de la lista contiene "na letra. Se trata de 8"e pasandole a
"n s"*programa 2 cadenas& determinar c"antas (eces aparece C1 en C2.
."ncion compara =c1- cadenaJ c2- ptrea nodo;- entero
?ar
Ini&p- p"ntero a nodo
I&res- entero
PGINA 1$1 /176
Inicio
3es M
P C2
2ientras =pKL nil;
Si =pinfo Q c1UiV;
+ntonces ini P
I 1
2ientras =pinfo Q c1UiV; ' =c1UiV KL WkX; ' =p KL nil;
I i H 1
P psig
.in mientras
Si c1UiV Q WkX
+ntonces res res H 1
Sino p inisig
.in si
Sino p psing
.in si
.in mientras
.in
. %ada "na lista do*lemente enla:ada 8"e contiene en cada nodo "n dAgito
decimal =M..0;& determinar el (alor 8"e se o*tiene si consideramos la
informacin de cada nodo de la lista como los tDrminos de "n polinomio& donde
el tDrmino de menor grado es el Fltimo nodo ' el de m7,imo grado es el del
comien:o& e(al"ando el polinomio para "n (alor 8"e se le pasa como
par7metro.
."ncion pot =*ase- enteroJ e,p- entero;- real
?ar
I- entero
Ac"m- real
Inicio
Ac"m 1
%esde i Q 1 9asta e,p
Ac"m ac"m I *ase
.in desde
3etorno ac"m
.in
."ncion polinomio =fin- ptrea nodoedo*leJ ,- entero;- real
?ar
3es- real
P- p"ntero a nodoedo*le
Inicio
+,p M
3es M
P final
2ientras p KL nil
3es res H =cinfo I pot =,&e,p;
P pant
PGINA 1$2 /176
+,p e,p H 1
.in mientras
3etorno res
.in
$. 1enemos almacenado en "n fic9ero de prod"ctos el stocN de cada "no de ellos
en el almacDn. Cada registro tiene identificador& nom*re& stocN act"al ' stocN
mAnimo. Iterati(amente& 9asta 8"e se introd":ca "n identificador de prod"cto
ig"al a M& se ir7n 9aciendo pedidos o entregas pidiDndonos el identificador& la
cantidad ' si es pedido o entrega& ' con ellos iremos act"ali:ando la cantidad de
prod"ctos en almacDn. Al final 8"iero tener el fic9ero act"ali:ado. Para ello&
"tili:aremos "na lista enla:ada como estr"ct"ra a",iliar.
1ipo prod"cto- registro
Indentificador- entero
Nom*re- cadena
StocNeact- entero
StocNemin- entero
.in registro
Nodo- registro
Info- prod"cto
Sig- p"ntero a nodo
.in registro
?ar
Com& ptr- p"ntero a nodo
3eg- prod"cto
.ic9- fic9ero de prod"cto
Id&cant- entero
Car- car7cter
Inicio
Com nil
A*rir =fic9&Sdatos.datS&entrada;
!eer =fic9®
2ientras no eof =fic9;
Insertar =com®
!eer =fic9®
.in mientras
Cerrar =fic9;
+scri*ir RIdentificadorS
!eer =id;
2ientras id KL M
+scri*ir RCantidadS
!eer cant
+scri*ir RPedido/+ntregaS
!eer car
2odifica =com&id&cant&car;
+scri*ir RIdentificadorS
!eer id
.in mientras
A*rir =fic9&Sdatos.datS&salida;
Ptr com
2ientras com KL nil
+scri*ir =fic9&cominfo;
Com comsig
Ptrsig %ISP
%ISP ptr
Ptr com
.in mientras
Cerrar =fic9;
.in
Procedimiento insertar =ent>sal com- p"ntero a nodoJ elem- prod"cto;
?ar
!"g&l"gp&n"e(o- p"ntero a nodo
Inicio
Si %ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP
%ISPSig
N"e(oinfo elem
Si com Q nil
+ntonces n"e(osig com
Com n"e(o
Sino l"gp com
!"g comsig
2ientras =elem.identificador L l"ginfo; ' =l"g KL nil;
!"gp l"g
!"g
l"gsig
.in mientras
PGINA 1$/176
.in si
.in
.in si
N"e(osig l"g
!"gpsig n"e(o
Procedimiento modifica =prim- ptrea nodoJ d- enteroJ c- enteroJ caract- car7cter;
?ar
Ptr- p"ntero a nodo
Inicio
Si prin Q nil
+ntonces escri*ir R!ista (aciaS
Sino ptr prin
2ientras =ptr KL nil; ' =id KL ptrinfo.identificador;
Ptr ptrsig
.in mientras
Si ptr Q nil
+ntonces escri*ir R+l prod"cto no e,isteS
Sino si =caract Q WPX; o =caract Q WpX;
+ntonces ptrinfo.cantidad ptrinfo.cantidad H c
Sino si ptrinfo.cantidad LQ c
+ntonces ptrinfo.cantidad ptrinfo.cantidad i c
Sino escri*ir RNo 9a' cantidad s"ficienteS
.in si
.in si
.in
.in si
.in si
PGINA 1$$/176
). %adas 2 listas enla:adas simples& !1 ' !2& ordenadas en ascendente& act"ali:ar
las 2 listas de modo 8"e !2 8"ede (acAa ' !1 contenga a todos los elementos de
!2& menos a los repetidos. No *orrar elementos& 9a' 8"e enla:arlos.
Procedimiento #"ntar =ent>sal com1- ptrea nodoJ ent>sal com2- ptrea nodo;
?ar
P1&a1& a",& *orrado- p"ntero a nodo
Inicio
Si com2 KL nil
+ntonces si com1 Q nil
+ntonces com1 com2
Sino si =com2info K com1info; ' =com2 KL nil;
+ntonces a", com2
Com2
com2sig
A",sig com1
Com1 a",
Sino a1 com1
P1
com1sig
2ientras =p1 KL nil; ' =com2 KL nil;
Si =com2info K p1info;
+ntonces a1 p1
P1
p1sig
Sino si =com2info Q p1info;
+ntonces *orrado com2
Com2 com2sig
Porradosig %ISP
%ISP *orrado
Sino a", com2
A1sig com2
PGINA 1$)/176
.in si
.in si
Com2sig P1
Com2 a",sig
A1 a1sig
.in mientas
Si com2 KL nil
+ntonces a1sig com2
Com2 nil
.in si
.in
.in si
.in si
.in si
6. Implementar "na cola "sando listas enla:adas simples-
Procedimiento meter =ent>sal com- ptrea nodoJ ent>sal final- ptrea nodoJ e- KtipoL;
?ar
N"e(o- ptrea nodo
Inicio
Si %ISP Q nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP
%ISPsig
N"e(osig Nil
Si com Q nil
+ntonces com n"e(o
.inal n"e(o
Sino finalsig n"e(o
.inal n"e(o
.in si
.in
.in si
Procedimiento sacar =ent>sal com-ptrea nodoJ ent>sal final-ptrea nodoJ ent>sal
e-KtipoL;
?ar
Porrado- p"ntero a nodo
Inicio
+ cominfo
Porrado com
Com
comsig Si com
Q nil
PGINA 1$6/176
+ntonces final nil
.in si
Porradosig %ISP
%ISP *orrado
.in
7. Implementar "na cola de prioridades con listas enla:adas simples-
Procedimiento meter =ent>sal com- ptrea nodoJ e- KtipoLJ p- entero;
?ar
!"gp& l"g& n"e(o- p"ntero a nodo
Inicio
Si %ISP Q nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP %ISPsig
N"e(oinfo e
N"e(oprioridad p
!"gp nil
!"g com
2ientras =l"g KL nil; ' =p LQ l"gprior;
!"gp l"g
!"g l"gsig
.in mientras
Si l"gp Q nil
+ntonces n"e(osig com
Com n"e(o
Sino l"gpsig n"e(o
N"e(osig l"g
.in si
.in
.in si
Procedimiento sacar =ent>sal com-ptrea nodoJ ent>sal e-KtipoL;
PGINA 1$7/176
?ar
Porrado- p"ntero a nodo
Inicio
+ cominfo
Porrado com
Com
comsig
Porradosig %ISP
%ISP *orrado
.in
/. Implementar "na cola de prioridades como lista de listas-
1ipo nodoeprior- registro
Prior- entero
Prinp- ptrea nodoeinfo
Sig- ptrea nodoepr
.in registro
Nodoeinfo- registro
Info- KtipoL
+nl- ptrea nodoeinfo
.in registro
Procedimiento meter =ent>sal com-ptrea nodoepriorJ elem-KtipoLJ p- entero;
?ar
N"e(oi& l"gi- p"ntero a nodoeinfo
N"e(op& ptr& ptra- p"ntero a nodoeprior
Inicio
Si =%ISPP Q nil; ' =%ISPI Q nil;
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(oi %ISPI
%ISPI
%ISPIenl
N"e(oiinfo elem
N"e(osig NI!
Ptra nil
Ptr com
2ientras =ptr KL nil; ' =p L ptrprior;
Ptra ptr
Ptr ptrsig
PGINA 1$//176
PGINA 1$0 /176
.in mientras
Si =p Q ptrprior;
+ntonces l"gi ptrprinp
2ientras =l"gisig KL nil;
!"gi l"gienl
.in mientas
!"gisig n"e(o
Sino n"e(op %ISPP %ISPP
%ISPPsig
N"e(opprior p
N"e(opsig ptr
N"e(opprinp n"e(oi
Si =ptra Q nil;
+ntonces com n"e(op
Sino ptrasig n"e(op
.in si
.in si
.in
.in si
Procedimiento sacar =ent>sal com- ptrea nodoepriorJ ent>sal e-KtipoL;
?ar
Pori- ptrea nodoeinfo
Porp- ptrea nodoeprior
Inicio
+ comprinpinfo
Pori comprinp
Comprinp comprinpenl
Porienl %ISPI
Si comprinp Q nil
+ntonces *orp com Com
comsig
Porpsig %ISPP
%ISPP *orp
.in si
.in
>RBOLES Y GRAFOS: ESTRUCTURAS DE
DATOS NO LINEALES: TEMA 12
1. r*oles.
2. r*oles *inarios.
. r*oles *inarios de *Fs8"eda.
$. Aplicaciones de los 7r*oles *inarios.
). Grafos.
6. 4peraciones con grafos.
7. Aplicaciones de los grafos.
1. 3P4 ! +S-
!os 7r*oles est7n dentro de las estr"ct"ras de datos no lineales& 8"e
consisten en 8"e desde "n nodo tengo acceso a (arios elementos.
6n 7r*ol es "n con#"nto finito de elementos llamados nodos& 8"e g"ardan
entre sA "na relacin #er7r8"ica tal 8"e siempre (a a e,istir "n nodo raA:
diferenciado del resto& ' los restantes parten de Dl& formando con#"ntos dis#"ntos
cada "no de los c"ales es a s" (e: otro 7r*ol. A cada "no de esos 7r*oles se les
llama s"*7r*oles del raA:.
6n 7r*ol (acAo es a8"el 8"e no tiene ningFn nodo =3ai: Q NI!;.
A
P . !
C % + G T
I G j
1erminologAa de los 7r*oles-
> 3aA:- Nodo esencial de 8"e parten todos los dem7s. +s el Fnico 8"e no tiene
antecesor.
> Nodo- Cada "no de los elementos del 7r*ol.
> To#a o nodo terminal- Nodo 8"e no tiene ningFn otro s"*7r*ol de*a#o de Dl.
> Ti#o- Cada nodo 8"e no es 9o#a tiene de*a#o de Dl a otros s"*7r*oles.
> Padre- 1odo nodo e,cepto el raA:& 8"e tiene asociado "n predecesor del 8"e
desciende.
> Termano- 3elacin entre los nodos 9i#os del mismo padre.
> Nodo interno- +l 8"e tiene algFn 9i#o.
> Ni(el- Cada nodo de "n 7r*ol tiene asociado "n nFmero de ni(el. +l del raA: es
el M& ' a partir de a9A se (a a"mentando de 1 en 1.
> Camino entre A ' P- S"cesin de enlaces o nodos por los 8"e 9a' 8"e pasar
para llegar de A a P.
> 3ama- Camino 8"e termina en "na 9o#a.
> Prof"ndidad de "n 7r*ol- +s el nFmero m7,imo de nodos de la rama m7s larga
del 7r*ol. +8"i(ale al nFmero m7,imo de ni(eles H 1.
> Peso- NFmero de 9o#as 8"e tiene "n 7r*ol.
> Pos8"e- Coleccin de 2 o m7s 7r*oles.
2. 3P4 ! +S PINA3 I 4S-
Son "n con#"nto finito de elementos llamados nodos 8"e contienen "n nodo
raA: ' donde cada nodo p"ede tener M&1& 2 9i#os. A cada s"*ar*ol se le denomina
s"*ar*ol i:8"ierdo ' s"*ar*ol derec9o.
1erminologAa-
> %os 7r*oles *inarios son similares si tienen los nodos colocados ig"al.
> r*oles *inarios e8"i(alentes o copias- 1ienen la misma estr"ct"ra ' los
mismos contenidos.
> r*oles *inarios e8"ili*rados- A8"ellos 8"e en la alt"ra entre s" 7r*ol
i:8"ierdo ' derec9o se diferencian como m7,imo en "na "nidad.
> r*oles *inarios completos- A8"ellos en 8"e cada nodo del 7r*ol tiene M 2
9i#os& el nFmero m7,imo de 9i#os de "n determinado ni(el i ser7 2 ele(ado a i.
> r*ol lleno- C"ando todos los ni(eles est7n completos.
3epresentacin de 7r*oles *inarios-
Se p"eden representar con memoria est7tica o din7mica. Con memoria
din7mica la estr"ct"ra de "n nodo (a a tener el campo info ' otros 2 nodos 8"e
referDncien al 9i#o i:8"ierdo ' derec9o de cada nodo.
3epresentacin de 7r*oles *inarios con p"nteros-
Cada nodo (a a tener "n registro 8"e contiene el campo de informacin ' 2
campos de tipo p"ntero.
IN.4
IaC %+3
1ipo nodoear*ol- registro
Info- KtipoL
I:8&der- ptrea nodoear*ol
.in registro
A parte de los nodos& los 7r*oles tienen "na (aria*le especial llamada raA:&
8"e es de tipo p"ntero a nodoear*ol ' ap"nta al nodo 8"e est7 al comien:o del
7r*ol.
3ai:
%ISPeA3 (a a ser "na lista enla:ada simple en la 8"e las inserciones '
*orrados los 9acemos por el comien:o ' como campo de enlace (amos a "sar el
nodo i:8"ierdo.
3ecorrido de los 7r*oles *inarios-
+s pasar por todos s"s nodos. Para recorrer "n 7r*ol lo podemos 9acer de
formas& segFn el momento en el 8"e procesemos el nodo raA:. !as formas se
llaman - Preorden& Inorden& Posorden.
+n c"al8"iera de las tres& siempre se recorre primero el s"*7r*ol i:8"ierdo&
' l"ego el derec9o& ' se diferencian en el momento en el 8"e recorremos el raA:.
> Preorden- !a raA: se procesa primero& l"ego el i:8"ierdo ' l"ego el derec9o.
> Inorden- Primero la raA:& l"ego el i:8"ierdo ' l"ego el derec9o.
> Posorden- Primero el i:8"ierdo& l"ego el derec9o ' l"ego la raA:.
Preorden- A& P& %& +& G& C& .
Inorden- %& P& +& G& A& .& C
Posorden- %& G& +& P& .& C& A
> 3ecorrido de "n 7r*ol *inario-
!os ar*oles son estr"ct"ras rec"rsi(as& por lo 8"e los algoritmos m7s
eficientes con 7r*oles son los rec"rsi(os.
Procedimiento preorden =rai:- ptrea nodoear;
Inicio
Si rai: KL nil
+ntonces cprocesar rai:info;
.in si
.in
Preorden =rai:i:8;
Preorden =rai:der;
Procedimiento inorden =rai:- ptrea nodoear;
Inicio
Si rai: KL nil
+ntonces inorden =rai:i:8;
cprocesar rai:info;
inorden =rai:der;
.in si
.in
Procedimiento posorden =rai:- ptrea nodoear;
Inicio
Si rai: KL nil
+ntonces posorden =rai:i:8;
Posorden =rai:der;
cprocesar rai:info;
.in si
.in
1am*iDn se p"ede recorrer "n 7r*ol *inario con "n algoritmo no rec"rsi(o-
Algoritmo inorden
?ar
Pila- arra'U1..2a,V de p"ntero a nodoear
Cima- entero
3ai:& ptr- p"ntero a nodoear
Inicio
Cima 1
PilaUcimaV Nil
Ptr rai:
2ientras =ptr KL nil;
Cima cima H 1
PilaUcimaV ptr
Ptr ptri:8
.in mientras
Ptr pilaUcimaV
Cima cima>1
2ientras =ptr KL nil;
cprocesar ptrinfod
si ptrder KL nil
entonces ptr ptrder
mientras ptr KL nil
cima cima H 1
PGINA 1)/176
PGINA 1)$ /176
fin si
pilaUcimaV ptr
ptr ptri:8
fin mientras
ptr pilaUcimaV
cima cima i 1
fin mientras
.in
. 3P4 ! +S PINA3 I 4S %+ PmSC6+%A-
Son "n tipo especial de 7r*oles *inarios 8"e se caracteri:a por8"e los
elementos del 7r*ol son todos distintos ' adem7s est7n colocados de tal manera 8"e
el recorrido en Inorden de ese 7r*ol da l"gar a 8"e los elementos se procesen
ordenados segFn "n determinado campo de informacin& para ello es necesario 8"e
todos los nodos del 7r*ol c"mplan la sig"iente regla- C"e todo lo 8"e est7 a la
i:8"ierda de "n nodo tenga "n (alor menor 8"e el resto del nodo& ' todo lo 8"e esta
a la derec9a tenga "n (alor ma'or.
2)
1/ )
12 22 M /
11 1) 21 2 7 $M
1$ 16
3ecorrido inorden- 11&12&1$&1)&16&1/&21&22&2)&M&2&)&7&/&$M.
> PFs8"eda de "n elemento-
%ado "n elemento& mirar si se enc"entra o no en el 7r*ol& (o' a de(ol(er "n
p"ntero a ese elemento ' a s" padre.
Procedimiento *"scar =rai:- ptrea nodoearJ ent>sal act- ptrea nodoearJ
ent>sal pad- ptrea nodoearJ e-KtipoL;
Inicio
Pad Nil
Act rai:
2ientras =act KL nil; ' =actinfo KL e;
Pad act
Si =e K actinfo;
+ntonces act acti:8
Sino act actder
.in si
.in mientras
Si act KL nil
+ntonces escri*ir R+lemento encontradoS
Sino escri*ir R+lemento no encontradoS
.in si
.in
> Insercin en "n 7r*ol *inario-
Primero 9a' 8"e (er 8"e no 9a'a otro elemento ig"al en el 7r*ol& ' desp"Ds
9a*r7 8"e colocar el elemento a la i:8"ierda de s" padre si es menor 8"e Dl o al
derec9a si es ma'or.
Algoritmo no rec"rsi ( o-
Procedimiento insercion =ent>sal rai:- ptrea nodoearJ elem-KtipoL;
?ar
Ptr&pad&n"e(o- ptrea nodoear
Inicio
P"scar =rai:&ptr&pad&elem;
Si ptr KL nil
+ntonces escri*ir R+l elemento 'a e,isteS
Sino si %ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP
%ISPIaC
N"e(oinfo elem
N"e(oi:8 nil
N"e(oder nil
Si PA% Q nil
+ntonces rai: n"e(o
Sino si elem K padinfo
+ntonces padi:8 n"e(o
sino Padder n"e(o
fin si
fin si
.in
fin si
fin si
Algoritmo rec"rsi(o-
Procedimiento insercion =ent>sal ptr- ptrea nodoearJ elem-KtipoL;
Inicio
Si ptr KL nil
+ntonces si elem K ptrinfo
+ntonces insercion =ptri:8&elem;
Sino si elem L ptrinfo
+ntonces insercion =ptrder&elem;
Sino escri*ir R+l elemento 'a e,isteS
.in si
.in si
Sino ptr %ISP
%ISP %ISPi:8
Ptrinfo elem
Ptri:8 nil
Ptrder nil
.in si
.in
> Porrado en "n 7r*ol *inario-
Si el nodo a *orrar slo tiene "n 9i#o& lo s"stit"imos por ese ' 'a se aca*o.
Pero si el nodo a *orrar tiene 2 9i#os& 9a' 8"e *"scar c"al es el s"cesor de ese nodo
=estar7 a la derec9a del m7s a la i:8"ierda; ' el padre de ese s"cesor. S"stit"ir el
nodo a *orrar por s" s"cesor. Al final 9a' 8"e poner como 9i#os del s"cesor =8"e es
el 8"e 9a s"stit"ido al nodo *orrado; a los 9i#os del nodo *orrado.
> Algoritmo no rec"rsi(o-
Procedimiento *orrar =ent>sal rai:- ptrea nodoearJ elem-KtipoL;
?ar
Ptr& pad- ptrea nodoear
Inicio
P"scar =rai:&ptr&pad&elem;
Si ptr Q nil
+ntonces escri*ir R+l elemento no e,isteS
Sino si =ptri:8 KL nil; ' =ptrder KL nil;
+ntonces *orrare2e9 =rai:&ptr&pad;
Sino *orrareM1e9 =rai:&ptr&pad;
.in si
Ptri:8 %ISP
%ISPi:8 ptr
.in si
.in
Procedimiento *orrare2e9 =ent>sal rai:- ptrea nodoearJ ent>sal- ptrea nodoearJ
pad- ptrea nodoear;
?ar
S"c&pads"c&9i#os"c- ptrea nodoear
Inicio
Pads"c ptr
S"c ptrder
2ientras s"ci:8 KL nil
Pads"c s"c
S"c s"ci:8
.in mientras
Ti#os"c
s"cder
Si pads"ci:8 Q s"c
+ntonces pads"ci:8 9i#os"c
Sino pads"cder 9i#os"c
.in si
Si pad Q nil
+ntonces rai: s"c
Sino si padi:8 Q ptr
+ntonces padi:8 s"c
Sino padder s"c
.in si
PGINA 1)6/176
.in si
PGINA 1)7 /176
S"ci:8 ptri:8
S"cder ptrder
.in
Procedimiento *orrareM1e9 =ent>sal rai:- ptrea nodoearJ ent>sal ptr- ptrea
nodoearJ
?ar
Ti#o- ptrea nodoear
Inicio
Si ptri:8 KL nil
Pad- ptrea nodoear;
+ntonces 9i#o ptri:8
Sino 9i#o ptrder
.in si
Si pad Q nil
+ntonces rai: 9i#o
Sino si ptr Q padi:8
+ntonces padi:8 9i#o
Sino padder 9i#o
.in si
.in si
.in
> Algoritmo rec"rsi(o-
Procedimiento *orrar =ptr- ptrea nodoearJ elem-KtipoL;
Inicio
Si ptr KL nil
+ntonces si elem K ptri:8
+ntonces *orrar =ptri:8& elem;
Sino si elem L ptrder
+ntonces *orrar =ptrder& elem;
Sino si ptri:8 Q Nil
+ntonces ptr
ptri:8
Sino si ptrder Q Nil
+ntonces ptr ptri:8
Sino eliminar =ptrder& ptr;
.in si
.in si
.in si
.in si
Ptri:8 %ISP
%ISP ptr
Sino escri*ir R+l nodo no e,isteS
.in
Procedimiento eliminar =ent>sal s"c- ptrea nodoearJ ent>sal ptr- ptrea nodoear;
Inicio
Si s"ci:8 KL nil
+ntonces eliminar =s"ci:8& ptr;
Sino ptrinfo s"cinfo
Ptr s"c
.in si
.in
$. AP!ICACI4N+S %+ !4S 3P4!+S P I NA3I4S-
> 6na de las aplicaciones m7s importantes es dentro de la inteligencia artificial& '
m7s concretamente en el 7rea de reconocimiento de patrones.
Se trata de "tili:ar los 7r*oles para reali:ar clasificaciones. !a cla(e est7 en
asignar a cada nodo del 7r*ol "n significado ' a cada rama& "na resp"esta 8"e
nos a'"de a determinar el sentido de la *Fs8"eda.
> 1ransformacin de "na notacin alge*raica a otra- Prefi#a& infi#a& posfi#a
=Ha*&aH*&a*H;. Para ello la raA: del 7r*ol de*e de ser "n signo ' para las ramas
o s"*7r*oles& otra e,presin o "n operando.
> Para implementar el algoritmo de Todman de compresin ' codificacin.
). G3A.4S-
+l grafo es "na estr"ct"ra de datos no lineal& tal 8"e a9ora desde "n nodo
podemos ap"ntar a (arios& pero a s" (e: "n nodo p"ede ser ap"ntado desde otros.
1erminologAa de los grafos-
6n grafo se compone por "n con#"nto ? de (Drtices ' "n con#"nto A de
aristas. Cada arista se identifica con "n par de (Drtices 8"e indican los (Drtices a
los 8"e "ne la arista. !os (Drtices de "na arista son entre sA nodos ad'acentes.
> Grado de "n nodo- NFmero de aristas 8"e contiene a ese nodo.
> Grado de "n grafo- NFmero de (Drtices de ese grafo. Si el grado de "n nodo es
M& se dice 8"e es "n nodo aislado.
> Camino- 6n camino C de longit"d N de "n nodo ?1 a "n nodo ?2& se define
como la sec"encia de nodos por los 8"e 9a' 8"e pasar para llegar del nodo ?1 a
?2. !a longit"d de ese camino es el nFmero de aristas 8"e comprende ese
camino.
+l camino es cerrado si empie:a ' termina en el mismo nodo. +l camino es
simple si todos los nodos de dic9o camino son distintos a e,cepcin de los de los
e,tremos 8"e p"eden ser ig"ales.
2
1 C =1&6;
$ 1&$&6 Caminos simples
PGINA 1)0 /176
6 1&$&)&6
) 1&$&&$&)&6
Aristas especiales-
> P"cles- +s "na arista c"'os e,tremos son idDnticos.
> Arista mFltiple- %os o m7s aristas 8"e conectan los mismos nodos.
1ipos de grafos-
> Grafo conectado o cone,o- +,iste "n camino simple entre 2 c"ales8"iera de s"s
nodos.
> Grafo desconectado- A8"el en 8"e e,isten nodos 8"e no est7n "nidos por
ningFn camino.
> Grafo dirigido- Cada arista tiene asignada "na direccin =identificada por "n
par ordenado;.
> Grafo no dirigido- !a arista est7 definida por "n par no ordenado.
> Grafo sencillo- A8"el 8"e no tiene ni *"cles ni aristas mFltiples.
> Grafo mFltiple o m"ltigrafo- Permite la e,istencia de aristas mFltiples o *"cles.
> Grafo completo- Cada nodo del grafo es ad'acente a todos los dem7s.
> Grafo eti8"etado con peso ponderado- A8"el en el 8"e a cada arista del grafo
(a asociado "n (alor 8"e es lo 8"e llamamos peso de la lista. Se "sa para
indicar algo& como la longit"d de la arista o la importancia de la arista& ...
> Peso de "n camino- !a s"ma de los pesos de las aristas del camino.
3epresentacin de los grafos-
Ta' 2 formas de representar los grafos& con memoria est7tica ' con
memoria din7mica-
Con memoria est7tica-
> 2atri: de ad'acencia- +s "na matri: 2 de NIN elementos donde N es el
nFmero de nodos del grafo& donde cada posicin 2=i&#; Andica si 9a' "na
cone,in o no entre el nodo 8"e aparece asociado a la posicin I de la matri: '
el nodo 8"e aparece asociado a la matri: G.
Si lo 8"e 8"iero es representar "n grafo ponderado en (e: de poner M ' 1&
pondremos M si no esta conectado ' el (alor de la arista si e,iste cone,in.
Si el grafo no es dirigido res"lta "na matri: simetrica.
!as potencias de la matri: de ad'acencia 2 ele(ado a j nos indican en las
posiciones 8"e tiene (alor 1 8"e e,iste "n camino de longit"d j entre los nodos
asociados a las posiciones I& G de esa matri:.
%estino
1 2 $ ) 6
1 M M M 1 M M
2 M M M M M M
1 1 M 1 M M
$ M M M M M M
PGINA 16M /176
) M M M 1 1 1
6 M M M M M M
4rigen
2
1
$
)
6
Con memoria din7mica-
?amos a "tili:ar 2 listas enla:adas& "na es la lista de nodos =formada por
todos los (Drtices ' aristas del grafo.
Cada nodo de esa lista tendr7 la sig"iente informacin-
> Info- Informacin del nodo.
> Sig- P"ntero 8"e enla:a con el sig"iente nodo de la lista de nodos.
> Ad'- Ap"nta al primer elemento de la lista de ad'acencia.
!a lista de ad'acencia contiene o enla:a a todas las aristas 8"e parten de ese
nodo. +l con#"nto de todas las listas de ad'acencia& forman "na lista de listas.
!a lista de ad'acencia se implementa como otra lista enla:ada en la 8"e
cada nodo de esa lista contiene 2 campos-
> %es =destino;- +s "n campo p"ntero al nodo destino de la lista.
> +nl =enlace;- +s "n campo p"ntero 8"e ap"nta al sig"iente nodo o arista
de la lista de ad'acencia de ese nodo.
1
1
Sig Ad' %es +nl
2
2
$
1ipo (ertice- registro
Info- KtipoL
Sig- ptrea (ertice
Ad'- ptrea arista
.in registro
1ipo arista
%es- ptrea (ertice
PGINA 161 /176
+nl- ptrea arista
=I +l peso de la arista irAa a8"A I;
.in registro
Para mane#ar la memoria disponi*le (amos a tener 2 listas-
> A%ISP- Ap"nta al primer nodo 8"e enla:a a los nodos de tipo arista disponi*le.
> N%ISP- Ap"nta la primer nodo 8"e enla:a a los nodos de tipo (Drtices. Nos
mo(emos con el campo sig.
6. 4P+3ACI4N+S C4N G3A . 4S-
> PFs8"eda de "n nodo-
!o 8"e se trata es de locali:ar "n nodo 8"e contiene "na determinada
informacin& para ello le pasamos la informacin al procedimiento ' nos de("el(e
la posicin si lo enc"entra o Nil si no lo enc"entra.
Procedimiento P"scarenodo =elem-KtipoLJent>sal ptr-ptrea (erticeJ prin- ptrea
(ertice;
Inicio
Ptr prin
2ientras =ptrinfo KL elem; ' =ptr KL nil;
Ptr ptrsig
.in mientras
.in
> PFs8"eda de "na arista-
Se trata de *"scar "na arista dados s"s campos de informacin origen '
destino. %e("el(e "n p"ntero a la lista de aristas 8"e ap"nta a esa arista o Nil si no
e,iste.
Procedimiento *"scarearista =prin- ptrea (eriticeJ orig-KtipoLJ des-KtipoLJ
ent>sal ptr- ptrea aristaJ ent>sal p1- ptrea (erticeJ
ent>sal p2- ptrea (ertice;
Inicio
P"scarenodo =prin&orig&p1;
Si p1 Q nil
+ntonces escri*ir RNo e,iste el nodo origenS
Sino *"scarenodo =prin&des&p2;
Si p2 Q nil
+ntonces escri*ir RNo e,iste el nodo destinoS
Sino ptr p1ad'
2ientras =ptr KL nil; ' =ptrdes KL p2;
Ptr ptrenl
.in mientras
.in si
PGINA 162 /176
.in si
.in
> Insercin de "n nodo-
Primero de*emos mirar si no e,iste "n nodo 8"e contenga esa informacin
' para insertar el nodo lo insertamos por el principio.
Procedimiento insertarenodo =ent>sal prin- ptrea (erticeJ elem- KtipoL
?ar
N"e(o- ptrea (erticeJ
Inicio
Si N%ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o N%ISP
N%ISP
N%ISPSig
N"e(oinfo elem
N"e(oad' Nil
N"e(osig prin
Prin n"e(o
.in si
.in
> Insercin de "na arista-
Primero 9a' 8"e compro*ar si e,isten los nodos origen ' destino& l"ego 9a'
8"e compro*ar 8"e no e,iste "na arista ig"al en esa direccin ' para insertarla&
como el orden no importa se inserta por el principio.
Procedimiento insertarearista =prin- ptrea (erticeJ orig-KtipoLJ dest-KtipoLJ
ent>sal p1- ptrea (erticeJ ent>sal p2- ptrea (ertice;
?ar
N"e(o& pa- ptrea arista
Inicio
Si A%ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Sino *"scarearista =prin&orig&des&pa&p1&p2;
Si pa KL nil
+ntonces escri*ir R!a arista 'a e,isteS
Sino N"e(o A%ISP
A%ISP A%ISPSig
N"e(odest p2
PGINA 16 /176
.in si
.in
.in si
N"e(oenl p1ad'
P1ad' n"e(o
> Porrado de "na arista-
Procedimiento *orrarearista =prin- ptrea (erticeJ orig-KtipoLJ des-KtipoLJ
p1- ptrea (erticeJ p2- ptrea (ertice;
?ar
Act& ant& pa- ptrea arista
Inicio
P"scarearista =prim&or&dest&pa&p1&p2;
Si pa Q nil
+ntonces escri*ir R!a arista 'a e,isteS
Sino ant nil
Act p1ad'
2ientras =actdest KL p2; ' =act KL nil;
Ant act
Act actenl .in
mientras Antenl
actenl Si ant Q nil
+ntonces p1ad' p1ad'enl
Sino antenl actenl
.in si
Actenl A%ISP
A%ISP act
.in si
.in
> Porrado de "n nodo-
Primero 9a' 8"e compro*ar si e,iste el nodo ' desp"Ds se *orran todas s"s
aristas.
Procedimiento *orrarenodo =ent>sal prin- ptrea (erticeJ info-KtipoL;
?ar
Ptr& p1& p2& act& ant- ptrea (ertice
Pa& *orrado- ptrea arista
Inicio
Porrarenodo =prin&elem&ptr;
Si ptr Q nil
+ntonces escri*ir RNo e,iste el nodo a *orrarS
Sino act prin
2ientras act KL nil
Porrarearista =prin&actinfo&elem;
Act actsig
.in mientras
Actenl A%ISP
PGINA 16$ /176
A%ISP ptrad' S4!4 +N PS+6%4C5%IG4
Ptr ad' Nil
Porrado ptrad'
2ientras *orrado KL nil
Porrarearista =prin&elem&*orradodestinoinfo; +N
C6A!C6I+3
Porrado *orradoenl !+NG6AG+
.in mientras
.in si
.in
Antnil
Actprin
2ientras =act KL nil; ' =actinfo KL elem;
Ant ant
Act actsig
.in mientras
Si ant Q nil
+ntonces prin prinsig
Sino antsig actsig
.in si
Actsig N%ISP
N%ISP act
7. AP!ICACI4N+S %+ !4S G3A.4S-
> Se p"eden representar transformaciones de estado con los grafos.
> Sir(en en di(ersos campos de in(estigacin para encontrar el mDtodo m7s corto
' 8"e c"este lo menos posi*le.
> Para el 7lge*ra se "tili:a la matri: de ad'acencia.
EJERCI CIOS: TEMA 12
1. +n "n 7r*ol *inario de *Fs8"eda& dar todos los elementos inferiores a "no dado
con informacin elem.
Procedimiento *"scar =rai:- ptrea nodoearJ ent>sal ptr- ptrea nodoearJ elem-
KtipoL;
Inicio
Ptr rai:
2ientras =ptrinfo KL elem; ' =ptr KL nil;
Si ptrinfo L elem
+ntonces ptr ptrder
Sino ptr ptri:8
.in si
.in mientras
.in
PGINA 16) /176
Procedimiento inorden =ptr- ptrea nodoear;
Inicio
Si ptr KL nil
+ntonces inorden =ptri:8;
+scri*ir =ptrinfo;
Inorden =ptrder;
.in si
.in
Procedimiento inferiores =rai:- ptrea nodoearJ elem- KtipoL;
?ar
Ptr- ptrea nodoear
Inicio
P"scar =rai:&ptr&elem;
Si ptr Q nil
+ntonces escri*ir R+l elemento no e,isteS
Sino inorden =ptri:8;
.in si
.in
2. !istar en orden descendente el (alor de todos los nodos de "n 7r*ol *inario de
*Fs8"eda.
Procedimiento decreciente =p- ptrea nodoear;
Inicio
Si p KL nil
+ntonces decreciente =pder;
+scri*ir pinfo
%ecreciente =pi:8;
.in si
.in
. +ncontrar el m7,imo (alor de "n 7r*ol *inario de *Fs8"eda.
Procedimiento *"scaema, =rai:- ptrea nodoear;
?ar
Ptr- ptrea nodoear
Inicio
Ptr rai:
2ientras ptrder KL nil
Ptr ptrder
.in mientras
+scri*ir ptrinfo
.in
$. Porrar el elemento menor de "n 7r*ol *inario de *Fs8"eda.
Procedimiento *orraremin =ent>sal rai:- ptrea nodoear;
?ar
Pad& ptr- ptrea nodoear
PGINA 166 /176
Inicio
Si rai: Q nil
+ntonces escri*ir Rr*ol (acioS
Sino pad nil
Ptr rai:
2ientras ptri:8 KL nil
Pad ptr
Ptr ptri:8
.in mientras
Si pad Q nil
+ntonces rai: ptrder
Sino padi:8 ptrder
.in si
Ptri:8 %ISP
%ISP ptr
.in si
.in
). +ncontrar el seg"ndo elemento ma'or de "n 7r*ol *inario de *Fs8"eda.
Procedimiento %osema'or =rai:- ptrea nodoear;
?ar
Pad&ma,&ma,2- ptrea nodoear
Inicio
Si rai: Q nil
+ntonces escri*ir Rr*ol (acioS
Sino pad nil
2a, rai:
2ientras ptrder KL nil
Pad ma,
2a, ma,der
.in mientras
Si ptri:8 Q nil
+ntonces si pad KL nil
+ntonces escri*ir R+l seg"ndo ma'or esS padinfo
PGINA 167 /176
.in si
Sino ma,2
ptri:8
2ientras ma,2der KL nil
2a,2 ma,2der
.in mientras
+scri*ir R+l seg"ndo ma'or esS ma,2info
.in si
.in
.in si
6. A@adir "n *"cle en el nodo con informacin elem.
Procedimiento inse*"cle =prin- ptrea (erticeJ elem- KtipoL;
?ar
Ptr- ptrea (ertice
N"e(o- ptrea arista
Inicio
P"scarenodo =prin&elem&ptr;
Si ptr Q nil
+ntonces escri*ir RNo e,iste el nodoS
Sino n"e(o A%ISP
A%ISP
A%ISPsig
N"e(oder ptr
N"e(oenl
ptrad' Ptrad'
n"e(o
.in si
.in
7. %ado "n grafo& determinar si "n nodo con informacin elem es "n nodo f"ente
=8"e no le lleg"en aristas;
Procedimiento nodoef"ente =prin- ptrea (erticeJ elem- KtipoL;
?ar
Ptr& pn- ptrea (ertice
."ente- *oolean
Pa- ptrea arista
Inicio
P"scarenodo =prin&elem&ptr;
Si ptr Q nil
+ntonces escri*ir R+l nodo no e,isteS
Sino si ptrad' Q nil
+ntonces escri*ir RNodo sin aristas de origenS
Sino f"ente (erdadero
Pn prin
2ientras =pn KL nil; ' =f"ente Q (erdadero;
PGINA 16/ /176
Pa pnad'
PGINA 16/ /176
.in si
.in
.in si
2ientras =pa KL nil; ' =f"ente Q (erdadero;
Si padest Q ptr
+ntonces f"ente falso
Sino pa paenl
.in si
.in mientras
Pn pnsig
.in mientras
Si f"ente Q (erdadero
+ntonces escri*ir RSi es "n nodo f"enteS
Sino escri*ir RNo es "n nodo f"enteS
.in si
/. %ado "n grafo en 8"e cada arista tiene "n peso asociado& determinar 8"e
aristas del grado pesan m7s de 1MM& dando la informacin del nodo origen '
destino.
1ipo aristaepeso- registro
%es- ptrea (ertice
+nl- ptrea aristaepeso
.in registro
Procedimiento arepeso =prin- ptrea (ertice;
?ar
Pn- ptrea (ertice
Pa- ptrea aristaepeso
Inicio
Pn prin
2ientras pn KL nil
Pa pnad'
2ientras pa KL nil
PGINA 160 /176
Si papeso L 1MM
+ntonces escri*ir R4rigenS pninfo
Sino escri*ir R%estinoS padesinfo
.in si
Pa paenl
.in mientras
Pn pnsig
.in mientras
.in
TABLAS DE DEC I SIN:
TEMA 13
1. C"D es "na ta*la de decisin.
2. 1ipos de ta*las.
. Constr"ccin de ta*las.
$. Con(ersin de ta*las a programas.
1. C6g +S 6NA 1A P !A %+ % + CISI5N-
6na ta*la de decisin es "na 9erramienta 8"e me (a a ser(ir para
representar de manera m7s f7cil la lgica de "n pro*lema c"ando est7 es mas o
menos complicada.
Para ello se trata de identificar en el pro*lema las acciones 8"e 9a' 8"e
e#ec"tar ' las condiciones 8"e se tienen 8"e c"mplir para e#ec"tar esas acciones.
!as acciones normalmente las (amos a identificar a tra(Ds de los (er*os& ' las
condiciones (an a ser las condicionales =si&...;.
PGINA 17M /176
!a ta*la (a a tener $ partes-
Con#"nto de condiciones +ntrada de condiciones
o entradas com*inacin de condiciones
Con#"nto de acciones +#ec"cin de acciones
o salidas salida de acciones
Con#"nto de condiciones- Son las condiciones 8"e inter(ienen en el pro*lema.
+ntrada de condiciones- Son las com*inaciones posi*les entre los (alores de las
condiciones. SI& N4& %A IG6A!.
Con#"nto de acciones- A*arca todas las acciones 8"e se tienen 8"e e#ec"tar c"ando
se c"mplen "n con#"nto dado de condiciones.
Salida de e#ec"cin- Se determina c"ando se e#ec"ta cada accin.
BC"D es "na regla de d ecisinE-
+s "na com*inacin de "n estado en la entrada de condiciones ' de "na o
m7s acciones asociadas en la parte de la salida de acciones asociadas en la parte de
la salida de acciones siendo N el nFmero de condiciones ' consider7ndolas como
*inarias =SI/N4; 9a*r7 "n nFmero m7,imo de 2 ele(ado a N reglas.
Cada regla e8"i(ale desde el parte de (ista de programacin a "na
estr"ct"ra si.. entonces& ' en cada momento solo se p"ede c"mplir "na regla.
!as ta*las de decisin las podemos "sar para controlar la lgica de control
de "n programa& en los man"ales de "s"ario para controlar "n programa& para
sa*er c"ando se act"ali:a "n fic9ero&...
+#emplo-
Si me 9acen fi#o me compro "n corsa& si me 9acen fi#o ' me s"*en el s"eldo
me compro "n familiar& ' si me toca la loterAa me compro "n P2h.
C1- .i#o / no fi#o A1- No compro "n coc9e
C2- Salario / no salario A2- Compro "n corsa
C- !oterAa / no loterAa A- Compro "n familiar
A$- Compro "n P2h
.i#o S S S S N N N N
Salario S S N N S S N N
!oterAa S N S N S N S N
No coc9e Y Y Y Y
Corsa Y
.amiliar Y
PGINA 171 /176
P2h Y Y
2. 1IP4S %+ 1AP!A S -
> SegFn el planteamie n t o-
> Propias- Solo tienen reglas simples& solo 9a' SI / N4.
> Impropias- Son las 8"e tienen reglas comp"estas =SI/N4/IN%I.+3+NCIA;.
> SegFn entradas-
> !imitadas- C"ando las reglas son S / N / > / Y =Si se e#ec"ta para las
acciones;.
> +,tendidas- C"ando los (alores 8"e toman las condiciones son diferentes de
SI / N4& ' las acciones son distintas de si se e#ec"ta o no se e#ec"ta.
+n c"al8"ier caso& siempre se p"ede trad"cir "na ta*la mi,ta a "na ta*la
limitada. Cada condicin dar7 ig"al a tantas condiciones simples como (alores
p"eda tomar& ' para cada accin tantas acciones como estados p"eda tomar.
!a (enta#a de las ta*las mi,tas ' e,tendidas es 8"e se (e me#or a primera
(ista& el incon(eniente es 8"e son m7s difAciles de programar.
> SegFn el tratamie n to-
> A*iertas- C"ando desde "na ta*la se 9ace referencia a otra ta*la& pero
l"ego no se ("el(e a la inicial.
> Cerradas- !o mismo 8"e la anterior& pero se ("el(e a la original.
> P"cles- C"ando "na ta*la se llama a sA misma.
1ipos de reglas-
Normalmente las reglas de "na ta*la se consideran como reglas AN%& se
tienen 8"e c"mplir todos los (alores de las condiciones para 8"e se e#ec"te la
opcin asociada a esa regla.
Si se implementa como reglas 43& significa 8"e con 8"e se c"mpla "na sola
regla& se e#ec"ta la accin asociada.
!as reglas +!S+ se 9acen c"ando "n con#"nto de reglas de "na ta*la dan
todas l"gar a la misma accin& entonces se asocian todas como "na regla +!S+.
. C4NS 1 36CCI5N %+ 1 A P ! AS-
Primero locali:amos las condiciones en el en"nciado& desp"Ds las acciones '
las reglas entre las acciones ' las condiciones.
%esp"Ds compr"e*o 8"e la ta*la sea correcta. C"e no oc"rran-
> 3ed"ndancias- Poner la misma regla m7s de "na (e:.
> Completa- C"e no falte alg"na regla.
> Contradictoria- C"e la misma accin de l"gar a cosas contradictorias.
%esp"Ds se mira a (er si se p"ede simplificar la ta*la& a@adiendo si es
posi*le indiferencias =cada "na s"stit"'e a 2 reglas;.
6na ta*la se p"ede simplificar si 9a' 2 reglas 8"e dan l"gar a la misma
accin o con#"nto de acciones ' solo se diferencia en el estado o (alor de "na de s"s
condiciones& entonces s"stit"'o esas 2 reglas por "na sola& 8"e tenga para esa
condicin el (alor de indiferencia.
PGINA 172 /176
.i#o S S S S N N N N
Salario S S N N S S N N
!oterAa S N S N S N S N
No coc9e Y Y Y Y
Corsa Y
.amiliar Y
P2h Y Y
$. C4N? + 3SI5N %+ 1A P !AS A P34G3A2AS-
Primero 9a' 8"e (er si se p"ede simplificar la ta*la.
Ta' 2 formas de 9acer la con(ersin-
> Programacin directa- C"e cada regla e8"i(ale a "na sentencia condicional. +s
m"' ineficiente.
> Pasar la ta*la de decisin a fl"#ograma mediante el sig"iente el mDtodo-
1. Para cada regla al final de s" col"mna ponemos el nFmero de reglas simples a
las 8"e e8"i(ale. Cada indiferencia de "na regla e8"i(ale a 2 reglas simples.
2. Para cada condicin al final de s" fila 9allamos "n coeficiente 8"e res"lta de la
s"ma de los (alores de las reglas para las 8"e esa condicin (alga indiferente&
c"anto menor sea ese (alor& m7s importante es esa regla& por8"e (a a tener
menos reglas para las 8"e esa condicin es indiferente.
. +li#o la condicin con menor (alor en s" coeficiente& si 9a' (arias condiciones
8"e tienen el mismo (alor en s" coeficiente ' adem7s es el menor& 9allo "n
seg"ndo coeficiente 8"e se o*tiene por la diferencia en (alor a*sol"to de la
diferencia entre el nFmero de SI ' N4 en (alor a*sol"to de esas condiciones& '
eli#o la 8"e tenga la diferencia ma'or& ' si sig"e 9a*iendo empate co#o
c"al8"iera de ellas.
$. Para la regla elegida o*tengo otras 2 ta*las& 8"e se caracteri:an por8"e no
contienen 'a a la condicin por la 8"e 9e di(idido las ta*las& ' "na ta*la
contiene las reglas para las 8"e esa condicin contiene (alor SI& ' la otra
contiene las reglas para las 8"e la condicin es N4& ' para las reglas con
condicin indiferencia las pongo en las 2 ta*las& ' con las 2 ta*las ("el(o a
9acer otra (e: lo mismo 9asta 8"e no se p"eda di(idir m7s& ' cada (e: 8"e se
9ace "na di(isin pago la condicin en el fl"#ograma.
+#emplo anterior-
.i#o S S S N M
Salario > S N > 6
!oteria S N N > $
No coc9e Y
Corsa Y
.amiliar Y
P2h Y
2 1 1 $
.i#o SI
PGINA 17 /176
Salario > S N 2
!oteria S N N M
No coc9e
Corsa Y
.amiliar Y
P2h Y
2 1 1
.i#o N4
Salario >
!oteria >
No coc9e Y
Corsa
.amiliar
P2h
Si .i#o No
Si No
!oteria No coc9e
P2h Si Salario No
.amiliar Corsa
Si no fi#o
+ntonces escri*ir RNo coc9eS
Sino si loteria
+ntonces escri*ir RP2hS
Sino si salario
+ntonces escri*ir R.amiliarS
Sino escri*ir RCorsaS
.in si
.in si
.in si
PGINA 17$ /176
EJERCI CIOS: TEMA 13
1. %ado "n fic9ero de empleados ordenado por nFmero de empleado con el
formato& nFmero de empleado& antig^edad& se,o& categorAa& se trata de 9allar
mediante ta*las de decisin 8"e prima reci*e cada empleado sa*iendo 8"e-
A- 2"#eres 8"e son #efes.
P- 2"#eres empleadas con antig^edad ' 9om*res empleados.
C- Tom*res 8"e son #efes.
%- Sin prima. +l resto.
Tacer la ta*la de decisin ' el fl"#ograma.
Antig"edad S S S S N N N N
2"#er S N S N S S N N
PGINA 17) /176
Gefe S S N N S N S N
A Y Y
P Y Y Y
C Y Y
% Y
Antig"edad > > S N N $
2"#er S N > S N 2
Gefe S S N N N M
A Y
P Y Y
C Y
% Y
2 2 2 1 1
Gefe SI
Antig"edad > > $
2"#er S N M
A Y
P
C Y
%
2 2
Gefe N4
Antig"edad S N N M
2"#er > S N 2
A Y
P
C Y
% Y
2 1 1
Gefe
2"#er Antig"edad
P
A C 2"#er
% P
Si #efe
+ntonces si m"#er
+ntonces escri*ir RAS
Sino escri*ir RCS
.in si
Sino si antig^edad
+ntonces escri*ir RPS
Sino si m"#er
+ntonces escri*ir R%S
Sino escri*ir RPS
.in si
.in si
.in si
PGINA 176/176