Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Tot$l
baja = TU < JN =4K K GIN FA
baja G VU < LN =4K K RKN
/lta = TU 4= LN =4K K 4KNNBbW4.K .b
/lta G4?KU 4L LN =4K K 4JJNBbW4.JJ.b
T/A!/ 4. Tipos de 3isFette con su con$guracin fOsica y
capacidades.
$%,%0% 6ENERALI8ACION DEL USO DE DIRECCIONAMIENTO DE
MEMORIA SE6: OFFSET
3ada la direccin fOsica +++I= para notarla en la forma SE6:
OFFSET puede hacerse de muchas maneras, veamos algunos
casos
46 eparamos +++N y I= tendrOa entonces FFF4: 4421 !/
+,-./ CUE >(.,
K6 FFA4 y 121 tendrOamos FFA4: 4121%
G6 FFA$ y === tendrOamos FFA$: 4111%
e pueden generar todas las direcciones E8: ,++ET que se
quieran a partir de una direccin real o fOsica. Esto es lo que hace el
computador.
7ara probar sO realmente estas direcciones E8: ,++ET representa
la direccin fOsica dada se hace la operacin inversa que consiste
en:
46 multiplicar E8 por 4I 5agregar un cero que equivale hacer
corrimiento a i)quierda6
K6 uma E8@,++ET y debe ser igual a la 3(-E00(,* -E/! ,
+((0/ 3/3/ 5en el caso +++I=6.
>eamos las pruebas para el <imo caso ++/4N @ N=== W +++I=.
' . E ST RUCT URAS DE DAT OS ( E . D) O ' . E ST RUCT URAS DE DAT OS ( E . D) O
E ST RUCT URAS DE L A I NF ORMACI *N E ST RUCT URAS DE L A I NF ORMACI *N
( E . I ) . UNA VI SI ON ORI E NTADA A ( E . I ) . UNA VI SI ON ORI E NTADA A
OBJ E T OS. OBJ E T OS.
Una Estructura de datos 5E:36 es un tipo o coleccin de tipos de
datos sobre los cuales se pueden de$nir ciertas ,7E-/0(,*E E
+U*0(,*E 3E /00E,.
e puede a$rmar que las estructuras de datos son los medios a
trav2s de los cuales se guardan datos e informacin en la memoria
principal del computador y en los medios de almacenamiento.
!as estructuras de datos se clasi$can desde dos puntos de vista:
por su naturale)a y por su de$nicin.
#% $% #% $% CLASI FI CACI ON DE LAS ESTRUCTURAS DE CLASI FI CACI ON DE LAS ESTRUCTURAS DE
DATOS E% D% ! &OR SU NATURALE8A DATOS E% D% ! &OR SU NATURALE8A
7or su naturale)a las estructuras de datos se clasi$can como
primitivas y no primitivas.
# % $ % $ # % $ % $ ESTRUCTURAS DE DATOS &RI MI TI >AS% ESTRUCTURAS DE DATOS &RI MI TI >AS%
!as estructuras de datos primitivas son manipuladas directamente
por las instrucciones del programa almacenado con solo usar su
nombre o identi$cador, estas son !/ >/-(/A!E (.7!E de$nidas
como: E*TE-, 5integer6, -E/!E 5punto $jo, punto Sotante6,
0/-X0TE- 5char6, 7U*TE-, 5linF o apuntadores6.
LOS A&UNTADORES: o punteros 5linF6 son variable cuyo valor
indica la locali)acin en memoria de otra variable es decir
almancenan direcciones de memoria.
# % $ % # % # % $ % # % ESTRUCTURAS DE DATOS NO &RI MI TI >AS% ESTRUCTURAS DE DATOS NO &RI MI TI >AS%
on aquellas que hacen referencia a m's de un valor y cuya
manipulacin, uso o /00E, requiere de la de$nicin de
+U*0(,*E 3E /00E, adicionales para poder procesar elementos
individuales de datos. Estos son arreglos 5vectores, matrices,
arreglos tridimensionales, arreglos nMdimensionales6, numeros
complejos, cadena de caracteres 5string6, registros, pilas, colas,
listas, arboles, grafos.
#% $% ,% LAS FUNCI ONES DE ACCESO% #% $% ,% LAS FUNCI ONES DE ACCESO%
on herramientas o formulas matem'ticas que se construyen para
poder accesar en memoria o en almacenamiento secundario un
elemento particular en una estructura de datos no primitiva.
!os lenguajes de alto nivel 5java, 0, 0@@,0Y.797 etc.6 traen ya
implementadas o de$nidas estas funciones para estructuras como
arreglos, string y registros 5acceso secuencial, indexados, relativo6,
se dice que su ejecucin es transparente al usuario, al de$nir la
estructuar de datos se de$nen las funciones de acceso, esto
permite que al hacer acceso a los datos de la estructura el
computador ejecuta internamente la funcion sin ser vista por quien
la utili)a.
7ara estructuras de datos como pilas, colas, listas, arboles las
funciones de acceso deben construirse 5en la mayoria de los
lenguajes6.
!as funciones de acceso tambi2n se les llaman funciones de
3(-E00(,*/.(E*T,.
#% $% 0% O&ERACI ONES% #% $% 0% O&ERACI ONES%
!as estructuras de datos se procesan y manipulan internamente en
el computador a trav2s de ,7E-/0(,*E.
0ada estructura de datos y sus componentes pertenecen a un tipo
de datos especO$co, dependiendo de la estructura y del tipo de
dato al cual pertenece se de$nen sobre ella diferentes operaciones.
Ejemplos de estructuras de datos y de operaciones de$nidas
sobre ellas.
>/-(/A!E *U.E-(0/: suma, resta, multiplicacin, divisin
5,7E-/0(,*E /-(T.ET(0/6, leer, escribir etc.
>/-(/A!E 0/-X0TE-: ,rdenar, concatenar, buscar su cdigo
/0((, leer, escribir etc., copia.
>/-(/A!E 0/3E*/ , T-(*8: copiar, buscar ocurrencia de un
car'cter o string, longitud, concatenar etc.
/--E8!, *U.E-(0,: operaciones aritm2ticas, ordenamiento,
b&squeda, leer, escribir etc.
/--E8!, 0/-X0TE-: ordenamiento, b&squeda, leer, escribir
etc.
-E8(T-,: !eer, escribir, ordenar, buscar, consultar, crear,
sobrescribir etc.
0abe anotar que se puede de$nir sobre cualquier estructura de
datos las operaciones que se necesiten y que sean consistentes
con el tipo de datos al que pertenece.
#% $% 1 TI &O A3STRACTO DE DATOS T% A% D!% #% $% 1 TI &O A3STRACTO DE DATOS T% A% D!%
Un T/3 es una estructura de datos sobre la cual se le ha de$nido
un conjunto de operaciones. 7or ejemplo, el T/3 >ector bajo las
operaciones orden5,6 y suma5@6 que se puede denotar de la
siguiente forma :
D A5+5 OE
3onde / en un vector /5i6 iWliZls li: limite inferior y ls: limite
superior.
!as operaciones , y @ se le deben de$nir ciertas reglas por
ejemplo:
,rden 5,6 debe ser ordenamiento /scendente 5menor a mayor6 y
uma 5@6 solo es v'lida para sumar vectores que tengan igual
n&mero de elementos, n&mericos y del mismo tipo.
#% #% CLASI FI CACI ON DE LAS ESTRUCTURAS DE #% #% CLASI FI CACI ON DE LAS ESTRUCTURAS DE
DATOS E% D% ! &OR SU DEFI NI CI ON% DATOS E% D% ! &OR SU DEFI NI CI ON%
Teniendo en cuenta la forma como se de$nen, es decir, la forma
como estas se pueden manipular en memoria las estructuras de
datos se clasi$can en est'ticas y din[micas.
#% #% $ ESTRUCTURAS DE DATOS ESTATI CAS% #% #% $ ESTRUCTURAS DE DATOS ESTATI CAS%
on aquellas que al tiempo de ejecucin de un proceso se les
de$ne o asigna cierta cantidad de almacenamiento o espacio de
memoria que no puede ser aumentada ni disminuida, durante la
ejecucin del proceso. Es decir se crean al inicio de ejecucin del
proceso y permanece hasta el $nal ocupando el espacio de
memoria asignado. 7or ejemplo: >/-(/A!E (.7!E, /--E8!,,
-E8(T-,.
#% #% #% ESTRUCTURAS DE DATOS DI NAMI CAS% #% #% #% ESTRUCTURAS DE DATOS DI NAMI CAS%
on aquellas que son 0-E/3/ y qui)'s 3ET-U(3/ durante la
ejecucin de un proceso, esto permite que al trabajar con ellas se
les pueda asignar almacenamiento , memoria a medida que se
van creando y al mismo tiempo liberar memoria al tiempo que se
van destruyendo. 7or ejemplo: !(T/ E*!/P/3/, /-A,!E,
8-/+, y en general ,bjetos con almacenamiento din'mico.
En los siguientes apartados se trabajar' con el an'lisis y de$nicin
de:
!as funciones de acceso para estructuras de datos est'ticas
5arreglos6 y dinamicas 5listas, 'rboles y grafos6.
3e$nir operaciones para las Estructuras de datos din'micas, su
uso y aplicaciones
#% , #% , ANALI SI S DE LAS ESTRUCTURAS DE DATOS ANALI SI S DE LAS ESTRUCTURAS DE DATOS
El an'lisis de las estructuras de datos se reali)ar' considerando
tres elementos b'sicos:
NI >EL A3STRACTO O LO6I CO NI >EL A3STRACTO O LO6I CO: 3ibujaremos la forma
como se organi)an los datos de la estructura y especi$caremos
operaciones y funciones de acceso.
NI >EL DE I M&LEMENTACI ON NI >EL DE I M&LEMENTACI ON: Examinaremos la forma de
representacin de las Estructuras de datos en memoria y como
implementar las funciones de acceso, una visn algorOtmica.
Este *(>E! aplicado a estructuras de datos din'micas muestra la
forma como se gestiona la memoria y permite visuali)ar en
forma m's concreta como usarla e$cientemente a trav2s de
programacin avan)a, aquO desempeHan un papel inportante los
conceptos b'sicos de memoria tratados en el capitulo 4 de este
texto.
NI >EL DE A&LI CACI N NI >EL DE A&LI CACI N: 3nde y cmo se usan.
#% ,% $ #% ,% $ ANALI SI S DE ESTRUCTURAS ESTATI CAS% ANALI SI S DE ESTRUCTURAS ESTATI CAS%
#%,%$%$ ARRE6LOS UNIDIMENSIONALES
0onsiderando los tres elementos b'sicos del an'lisis de las
estructuras de datos, los arreglos Unidimensionales o vectores se
manipulan bajos las caracterOsticas que se describen a
continuacin.
NI>EL A3STRACTO%
Un arreglo unidimensional o vector es un conjunto $nito de datos
del mismo tipo que se denota como /\(] (Wli...ls, en donde /
identi$ca el conjunto de datos, ( se le denomina subOndice e indica
la posicin de cada dato dentro del conjunto desde la posicin li o
limite inical hasta la posicin ls o limite $nal. !a $gura R muestra
un ejemplo de un vector /5(6 con ( que tomar' los valores de
N,4,K,G,J y por tanto liWN y lsWJ. se dice adem[s que la dimensin
del vector es =, es decir, la dimensin 53im6 de un vector es el
n&mero de elementos.
.atem'ticamente la dimensin de un vector se puede calcular por
la expresin: 3imWlsMli@4 usando el vector de la $gura R 3imWJM
N@4W=
+igura R. -epresentacin de un arreglo unidimensional o vector.
/
MG = N G L
ls
/5N6 /546 /5K6 /5G6 /5J6
li
/5N6 W MG /546W = /5K6 W N /5G6 W G /5J6WL.
El acceso en los lenguajes de alto nivel se hace usando la variable
que identi$ca el arreglo 5/6 y un subOndice 5(6 que varia seg&n la
cantidad de elementos de / desde li a ls. En 0 o 0@@ el valor de
liWN.
!a +uncin de acceso se construye con los elementos /\(6 (Wli ...
ls y con las instrucciones algoritmicas apropiadas dependiendo del
problema a resolver.
Ni)el +e Im(lementaci/n
!os elementos de un vector se almacenan, al tiempo de ejecucin,
en forma secuencial en memoria. u tamaHo se de$ne al inicio de
su utili)acin y no cambia durante la ejecucin del proceso que lo
usa.
!a forma como se almacena un vector se muestra en la +igura L
con un ejemplo de un vector / de dimensin =. 0on /\i] i F li %%%
ls%
Fig"ra G% +orma de almacenar un vector, /5i6, en memoria.
DI&ECCION BASE
A5li6
A5li 7 )6
A5li 7 *6
A5li 7 46
A5li 7 -6
/!nci%n de acceso a c!al8!ier elemento A[i]
i= li ...ls
dir =F(A[i]) = base+ (i - li)*k
k es el nmero de bytes !e o"!#a !n
elemento de A en alma"enamiento
base
base+ 1*k
base+2*k
base+3* k
base+$* k
E:E-0(0(,. 9acer un programa 0@@ que dado un vector a\i]iWli con
n elementos 5veri$car que n^N6, sumar todos sus elementos e
imprimirlo usando la funcin de acceso, imprimir la suma.
#% ,% $% # #% ,% $% # ARRE6LOS 3I DI MENSI ONALES MATRI CES! ARRE6LOS 3I DI MENSI ONALES MATRI CES!
7ara el estudio de los arreglos bidimensionales o matrices se har'n
mismas consideraciones de an'lisis hecha para los arreglos
unidimensionales.
NI>EL A3STRACTO
AHI5IJ IFli- %%ls- IFlic%lsc !/ ./T-(P es una E.3 0,* U*
*U.E-, +(*(T, 3E 3/T,. En los lenguajes de alto nivel el acceso
se hace usando la variable que identi$ca la matri) 5/6 y dos
subOndices 5( y :6 que varOan seg&n la cantidad de elementos de /, I
desde li- a ls- y la I desde lic a lsc%
F"nci/n +e acceso a c"alB"ier elemento +e la matris es :
AHiJH*J iFli-%%% ls- : *Flic%%ls-
3onde:
!if: !imite inferior de $la.
!sf: !imite superior de $la.
!ic: !imite inferior de 0olumna.
!sc: !imite superior de columna.
Ejercicio : hacer un algoritmo que lea y sume los elementos de
cada $la de una matri) a\i]\j] iWlif..lsc y jWlic...lsc siendo a una
matri) cuadrada de nKn escriba el vector suma.
NI>EL DE IM&LEMENTACIN
!os elementos de una matri), al igual que los vectores, al tiempo
de ejecucin se almacenan en forma secuencial en memoria. u
tamaHo se de$ne al inicio de su utili)acin y no cambia durante la
ejecucin del proceso que lo usa.
!a forma como se almacena una matri) se muestra en la +igura <.
donde se muestra el almacenamiento de una matri) / de
dimensin GxJ y almacenada por $las. 0on /\i]\j] i F li- %%% ls-5
*F lic%%%lsc
Fig"ra @% +orma de almacenar una matri), /5i6\j], en memoria.
DI&ECCION BASE (base)
A5li$65lic6
A5li$65lic7)6
A5li$ 65lic7*6
7 *6
A5li$65lic 746
A5li$7)6 5lic6
/!nci%n de acceso a c!al8!ier elemento A[i][%]
i= li& ...ls" " %=li"...ls"
dir =F(A[i]) = base+ (i - li&)*s+ (%-li")*k
en donde '
k es el nmero de bytes !e o"!#a !n
elemento de A en alma"enamiento
y
s=(ls"-li"+1)*k
base
base+ 0*s + 1*k
base+0* s + 2*k
base+0*s + 3*k
base+1*s
A5li$7)6 5lic 7)6
A5li$7)6 5lic 7*6
A5li$7)6 5lic 746
A5li$7*6 5lic6
A5li$7*6 5lic 7)6
A5li$7*6 5lic 7*6
A5li$7*6 5lic 746
base+1*s +1*k
base+1*s + 2*k
base+1*s + 3*k
base+2*s
base+2*s +1*k
base+2*s +2*k
base+2*s +3*k
EIERCICIOS.
46 9acer un programa 0@@ que dada una matri) a\i]\j] i W lif y
jWlic con nxm elementos 5veri$car que n^N y m^N6, construir
un vector suma\i]. (mprimir a\i]\j] y suma\i] usando la funcin de
acceso. 0ada elemento de suma\i] contiene la suma de los
elementos de la $la i de la matri) a.
K6 3ada una matri) cuadrada a de n_n, deducir la funcin de
acceso 5funcin de direccionamiento6 para los elementos de la
diagonal principal. 9acer un programa en 0@@ usando la
funcin de acceso para que leOda a una matri) de nxn, imprimir
la diagonal principal, calcular e imprimir su suma.
G6 3ada una matri) cuadrada a de nxn, deducir la funcin de
acceso 5direccionamiento6 para los elementos de la diagonal
secundaria. 9acer un programa en 0@@ usando la funcin de
acceso para que leOda a una matri) de nxn, imprimir la diagonal
secundaria, calcular e imprimir su suma.
J6 3ada una matri) cuadrada a de nxn, deducir la funcin de
acceso 5direccionamiento6 para los elementos de la matri)
triangular inferior de a. 9acer un programa en 0@@ usando la
funcin de acceso para que leOda a una matri) de nxn, se
imprima la matri) triangular inferior.
=6 3ada una matri) cuadrada a de nxn, deducir la funcin de
acceso 5direccionamiento6 para los elementos de la matri)
triangular superior de a. 9acer un programa en 0@@ usando la
funcin de acceso para que leOda a una matri) de nxn, se
imprima la matri) triangular superior.
I6 3educir la funcin de acceso para una matri) tridimensional.
9acer un programa 0@@ que lea una matri) tridimensional y
usando la funcin de acceso se imprima la matri) dada.
#% ,% $% ,% #% ,% $% ,% ESTRUCTURAS < UNIONES% %
Se presenta en este apartado el est!dio9 de$inici%n " !so de las estr!ct!ras " !nioes
como medios 8!e se tienen para de$inir n!evos tipos de datos Los llamdos tipos de
datos de$inidos por el !s!ario " 8!e son de #ran importancia para el est!dio de las
estr!ct!ras de datos " para el desarrollo de sistemas de in$ormaci%n a c!al8!ier nivel
#%,%$%,%$% ESTRUCTURAS
!as estr"ct"ras permiten al programador agregar componentes o
>/-(/A!E de diferentes tipos con un solo nombre o en un registro
simple.
SINTALIS:
str"ct \`nombre del tipo de la estructura^] a
\`tipo^ `nombrebvariable\nombrebvariable, ...]^]%
\`tipo^ `nombrebvariable\nombreb variable, ...]^]%
...
c \`variablebestructura^]%
ESTRUCTURA es un grupo de variables en un -E8(T-, (.7!E.
Una estructura, une, un grupo de variables en un registro simple.
`nombre del tipo de la estructura^ es opcional y de$ne un nuevo tipo de
datos.
`variablebestructura^ de$ne el lugar de almacenamiento y de datos.
/unque `nombre del tipo de estructura^ y `variablebestructura^
son opcionales, una de ellas debe aparecer.
!os elementos del registro se de$nen por un `tipo^, seguido de 4
o m's `nombrebvariable^ 5separados por comas6.
3iferentes tipos de variables debe separarse por punto y coma5%6.
E*em(lo
struct mibestructura a
char nombre\LN], tel2fono\4N]%
int edad, 7eso%
c mibhermano%
Esta estructura declara un registro que contiene dos strings
5nombre y tel2fono6 y dos enteros 5edad y peso6.
7ara accesar un elemento en una estructura, se debe usar la
operacin selector de registro 5%! %
7or ejemplo para accesar el campo nombre de la estructura y
asignarle d:U!(/*U. e hace de la siguiente manera.
.ibhermano%nombreWe:U!(/*e% operacin selector.
7ara declarar variables adicionales del mismo tipo, se usa la
palabra reservada str"ct seguido por ` nombre del tipo de
estructura ^, seguido por el nombre de la variable.
&or E*em(lo5
str"ct mibestructura misbhermanos\4NN]%
#%,%$%,%#% UNION
Una UNION es similar a una estructura, excepto que permite
de$nir variables que comparte el mismo espacio de
almacenamiento.
SintaKis
unin \`unin type name^] a
`type^ `variable names^%
...
c \`unin variables^]%
7or Ejemplo,
unin intborblong a
int i%
long l%
c abnumber%
El compilador locali)a su$ciente almacenamiento en aMn"mber
para acomodar el elemento mas largo 5en bytes6 de$nido en la
unin.
/ diferencia de una str"ct, las variables abnumber.i y abnumber.l
ocupan la misma direccin de memoria. /sO que solo se escribe un
elemento y se sobrescriben los dem's.
!os elementos de una "ni/n s2 accesan de la misma manera que
en una str"ct.
!as U*(,*E /*,*(./ que declaran simplemente un conjunto de
elementos que comparten la misma direccin de memoria, no
tienen etiquetas 5"ni/n t:(e nameEJ ni HD"ni/n )ariablesEJ! y
se puede acceder directamente a los elementos por su nombre.
E*em(lo
unin a
int i %
Soat f %
c %
i y f comparten la misma posicin de memoria . / los elementos de
esta unin se puede acceder directamente ./sO que las siguientes
instrucciones son v'lidas.
i W 4K% ?? asigna 4K a i
f W K.=% ?? asigna K.= a f
7ara acceder a los elementos de una unin annima no son
necesarios los E!E0T,-E.
!as uniones annimas son interesantes cuando se de$ne una unin
al interior de una str"ct%
E*em(lo:
struct registro a
unin a
chau nombre \G=] %
int id %
Soat salario %
char_ direccin %
c %
char_ tel2fono %
c %
registro em(lea+oN
7ara acceder a un campo dentro de esta estructura, por ejemplo
nombre, se utili)a la notacin
em(lea+o%nombreN
#%%,%$%,%,% O&ERADORES DE SELECCIN &ARA ACCESO A UNA
ESTRUCTURA O UNION% 7E
% elector de miembro directo.
7E selector de miembro indirecto, o pointer, a una estructura.
!os operadores de seleccin% y 7E sirven para accesar miembros
str"ct y "ni/n.
upongamos que el objeto s es de tipo str"ct tipo S y s(tr es un
pointer a . Entonces, si m es un miembro5elemento6 de tipo M
declarado en S, las expresiones:
s%m
s(tr7Em
son de tipo M, y ambas representan un miembro m del objeto s.
!a expresin: s(tr7Em
Es una conversin conveniente de Os(tr!%m.
#%,%$%,%0 SELECTOR DE MIEM3RO DIRECTO %!
(*T/;(: (ostPK7eK(ression % i+entiPer
En donde (ostPK eK(ression debe ser un tipo de "ni/n o
estr"ct"ra%
El i+entiPer debe ser el nombre de un miembro de una
estr"ct"ra o "ni/n.
#%,%$%,%1 SELECTOR DE MIEM3RO INDIECTO 7E!
(*T/;(: (ostPK7eK(ression 7E i+entiPer
El (ostPK eK(ression debe ser de ti(o (ointer a una
estr"ct"ra o (ointer a una "ni/n.
El i+entiPer debe ser el nombre de un miembro o elemento de
una estr"ct"ra o "ni/n.
!a expresin designa a un miembro de una estructura o unin. El
valor de la expresin es el valor del miembro o elemento
seleccionado.
&or e*em(lo,
struct mystruct a
int i
char str\K4]
double d
c s, _sptrWfs
...
s.i W G ?? asigna G a al miembro i de mystruct s
sptrM^d W 4.KG ?? asigna 4.KG al miembro + de mystruct s
EIERCICIOS
4. Un n&mero de tel2fono tal como 5<KI6KKM=N=N consta de G
partes: cdigo de provincia <KI, cdigo del 'rea urbana KK y el
n&mero propiamente dicho =N=N. Escribir un programa c@@ que
utilice una estructura que almacene estas tres partes del n&mero
independientemente 5llame a la estructura telQ-ono6. 0rear dos
variables estructura tel2fono% iniciali)e una de ellas con un
n&mero de tel2fono e introdu)ca por teclado un n&mero en la
otra variable% >eriPB"e si son ig"ales ambos nRmeros5
)is"aliSan+o el res"lta+o corres(on+iente%
K. 3e$nir una estructura denominada ("nto que represente las
coordenadas K y : de un punto en el plano. (ntrodu)ca por
teclado dos puntos y obtenga un tercer punto S suma de los dos
anteriores, tal que sus coordenadas son las suma de las
coordenadas de los dos anteriores.
#% 0% #% 0% ARCAI >OS DE DATOS5 O&ERACI ONES < AL6ORI TMOS ARCAI >OS DE DATOS5 O&ERACI ONES < AL6ORI TMOS
!os sistemas de informacin se fundamentan en el
7-,0E/.(E*T, 3E 3/T, 57.3.6, con el $n de obtener
(*+,-./0(,* o -EU!T/3, &tiles para la toma de decisiones.
-ecordar que 3/T, es un hecho, caracterOstica de una E*T(3/3
5objeto, situacin, transaccin, animal o 7ersona6 y que 7-,0E/-
3/T, no es m's que ejecutar sobre ellos una o m's operaciones
que conducen a entregar -EU!T/3, UT(!E o (*+,-./0(,* al
cliente 57ersona o grupo de personas que usan la (nformacin6.
9ay una gran variedad de procesos que se pueden ejecutar sobre
los datos 5Ej. clasi$car, calcular, sumar, leer, escribir, almacenar,
etc.6.
7ara ejecutar cualquiera de los procesos u operaciones descritas los
3/T, deben ser organi)ados de forma que puedan usarse a
trav2s del computador es decir deben organi)arse en 8-U7, que
hagan posible de$nir procesos con claridad y con signi$cado.
!os procesos requieren entonces que los 3/T, sean guardados o
grabados en alg&n medio de almacenamiento y organi)ados bajo
alg&n criterio en 8-U7, para esto se usan los /-09(>, 5+(!E6.
#% 0% $ #% 0% $ ARCAI >O FI LE! % ARCAI >O FI LE! %
Un /rchivo se de$ne como una coleccin ,-8/*(P/3/ de 3/T,
/!./0E*/3, en algun medio de /!./0E*/.(E*T,
E0U*3/-(, 5disFette, 3isco 3U-,, 0(*T/, 03M-,. etc.6 que
dan solucin alguna necesidad de informacin de una organi)acin.
#% 0% $% $ #% 0% $% $ CONTENI DO I ERAR=UI CO DE UN ARCAI >O CONTENI DO I ERAR=UI CO DE UN ARCAI >O
!os 3/T, /!./0E*/3, en un archivo se /8-U7/* en
-E8(T-, 5-E0,-36 que permiten y facilitan una forma lgica y
f'cil para procesar los 3/T,.
7ara facilitar y clari$car los conceptos podemos partir de las
siguientes de$niciones.
#% 0% $% # #% 0% $% # I TEM5 CAM&O O COLUMNA DE DATOS FI ELD! I TEM5 CAM&O O COLUMNA DE DATOS FI ELD!
Un (TE., 0/.7, o 0,!U.*/ 3E 3/T, es una caracterOstica que
identi$ca U*/ E*T(3/3 que es de inter2s para cualquier proceso u
operacin que se quiera hacer. Un (TE. es el nivel m's bajo o
pequeHo de 3/T, en un /-09(>,.
7or Ejemplo: 7ara llevar el registro o /-09(>, de los estudiantes de
la materia de estructura de datos ((. podrOamos tener como (TE. o
0/.7, de datos de inter2s los siguientes.
0,3(8, 0E3U!/ *,.A-E TE!E+,*,
+E09/b*/0(.(E*T,
3(/ .E /g,
Fig"ra $4% Estructura de un -E8(T-, de datos.
7odemos decir del la +igura 4N que para !/ E*T(3/3 ETU3(/*TE,
se tendr'n en cuenta los campos de datos 0digo, 02dula,
*ombre, Tel2fono, fecha de nacimiento como fundamentales para
los 7-,0E, que se de$nir'n.
e puede observar en la +igura 4N que hay dos tipos de 0/.7,:
#% 0% $% , #% 0% $% , CAM&OS SI M&LES O ELEMENTALES CAM&OS SI M&LES O ELEMENTALES
!os campos simples o elementales describen una caracterOstica de
la entidad por ejemplo: 0,3(8,.
#% 0% $% 0 #% 0% $% 0 CAM&OS A6RU&ADOS CAM&OS A6RU&ADOS
Est'n formados por K o m's campos simples o elementales por
ejemplo: +E09/b*/0(.(E*T,.
#% 0% $% 1 #% 0% $% 1 RE6I STRO RECORD! RE6I STRO RECORD!
!os 0ampos o (tem de datos son la base de los registros. Un
-E8(T-, es entonces una coleccin de (tem o campos de datos
que describen una entidad, que son usados a trav2s de un proceso.
En otras 7alabras U* -E8(T-, es una coleccin de campos de
datos agrupados en una unidad simple y que describen en forma
concreta un E*T(3/3 dentro de un procesamiento de datos.
CODI6
O
CEDULA NOM3RE TELEFONO
FECAAMNACIMIENTO
3(/ .E /g,
4J K 7edro JK4KNG= 4N = 4<RL
4= K 7ablo JKGKN=N = I 4<RN
J G 0laudia JK4GJ=I L L 4<R=
K J= /driano JK4KGJ= KN 44 4<RN
= KJ :uli'n JKGRN<L G G 4<RG
< I .anuel JKGJ=IR < L 4<R4
R 4= -icardo JKKGJ=I L 4 4<RL
4L KG !eon2s JK4GJ=I K= < 4<LN
KN =I 0arlos JKN=IRL I 4N 4<R<
Fig"ra $$% Con*"nto +e registros +e Est"+iantes
!a $gura 44 muestra un conjunto de registros de la entidad
estudiante.
0ada registro se compone de los Otem de datos 50,3(8,, *,.A-E,
TE!E+,*,, +E09/b*/0(.(E*T, 53(/?.E?/g,66.
e acostumbra a describir cada registro como sigue.
RE6ISTROMESTUDIANTE
TTEM TAMAUO 3<TES! TI&O
0,3(8, J +!,/T
0E3U!/ J +!,/T
*,.A-E G= 09/-
TE!E+,*, J +!,/T
FECAAMNACIMIENTO
3(/ K (*T
.E K (*T
/g, K (*T
!a +(8U-/ 44 muestra una coleccin de (*T/*0(/ del registro
-E8(T-,bETU3(/*TE, ese conjunto nos forma el /-09(>, de
estudiantes.
8enerali)ando, se dice entonces que U* /-09(>, formado de
-E8(T-,, -E8(T-, formado 3E 0/.7, 5(.7!E E?,
/8-U7/3,6 y los 0/.7, formados de Aytes.
!a jerarquOa de datos en un archivo se resume como se muestra en
el ejemplo siguiente:
ESTUDIANTE
RE6ISTROMESTUDIANTE
0,3(8, J +!,/T 5!lave 46
0E3U!/ J +!,/T 5!lave K6
*,.A-E G= 09/- 5llave K6.
TE!E+,*, J +!,/T
FECAAMNACIMIENTO
3(/ K (*T
.E K (*T
/g, K (*T
=G
!a descripcin anterior se debe escribir en el inicio de los
algoritmos que manejan /-09(>,.
#% 0% $% 2 #% 0% $% 2 LLA>ES ;E<! LLA>ES ;E<!
En un archivo de datos es conveniente que cada registro tenga
una identi$cacin, esto se logra usando para ello uno o m's (TE.
3E 3/T, del registro. / este (TE. o conjunto de (TE. se le da el
nombre de !!/>E.
9ay dos tipos de !!/>E: 7rimaria y secundarias.
#% 0% $% 2% $ #% 0% $% 2% $ LLA>E &RI MARI A &RI MAR< ;E<! LLA>E &RI MARI A &RI MAR< ;E<!
!a llave primaria debe ser un 0/.7, o conjunto de campos, que
sea &nico es decir que su valor no se repita en dos o m's registros.
En el registrobestudiante la llave primaria es 0,3(8,, que su valor
es &nico por cada registro, es decir sirve como identi$cacin de
cada registro. Es obligatorio que se de$na en cada archivo una
llave primaria.
#% 0% $% 2% # #% 0% $% 2% # LLA>ES SECUNDARI AS SECONDAR< ;E<! LLA>ES SECUNDARI AS SECONDAR< ;E<!
!as llaves secundarias son campos o conjunto de campo que se
de$nen para a trav2s de ellos reali)ar alg&n proceso con los
registros del archivo por ejemplo: ordenar por c2dula, usar llave K
la c2dula% ordenar alfab2ticamente, usar llave K el nombre.
#% 0% $% ? #% 0% $% ? CLASI FI CACI ON DE LOS ARCAI >OS CLASI FI CACI ON DE LOS ARCAI >OS
!os archivos se clasi$can bajos tres aspectos fundamentales: 7or su
contenido, los archivos de datos por su uso y su organi)acin o
forma de acceso.
#% 0% 0% G% $ #% 0% 0% G% $ ARCAI >OS &OR SU CONTENI DO ARCAI >OS &OR SU CONTENI DO
7or su contenido los archivos pueden ser:
EIECUTA3LES o COMANDOS: ej. 5_.com, _.exe6.
ARCAI>OS TELTO: u contenido son caracteres y pueden ser
observables por medio de un editor o procesador.
ARCAI>OS 3INARIOS: u contenido est' en cdigo de
maquina y no puede ser observable, aquO caen los ejecutables,
programas objeto, gr'$cos, videos, m&sica, drivers de
dispositivos etc.
CODI6O FUENTE: on realmente archivos texto que contienen
un conjunto de instrucciones de alg&n programa hecho en un
lenguaje determinado.
ARCAI>OS DE DATOS: +ormados por registros y Otem de datos,
puede ser archivos texto o binarios y ser manipulados a trav2s
de programas en un lenguaje 57ascal, 0@@, 0obol etc.6,
determinado o por herramientas de propsito general 5"ord,
7o#er 7oint, Excel, etc.6.
RE&OSITORIOS DE 3ASE DE DATOS: contienen las tablas y
dem's elementos que conforman una base de datos, son
llamados tambi2n bodegas de dato.
#% 0% 0% G% #% #% 0% 0% G% #% TI &OS DE ARCAI >O SE6VN SU USO TI &OS DE ARCAI >O SE6VN SU USO
e hace referencia aquO a los archivos de datos.
/rchivos maestros. 5,n !ine6.
/rchivos de transacciones.
/rchivos de novedades.
9istricos.
AacFup o de respaldo.
Temporales.
#% 0% 0% G% ,% #% 0% 0% G% ,% TI &OS DE ARCAI >OS &OR SU OR6ANI 8ACI N < TI &OS DE ARCAI >OS &OR SU OR6ANI 8ACI N <
ALMACENAMI ENTO ALMACENAMI ENTO
ecuenciales.
ecuenciales indexados.
3e acceso directo o de acceso aleatorio.
#% 0% 0% @% O&ERACI ONES < AL6ORI TMOS CON ARCAI >OS #% 0% 0% @% O&ERACI ONES < AL6ORI TMOS CON ARCAI >OS
,peraciones: abrir, cerrar, leer y?o consultar, escribir,
sobrescribir.
/lgoritmos: 0rear, actuali)ar, consultar.
#% 0% 0% $4% FUNCI ONES &ARA EL MANEI O DE ARCAI >O < #% 0% 0% $4% FUNCI ONES &ARA EL MANEI O DE ARCAI >O <
>ALI DACI ON DE EW S% >ALI DACI ON DE EW S%
B$+56: -etorna True sO una operacin no valida
F$il56: -etorna verdadero si ocurre un error
Cl"$r56: Aorra estado de error en caso que desee procesar de
nuevo la E ?.
Eo,56: 3evuelve verdadero si se alcan)a $n de archivo
Goo+56: -etorna verdadero si la <ima operacin de e?s funciona.
u formato en forma general es: >ariablebarchivo. +uncin.
Ej.: archivo.eof56 su valor es true si se alcan)a $n de archivo
#% 0% 0% $$% #% 0% 0% $$% FUNCI ONES &ARA ACCESO DI RECTO% FUNCI ONES &ARA ACCESO DI RECTO%
T"ll-(). -etorna la posicin actual del puntero como un valor de
despla)amiento 5en bytes6 desde el principio del archivo.
S""!-(+"&l$/$0i"1to2 io. .""+3+ir6. .ueve el puntero en un
archivo adelante y hacia atr's.
us formatos son respectivamente:
>ariablebarchivo.tellg56
>ariablebarchivo.seeFg5despla)amiento, ios: :seeFbdir6,
En donde despla)amiento es un int tal que: 3espla)amiento
negativo, mueve el cursor hacia atr's, el numero de bytes
especi$cados por despla)amiento, y 3espla)amiento positivo
mueve el curso adelante.
S""!3+ir: (ndica la posicin relativa del puntero y sus valores son:
B": 3esde el inicio del archivo
Cur: 3esde la posicin actual
E1+: 3esde el $nal del archivo.
#% 1% #% 1% I NTRODUCCI N A LA &RO6RAMACI N I NTRODUCCI N A LA &RO6RAMACI N
ORI ENTADA A O3I ETO% ORI ENTADA A O3I ETO%
En l os &l t i mos aHos l a progr amaci n or i ent ada a En l os &l t i mos aHos l a progr amaci n or i ent ada a
obj et os se ha conver t i do en una herrami ent a b'si ca obj et os se ha conver t i do en una herrami ent a b'si ca
para el desarrol l o e i mpl ement aci n de si st emas de para el desarrol l o e i mpl ement aci n de si st emas de
i nf ormaci n, aunque se puede asegurar que no es sol o i nf ormaci n, aunque se puede asegurar que no es sol o
un medi o para l a progr amaci n si no que el concept o un medi o para l a progr amaci n si no que el concept o
de dor i ent ado a obj et osU se puede ut i l i )ar en t odas l as de dor i ent ado a obj et osU se puede ut i l i )ar en t odas l as
et apas desde l a pl aneaci n y an'l i si s hast a l a et apas desde l a pl aneaci n y an'l i si s hast a l a
i mpl ement aci n y puest a en f unci onami ent o del i mpl ement aci n y puest a en f unci onami ent o del
si st ema dado que exi st en una ser i en de medi os o si st ema dado que exi st en una ser i en de medi os o
ut i l i dades engl obadas en el denomi nado U.! o ut i l i dades engl obadas en el denomi nado U.! o
l enguaj e uni $ cado de model ado de si st emas que l enguaj e uni $ cado de model ado de si st emas que
permi t e document ar t odas l as act i vi dades de l os permi t e document ar t odas l as act i vi dades de l os
procesos de i ngeni er h a del soft #are. procesos de i ngeni er h a del soft #are.
7or t al mot i vo se consi der ar'n l as est ruct ur as de 7or t al mot i vo se consi der ar'n l as est ruct ur as de
dat os como obj et os, por t al es mot i vos se enunci ar ' dat os como obj et os, por t al es mot i vos se enunci ar '
l os concept os y pr i nci pi os b'si co de l a or i ent aci n a l os concept os y pr i nci pi os b'si co de l a or i ent aci n a
obj et os. obj et os.
#% 1% $% CARACTERT STI CAS DE LOS O3I ETOS% #% 1% $% CARACTERT STI CAS DE LOS O3I ETOS%
Un obj et o no es m's que una ent i dad, t angi bl e o Un obj et o no es m's que una ent i dad, t angi bl e o
i nt angi bl e, del mundo real que t i ene unas i nt angi bl e, del mundo real que t i ene unas
car act erO st i cas y un compor t ami ent o bi en de$ ni dos y car act erO st i cas y un compor t ami ent o bi en de$ ni dos y
que pude ser i dent i $ cado cl ar ament e por el ser que pude ser i dent i $ cado cl ar ament e por el ser
humano por ej empl o: Una persona, mi t el evi sor, una humano por ej empl o: Una persona, mi t el evi sor, una
f act ura de compr as et c. f act ura de compr as et c.
3esde el punt o de vi st a de l a i ngeni er O a del soft #are 3esde el punt o de vi st a de l a i ngeni er O a del soft #are
se consi der a que l os obj et os t i enen l as si gui ent es se consi der a que l os obj et os t i enen l as si gui ent es
car act erO st i cas: ( dent i dad, cl asi $ caci n, car act erO st i cas: ( dent i dad, cl asi $ caci n,
encapsul ami ent o y ocul t ami ent o de dat os, encapsul ami ent o y ocul t ami ent o de dat os,
pol i mor $ rmos y herenci a. pol i mor $ rmos y herenci a.
Fi g"ra $# Fi g"ra $#. 0aract er O st i cas de l os ,bj et os . 0aract er O st i cas de l os ,bj et os
3e l os obj et os ent onces se t i enen en cuent a dos 3e l os obj et os ent onces se t i enen en cuent a dos
concept os: !os at r i but os y su compor t ami ent o. concept os: !os at r i but os y su compor t ami ent o.
!os at r i but os son l os hechos o car act erO st i cas que !os at r i but os son l os hechos o car act erO st i cas que
i dent i $ can cada obj et o como por ej empl o para el i dent i $ can cada obj et o como por ej empl o para el
obj et o persona l os at r i but os i mpor t ant es ser O an: obj et o persona l os at r i but os i mpor t ant es ser O an:
nrobc2dul a, *ombre y Tel 2f ono y si suponemos que nrobc2dul a, *ombre y Tel 2f ono y si suponemos que
est a persona es cl i ent e de un banco ent onces su est a persona es cl i ent e de un banco ent onces su
compor t ami ent o se expresa en l as act i vi dades que compor t ami ent o se expresa en l as act i vi dades que
desarrol l a como cl i ent e est o es, por ej empl o, desarrol l a como cl i ent e est o es, por ej empl o,
consul t ar sus sal dos de cuent as y cancel ar l as cuot as consul t ar sus sal dos de cuent as y cancel ar l as cuot as
de sus compromi sos , adem's de ot r as act i vi dades de sus compromi sos , adem's de ot r as act i vi dades
como cl i ent e% l a $ gur a 4G muest r a gr '$ cament e l a como cl i ent e% l a $ gur a 4G muest r a gr '$ cament e l a
rel aci n obj et o, at r i but os y compor t ami ent o. rel aci n obj et o, at r i but os y compor t ami ent o.
()*+,-A
A.*/01.,+
Nro:c;d!la
Nonm<re
Tel;$ono
2,3(,*.A3/)-.,
Cliente()
Cons!ltar()
Pa#ar()
FI 6URA $,% FI 6URA $,% Ej empl o de un obj et o con sus at r i but os y Ej empl o de un obj et o con sus at r i but os y
compor t ami ent o compor t ami ent o
/ l os at ri but os t ambi en se l es denomi na dat os / l os at ri but os t ambi en se l es denomi na dat os
mi embro o propi edades y al compor t ami ent o, mi embro o propi edades y al compor t ami ent o,
m2t odos u oper aci ones. m2t odos u oper aci ones.
I DENTI DAD% I DENTI DAD%
!a i dent i dad !a i dent i dad expresa que aunque dos obj et os sean expresa que aunque dos obj et os sean
exact ament e i gual es en sus at r i but os son di st i nt os exact ament e i gual es en sus at r i but os son di st i nt os
ent re si . !a $ gura 4J muest r a el ej empl o de dos ent re si . !a $ gura 4J muest r a el ej empl o de dos
vehO cul os que t i enen l os mi smos at r i but os y vehO cul os que t i enen l os mi smos at r i but os y
compor t ami ent o pero que son di f erent es ent re si . compor t ami ent o pero que son di f erent es ent re si .
Fi g"ra $0% Fi g"ra $0% Ej empl o de ,bj et os. Ej empl o de ,bj et os.
7ar a asegur ar que dos obj et os con at r i but os y 7ar a asegur ar que dos obj et os con at r i but os y
compor t ami ent os i d2t i cos sean di f erent es ent re si se compor t ami ent os i d2t i cos sean di f erent es ent re si se
debe t ener por l o menos un at r i but o que i dent i $ que debe t ener por l o menos un at r i but o que i dent i $ que
unO vocament e o en f orma &ni ca cada obj et o, a est e unO vocament e o en f orma &ni ca cada obj et o, a est e
at r i but o o conj unt o de at r i but os se l e denomi na at r i but o o conj unt o de at r i but os se l e denomi na
CONTROLADOR CONTROLADOR. 7ar a el ej empl o de l a $ gur a 4G el . 7ar a el ej empl o de l a $ gur a 4G el
cont rol ador es el nrobpl aca ya que no exi st en dos cont rol ador es el nrobpl aca ya que no exi st en dos
vehO cul os con pl acas repet i das. vehO cul os con pl acas repet i das.
CLASI FI CACI N% CLASI FI CACI N%
!os obj et os que compar t en l as mi smas propi edades !os obj et os que compar t en l as mi smas propi edades
($tri 4uto) ($tri 4uto) y compor t ami ent os y compor t ami ent os (o&"r$#i o1" o (o&"r$#i o1" o
05to+o) 05to+o) se pueden agr upar en un conj unt o se pueden agr upar en un conj unt o
denomi nado 0!/E. denomi nado 0!/E.
e puede asegur ar que una 0!/E es un conj unt o de e puede asegur ar que una 0!/E es un conj unt o de
obj et os que compar t en l os mi smos dat os mi embro y obj et os que compar t en l os mi smos dat os mi embro y
m2t odos. m2t odos.
Fi g"ra $0 Fi g"ra $0. 0onj unt o de ,bj et os cl asi $ cados en G . 0onj unt o de ,bj et os cl asi $ cados en G
cl ases cl ases
En l a $ gur a 4J se muest r a un conj unt o de obj et os que En l a $ gur a 4J se muest r a un conj unt o de obj et os que
se cl asi $ can en t res cl ases: >ehO cul os, Est udi ant es y se cl asi $ can en t res cl ases: >ehO cul os, Est udi ant es y
9err ami ent as. !os obj et os en cada cl ase de compar t i r 9err ami ent as. !os obj et os en cada cl ase de compar t i r
l os mi smos dat os mi embro y m2t odos. / l os ,bj et os en l os mi smos dat os mi embro y m2t odos. / l os ,bj et os en
cada cl ase t ambi en se l es denomi na ( *T/*0( / por cada cl ase t ambi en se l es denomi na ( *T/*0( / por
ej empl o: : U!( /* es una i nst anci a u obj et o de l a cl ase ej empl o: : U!( /* es una i nst anci a u obj et o de l a cl ase
est udi ant es. est udi ant es.
ENCA&SULAMI ENTO O OCULTAMI ENTO DE DATOS ENCA&SULAMI ENTO O OCULTAMI ENTO DE DATOS
!os obj et os en el mundo real y dent ro de un si st ema !os obj et os en el mundo real y dent ro de un si st ema
de i nf ormaci n necesar i ament e t i enen que i nt er act uar de i nf ormaci n necesar i ament e t i enen que i nt er act uar
con ot ros obj et os, a consecuenci a de est os se deri va con ot ros obj et os, a consecuenci a de est os se deri va
el concept o de encapsul ami ent o. el concept o de encapsul ami ent o.
JUAN
SOFIA
JULIAN
ROBERTO
ESTUDIANTES ESTUDIANTES
VEHICULOS VEHICULOS
HERRAMIENTAS HERRAMIENTAS
C
L
A
S
E
C
L
A
S
E
S
S
El encapsul ami ent o o ocul t ami ent o de dat os es una de El encapsul ami ent o o ocul t ami ent o de dat os es una de
l as propi edades m's i mpor t ant es en l a or i ent aci n a l as propi edades m's i mpor t ant es en l a or i ent aci n a
obj et os y hace ref erenci a a que l os obj et os de un obj et os y hace ref erenci a a que l os obj et os de un
cl ase puede t ener de$ ni da dos t i pos de i nf ormaci n. cl ase puede t ener de$ ni da dos t i pos de i nf ormaci n.
I NFORMACI ON I NTERNA I NFORMACI ON I NTERNA: *ecesari a para que l os : *ecesari a para que l os
obj et os de una cl ase operen y que es i nnecesar i a obj et os de una cl ase operen y que es i nnecesar i a
para l os obj et os de l a dem's cl ases del si st ema. para l os obj et os de l a dem's cl ases del si st ema.
5 at r i but os y m2t odos 5 at r i but os y m2t odos &RI >ADOS o &ROTE6I DOS &RI >ADOS o &ROTE6I DOS6 6
I NFORMACI ON I NFORMACI ON EXTERNA. EXTERNA. !a que necesi t a l os !a que necesi t a l os
obj et os de l as dem's cl ases que i nt eract &an con l os obj et os de l as dem's cl ases que i nt eract &an con l os
obj et os de l a cl ase que de$ ni mos. ( nf ormaci n que obj et os de l a cl ase que de$ ni mos. ( nf ormaci n que
necesi t an conocer l os rest ant es obj et os del si st ema necesi t an conocer l os rest ant es obj et os del si st ema
respect o de l os obj et os de$ ni dos en una cl ase par a respect o de l os obj et os de$ ni dos en una cl ase par a
poder poder I NTERACTUAR I NTERACTUAR con el l os. 5 at r i but os o con el l os. 5 at r i but os o
m2t odos m2t odos &V3LI COS &V3LI COS6 6
En l a $ gur a 4= se muest r a l a cl ase vehO cul os con sus En l a $ gur a 4= se muest r a l a cl ase vehO cul os con sus
dat os mi embro: *ro de pl aca, 7eso, mot or y vel oci dad dat os mi embro: *ro de pl aca, 7eso, mot or y vel oci dad
y sus m2t odos: arr ancar, parar , f renar y cargar. El y sus m2t odos: arr ancar, parar , f renar y cargar. El
di agr ama de l a derecha, usado en uml para gra$ car di agr ama de l a derecha, usado en uml para gra$ car
cl ases, no muest r a que l a cl ase se comuni ca al cl ases, no muest r a que l a cl ase se comuni ca al
ext er i or con ot ras cl ases por: el dat o mi embro ext er i or con ot ras cl ases por: el dat o mi embro
vel oci dad y el m2t odo cargar 5 6 , l os dem's dat os vel oci dad y el m2t odo cargar 5 6 , l os dem's dat os
mi embros y m2t ods son pr i vados o prot egi dos. En mi embros y m2t ods son pr i vados o prot egi dos. En
adel ant e est aremos usando el di agr ama de l a derecha adel ant e est aremos usando el di agr ama de l a derecha
para represent ar cl ases. para represent ar cl ases.
FI 6URA $1% FI 6URA $1% Ej empl o de Encapsul ami ent o Ej empl o de Encapsul ami ent o % %
AERENCI A% AERENCI A%
!a herenci a consi st e en !a herenci a consi st e en l $ &ro&$-$#i 61 l $ &ro&$-$#i 61 de de atri b"tos atri b"tos
: mQto+os : mQto+os a t r av2s de di st i nt as subM cl ases de$ ni das a t r av2s de di st i nt as subM cl ases de$ ni das
a par t i r de una cl ase com&n. !a herenci a nos permi t e a par t i r de una cl ase com&n. !a herenci a nos permi t e
de$ ni r una de$ ni r una #l $" &ri 1#i &$l #l $" &ri 1#i &$l y a t r av2s de un proceso y a t r av2s de un proceso
de re$ nami ent o obt ener de re$ nami ent o obt ener u47 #l $". u47 #l $".
S"bcl ases S"bcl ases : : on t odas aquel l as cl ases obt eni das on t odas aquel l as cl ases obt eni das
medi ant e re$ nami ent o de una o var i as cl ases medi ant e re$ nami ent o de una o var i as cl ases
pr i nci pal es. pr i nci pal es.
+i gur a 4I. Ej empl o de herenci a. +i gur a 4I. Ej empl o de herenci a.
!a $ gura 4I muest r a como l a cl ase cuadr ado l l amada !a $ gura 4I muest r a como l a cl ase cuadr ado l l amada
supercl ase hereda a l as cl ases o subcl ases rect 'ngul o supercl ase hereda a l as cl ases o subcl ases rect 'ngul o
y rombo el dat o mi embro a, a l a subcl ase rombo y rombo el dat o mi embro a, a l a subcl ase rombo
adem's l e hereda el mit odo per O met ro5 6 , a su ve) l a adem's l e hereda el mit odo per O met ro5 6 , a su ve) l a
subcl ase rect 'ngul o hereda a l a subcl ase subcl ase rect 'ngul o hereda a l a subcl ase
paral el ogr amo el dat o mi embro l y el m2t odo paral el ogr amo el dat o mi embro l y el m2t odo
perO met ro5 6 , est o si gni $ ca que por ej empl o para hal l ar perO met ro5 6 , est o si gni $ ca que por ej empl o para hal l ar
el per O met ro del rombo se ut i l i )a el m2t odo de$ ni do el per O met ro del rombo se ut i l i )a el m2t odo de$ ni do
para el cuadr ado , i gual par a hal l ar el perO met ro del para el cuadr ado , i gual par a hal l ar el perO met ro del
paral el ogr amo seut i l i )a el m2t odo de$ ni do en el paral el ogr amo seut i l i )a el m2t odo de$ ni do en el
rect 'ngul o y par a hal l ar el 'rea del rect 'ngul o puedo rect 'ngul o y par a hal l ar el 'rea del rect 'ngul o puedo
usar el dat o mi embro a del cuadrado. usar el dat o mi embro a del cuadrado.
&OLI MORFI SMO: &OLI MORFI SMO:
E Est a propi edad i ndi ca l a posi bi l i dad de de$ ni r var i os st a propi edad i ndi ca l a posi bi l i dad de de$ ni r var i os
m2t odos 5 oper aci ones6 con el mi smo nombre, m2t odos 5 oper aci ones6 con el mi smo nombre,
di f erenci 'ndol as &ni cament e en l os par'met ros de di f erenci 'ndol as &ni cament e en l os par'met ros de
ent r ada. 3ependi endo del obj et o que se i nt rodu)ca ent r ada. 3ependi endo del obj et o que se i nt rodu)ca
como par'met ro de ent rada, se el egi r ' como par'met ro de ent rada, se el egi r '
aut om't i cament e cual de l os m2t odos se va a aut om't i cament e cual de l os m2t odos se va a
ej ecut ar. ej ecut ar.
#% 1% #% CONSTRUCCI N DE CLASES% #% 1% #% CONSTRUCCI N DE CLASES%
7ar a const r ui r cl ases en f orma correct a es 7ar a const r ui r cl ases en f orma correct a es
conveni ent e t ener en cuent a l as si gui et es conveni ent e t ener en cuent a l as si gui et es
recomendaci n: recomendaci n:
( dent i $ car l os obj et os y 0l ases 5 subcl ases6 ( dent i $ car l os obj et os y 0l ases 5 subcl ases6
3e$ na l os at r i but os 3e$ na l os at r i but os
3e$ ni r oper aci ones 5 m2t odos6 : t al es como: el 3e$ ni r oper aci ones 5 m2t odos6 : t al es como: el
0onst r uct or y el 3est r uct or. Tenga en cuent a 0onst r uct or y el 3est r uct or. Tenga en cuent a
7ol i mor $ smos 7ol i mor $ smos
-el aci ones con ot ros obj et os -el aci ones con ot ros obj et os
7ar a l a const r ucci n de una cl ase se debe descri bi r un 7ar a l a const r ucci n de una cl ase se debe descri bi r un
gr upo de obj et os si mi l ares en t res aspect os: gr upo de obj et os si mi l ares en t res aspect os:
4 . 4 . 7-,7( E3/3E , /T-( AUT, 7-,7( E3/3E , /T-( AUT,
K . K . 0,.7,-T/.( E*T, 5 .jT,3,6 0,.7,-T/.( E*T, 5 .jT,3,6
G . G . -E!/0( ,*E 0,* ,T-, ,A: ET, M ( *TE-+/E -E!/0( ,*E 0,* ,T-, ,A: ET, M ( *TE-+/E
Fi g"ra $?% Fi g"ra $?% -epresent aci n de dos cl ases -epresent aci n de dos cl ases
i nt errel aci onadas. i nt errel aci onadas.
,% ESTRUCTURA DE DATOS DI NAMI CAS ,% ESTRUCTURA DE DATOS DI NAMI CAS
,% $% ,% $% LI STAS LI STAS
,% $% $% ,% $% $% LI STAS LI NEALES LI STAS LI NEALES
Una lista !ineal kLLM es una estructura de datos 5E.36 formada por
una coleccin de elementos +ato llamados NODOS en donde la
posicin o colocacin de un NODO con respecto a los dem's se
hace en forma lineal 5sentido unidimensional6 en un solo sentido.
Una lista lineal L es entonces un conjunto de NODOS
L
$5
L
#5
L
,5
%%% L
n
nEF4 que se nota
L W aL
$5
L
#5
L
,5
%%% L
n
X en +on+e ca+a Li iF$%%%n 0,*T(E*E U*
E!E.E*T, 3/T, 0,.,: n&meros enteros, reales, complejos%
0aracteres, strings, registros 5estructuras y?o uniones6.
9ay dos formas de almacenar y manejar una lista lineal en
memoria:
7or asignacin secuencial
7or asignacin enla)ada.
,% $% #% ,% $% #% LI STAS LI NEALES &OR ASI 6NACI ON LI STAS LI NEALES &OR ASI 6NACI ON
SECUENCI AL SECUENCI AL
!as listas lineales secuenciales est'n formadas por *,3,
almacenados en posiciones consecutivas de memoria.
Ficticio
In-oL$
!
%%%%%%
In-oLY!
%%%%%%%
%
In-oLn!
Lo: 3ireccin 57,(*TE-6 (nicial de la lista
El primer nodo en "n no+o Pcticio:
!a informacin que contiene no el
igual a los dem's nodos de la lista
l: !ongitud 5en Aytes6 de cada uno de
los nodos de la lista generalmente es
igual para todos los nodos, pero
puede ser 3iferente en algunos
casos.
n : *&mero de nodos de la lista
L$5 L#5 L,5 %% L;5 %%% LN: on las direcciones de memoria de los
nodos de la lista. on 7,(*TE-
Lo
l
L)
L* L4
L. Ln
IN/O (L.)
L.
La #r=$ica nos m!estra
!n nodo c!al8!iera de la
lista 4k9 c!"a direcci%n
de memoria es 4k " s!
contenido es /-F,(4k)
8!e p!ede ser !n entero9
real9 strin#9 car=cter o
!n re#istro o tipo de
dato creado por el
!s!ario
FI6URA $G% Estructura de una lista secuencial
$%?%$%$ !as 0aracterOsticas b'sicas de una lista lineal
almacenada secuencialmente
4. 7ara conocer la estructura de la lista, es decir sus componentes,
es necesario conocer Lo5 l : n% a nivel algorOtmico es necesario
conocer las variables min, max, !N y !F que despu2s m's
adelante se explica con detalle en el apartado de algoritmica
para listas lineales secuenciales.
K. !ista vacOa cuando nWN con+ici/n +e -rontera
G. 0omo el almacenamiento es secuencial se cumple que nodos
consecutivos en la lista ocupan posiciones consecutivas en
memoria.
!FM4, !F, !F@4
!FM4 se le denomina predecesor de !F
!F@4 se le denomina sucesor de !F
e dice que !FM4 y !F son nodos adyacentes al igual que !F y
!F@4.
i !FM4, !F, !F@4 son las direcciones en memoria de nodos
adyacentes entonces se cumple que !FM4`!F `!F@4.
J. En una lista lineal almacenada secuencialmente si un nodo LY
est' en la lista entonces cumple que:
$DFYDFn L$DFLYDFLn
=. !/ +U*0(,* 3E /00E, / U* *,3, 0U/!CU(E-/ !F, suponiendo
l igual para todos los nodos, ser':
dir WFHLYJF Lo + lOY Acceso +irecto%
FHL$JFLo +lO$5 FHL#JF Lo + #OlF Lo+l+l FFHL$J+l5
FHL,JFLo+,OlFLo+l+l+lFFHL#J+l
7odemos en general decir que:
FHLYJ FFHLY7$J + l es la forma como se hace acceso secuencial.
,%$%#%$% RE&RESENTACI ON DE UNA LI STA LI NEAL RE&RESENTACI ON DE UNA LI STA LI NEAL
SECUENCI AL EN MEMORI A SECUENCI AL EN MEMORI A
!a $gura 4< muestra un ejemplo de una lista lineal secuencial
almacenada en memoria que tiene J nodos con informacin de
enteros a=,J,L,4=c, las direcciones est'n en formato E8:,++ y se
aprecian los apuntadores !N, !F ,.in y .ax que sin las variables
que identi$can una lista lineal almacenada secuencialmente% de
este modo una lista lineal almacenada secuencialmente se nota
asi:
LLSL45LY5MaK5Min5l!
4=
L
J
=
*odo +icticio
Fig"ra $@% Un e*em(lo Lista Lineal Sec"encial en memoria
El espacio de memoria de$nido de .in a .ax se le denomina
espacio disponible para almacenar nodos de la lista lineal
secuencial que algunos autores denotan como />/(!.
,% $% #% #% O&ERACI ONES &RI MI TI >AS CON LI STAS ,% $% #% #% O&ERACI ONES &RI MI TI >AS CON LI STAS
LI NEALES ALMACENADAS SECUENCI ALMENTE LI NEALES ALMACENADAS SECUENCI ALMENTE
L% L% S!% L% L% S!%
Una !ista lineal euencial se transforma en el T./.3. !! bajo las
operaciones que se enumeran a continuacin
4. 0reacin de una lista. CRL!
K. A&squeda de nodos en una lista. 3L!
!F W
LfJd:NcIc
LfJd:NcIa
LfJd:NcIL
LfJd:NcII
.inW!o W LfJd:NcIJ
Ma>
G. 0ancelacin de un nodo en una lista% CAL!
J. (nsercin de un nodo en una lista. IL6
=. 0oncatenacin de dos o m's listas.5L4+L4$6
el T/3 !! se nota o se simboli)a algebraicamente de la siguiente
forma:
D LLS5 CRL53L5CAL5ILN+E
3esde el punto de vista de los objetos una lista lineal secuencial se
representar' en la forma como lo muestra la $gura KN.
FI6URA #4% -epresentacn de la clase !ista !ineal ecuencial.
,% $% #% ,% O3SER>ACI ONES 6ENERALES &ARA EL USO ,% $% #% ,% O3SER>ACI ONES 6ENERALES &ARA EL USO
E I M&LEMENTACI N DEL TAD LLS% E I M&LEMENTACI N DEL TAD LLS%
4. i se quiere eliminar un nodo en una lista vacOa hay error de
"n+erZo.%
K. i no existe E7/0(, 3(7!,*(A!E 5/>/(!6 y se quiere agregar o
insertar un elemento en la lista ocurre un error de o)erZo. en
44+
L(9 L.9 Ma>9 Min9 l
44+()
2*4()
04()
/4()
2A4()
)+2()
B!es8!eda(Dato)
CO&&e:i?8(Li)
Corre:der(Li)
los programas o implementacin se debe controlar el espacio
disponible.
G. Eliminar toda una lista solo basta con hacer un 3E!ETE a nivel de
!o. !iberar memoria.
J. !o, !4, !K,....!n son 7ointers o direcciones de memoria.
=. Tambi2n se puede decir que lista vacOa sO avail W !N.
,% $% #% 0% AL6ORI TMI CA &ARA LI STAS LI NEALES ,% $% #% 0% AL6ORI TMI CA &ARA LI STAS LI NEALES
SECUENCI ALES% SECUENCI ALES%
!a representacin algorOtmica de la clase !ista lineal secuencial
5!!6 se hace como sigue:
M 3e$nir la estructura de cada nodo de la lista es decir el tipo de
dato a almacenar ya sea: un tipo de datos primitivo o creado por el
usuario esto es, un registro. El tipo de nodo se de$ne asi:
No+o [
Ti(o In-oN
X
In-o: es una variable de cualquier tipo, para efectos algoritmicos
suponemos un tipo de dato primitivo , esto es un dato simple,
almacena un solo valor.
M 3e$nir los datos miembros de la clase !!, teniendo en cuenta
que Min5 MaK5 L4 : LY son variables apuntador de tipo No+o y l
es la longitud en bytes de cada nodo.
No+o _!N, _!F, _.(n, _.ax.
Int l
M 3e$nir la estructura de la clase !! con sus datos miembro y
m2todos, en la representacin siguiente.
Class LLS
[
WO Datos miembro OW
No+o _!N, _!F, _.(n, _.ax.
Int l
WO mQto+os (ri)a+osOW
3RsB"e+a +ato!
a
c
correMiSBLi!
a
c
correMiSBLi!
a
c
WO mQto+os (Rblicos OW
("blic :
LLS ! WW este es el mQto+o constr"ctor%
[
X
2*4()
[
X
/4()
[
X
04()
[
X
2A4()
[
X
)+2()
[
X
X
E! 0,*T-U0T,-. E! 0,*T-U0T,-.
El m2todo constructor de la clase lista lineal secuencial !!s56 ,
iniciali)a las variables .in,.ax, !N y !F % para ello se debe tener en
cuenta que el estado inicial de la lista es >/0(/ . 3e$niremos el
estado vacio de un objeto de la clase !! si !N W !F. En el
constructor tambien determinaremos el n&mero maximo de nodos
que la lista puede almacenar 5n nodos6. *o olvidar que para efectos
de control el nodo con direccin !N no almacena informacin y que
la lista solo se almacena en el intervalo de direcciones de .in a
.ax.
LLS !
[
Escriba \+igite el nRmero maKimo +e no+os +e la lsita]
Lea n
Min F ne. No+o HnJ
L4 F Min
LYFMin
MaKFMIn+n
X
En la instruccin G se asigna, por medio de ne#, una direccin de
memoria de tipo *odo a .in y se separan n posiciones secuenciales
de memoria de longitud l , para almacenar los nodos de la lista, en
la instruccin I ubicamos la direccin maxima 5.ax6 que puede
ocupar un nodo de la lista y en las instrucciones J y = hacemos
L4FL;W.in condicin de !! vacia.
CREAR LA LI STA LI NEAL SECUENCI AL% CRL! CREAR LA LI STA LI NEAL SECUENCI AL% CRL!
Este m2todo llena inicialmente la lista, es decir introduce datos a la
!! desde .in@l a .ax, por tal motivo se tienen en cuenta las
consideraciones siguientes: .over !F hacia .ax y cuando !F supere
a .ax 5!F ^.ax6 se debe terminar el proceso dado que si continua
se genera error de ,verSo#.
CRL!
[
No+o OLi
c9ar o(N
LiFLYN
+o [
o(F^n^N
LiFLI + lN
Escriba _Digite +atoF_N
Lea +atoN
In-oLi!F+atoN
+o [
Escriba _Mas +atos s! o n!_N
o(Fgetc9ar!N
X .9ileo( `F^s^ an+ o(`F^n^ an+ o(`F^S^ an+ o(`
F^N^!N
X .9ile o(`F^n^ an+ o(`F^N^ an+ LiDmaK!N
LYFLiN
X
I NSERTAR UN NUE>O NODO A UNA LI STA LI NEAL I NSERTAR UN NUE>O NODO A UNA LI STA LI NEAL
SECUENCI AL% I L!! SECUENCI AL% I L!!
E! proceso de insertar un nuevo nodo se fundamenta en las
siguientes consideraciones:
M U* *UE>, nodo se insertar' despu2s de otro del cual se conoce
su informacin.
M 9acer la b&squeda del nodo despu2s del cual se insertar' el
nuevo, para ello usaremos una variable Li la cual indicar' la
direccin del nodo despu2s del cual se har' la insercin.
El nuevo nodo puede insertarse: 5a6 3espu2s del <imo nodo,
posicin !F @l. /quO solo hacemos !F W!F @4 y info5!F6Wdato 5b6 En
cualquie otro lugar./quO se debe hacer corrimiento de los nodos que
estan despu2s de !i a la derecha 5hacia !F6 o a la i)quierda 5hacia
!N6 dependiendo l!i k !o ` !F k !i m y si adem's l!o nW.inm. i !N
W .in solo podemos hacer corrimiento a derecha, de otro modo si
se cumple la condicin que l!i k !o ` !F k li m se hace corrimiento a
i)quierda y se actuali)a !N 5!N W!NMl6. despu2s del corrimiento se
hace : !iWli@l e info5!i6Wdato.
!os m2todos de corrimiento son: correMiSBLi!5 correM+erLi! que
de$niremos m's adelante.
El siguiente algoritmo implementa el m2todo de insercin de un
nuevo nddo en una lista lineal secuencial despu2s de un nodo
dado.
I L! I L!
[ [
doa doa
Escriba d 3igite informacin del *odo de la listaU
!ea dato
!iW busqueda5dato6
c #hile 5!i^!F6
Escriba d3igite (nformacin del *uevo nodoU
!ea dato
(f 5!N nW .in6a
(f 5!i k !N ` !F k!i6a
0orrebi)q5!i,!N6
!NW!Nl
c
else a
0orrebder5!i,!F6
!FW!F@4
!iW!i@l
c
c
else a
0orribder5!i,!F6
!F W !F@l
!iW!i@l
c
info5!i6Wdato
X
3"sB"e+a+ato6 ??buscar un nodo en un lls
[
!iW!N@l
"hile 5info5!i6 nWdato and !i `W!F6a
!iW!i@l
c
return !i
X
WOmQto+o B"e 9ace corrimiento +e no+os a iSB"ier+a en "na
lls
correMiSBLi5 L4!
[
!4W!N
"hile 5!4 ` !i6a
(nfo5!46W(nfo5!4@l6
!4W!4@l
c
X
WOmQto+o B"e 9ace corrimiento +e no+os a +erec9a lls
correM+erLi5LY!
[
!4W!F
"hile 5!4 ^ !i6a
(nfo5!4@l6W(nfo5!46
!4W!4M l
c
X
3US=UEDA DE UN NODO EN UNA LI STA LI NEAL 3US=UEDA DE UN NODO EN UNA LI STA LI NEAL
SECUENCI AL% 3L!! SECUENCI AL% 3L!!
El algoritmo buscar' la existencia de un nodo en la !! cuya
informacin es conocida. el algoritmo recibir' entonces una
informacin que ser' buscada en la !! si est' se encuentra
retornar' un mensaje diciendo que la encontr y mostrando la
direccin del dato dentro de la lista y su valor , si no est' el dato en
la lista retornar' un mensaje d*odo no encontradoU y el valor.
3L!
[
Escriba ddigite dato a buscar en la !!U
!ea dato
!i WA&squeda5dato6
(f 5!i`W!F6a
Escriba d3ato en contrado en la direccinU,!(, ddatos
esWU,dato
c
elsea
Escriba dato, d *o encontrado en la listaU
c
X
CANCELAR UN NODO EN UNA LI STA LI NEAL CANCELAR UN NODO EN UNA LI STA LI NEAL
SECUENCI AL% CAL!! SECUENCI AL% CAL!!
7ara cancelar un nodo de una lista lineal secuencial se debe
ejecutar las siguientes acciones:
M !eer la informacin del nodo a eliminar.
M 9acer la b&squeda del nodo que contenga la informacin dada.
M i el nodo se encuentra en una posicin !i , se elimina el nodo !i
haciendo corrimiento de la informacin de los nodos de la lista
hacia !i ,corrimiento a i)quierda o a derecha seg&n sea la respuesta
a la pregunta l!i k !o ` !F k !i m .
M i la informacin no se encuentra en la lista se escribe un mensaje
donde se avise que el nodo con la informacin dada no est' en la
lista.
CAL !
[
3igite d(nformacin a cancelarU
!ea dato
!i WA&squeda 5dato6
(f 5!i `W!F6a
(f 5!iM!N` !FM!i6a
0orrebder5!N,!i6
!NW!N @ l
c
else a
correMi)q5!F,!i6
!FW!FM l
c
c
else a
Escriba dato, d*o encotrado en la listaU
c
X
CONSULTAR TODA LA LI STA% ESC!! CONSULTAR TODA LA LI STA% ESC!!
7ara consultar todos los nodos solo se hace un ciclo desde !N@ l
hasta !F y se imprime la informacin de cada nodo.
ESC!
[
for 5!iW!N@l , !F6a
Escriba info5!i6
c
X
,% $% ,% ,% $% ,% &I LAS5 COLAS < DO3LES COLAS% &I LAS5 COLAS < DO3LES COLAS%
e pueden de$nir diferentes clases de !! por su uso y por la
forma como de$nen los m2todos u operaciones.
!as clases de listas lineales almacenadas secuencialmente 5lls6 que
se presentan con mayor frecuencia en el uso computacional en el
manejo de datos y programas almacenados en memoria son
aquellas en donde las ,7E-/0(,*E 3E: insert 5adicin de nodos6,
+elete 5supresin de nodos6, =UER< 50onsultas o b&squedas6 se
hacen por E! 7-(.E-, , U!T(., *,3,. / esta clase de lls se les
denominan con nombres especiales como &ILAS STAC;!5
COLAS =UEUE! o DO3LE COLAS DOU3LE =UEUE!5 en este
apartado estudiaremos este tipo de listas, es importante resaltar
que estas clases de estucturas de datos se pueden de$nir como un
conjunto de clases con relaciones de herencia%
,% $% ,% $7 ,% $% ,% $7 &I LAS O STAC;% &I LAS O STAC;%
Un objeto pila o tacF es una lista lineal secuencial 5lls6 en donde
las operaciones o m2todos de insertar y cancelar nodos se
hacen por un mismo extremo, generalmente el E;T-E.,
U7E-(,- 5!F6 , y que es llamado TO&E%
e pueden construir todas las operaciones o m2todos que se
quieran, pero se deben de$nir con base en las dos operaciones
3ASICAS que son ADICIONES 5&USA! y CANCELACIONES
&O&!%
MCTODO DE ADI CI ON O &USA% MCTODO DE ADI CI ON O &USA%
0onsiste en /gregar un nodo a la 7(!/ , T/0B coloc'ndolo E* el
E;T-E.7 U7E-(,- , TO&E%
MCTODO DE CANCELACI ON O &O& MCTODO DE CANCELACI ON O &O&%
0onsiste en quitar o cancelar un nodo desde el E;T-E.,
U7E-(,- o TO&E%
e dice que en una 7(!/ o T/0B las operaciones 7U9 y 7,7 se
ejecutan en forma LIFO 5!/T (* +(-T ,UT6 o UE7 5U!T(., E*
E*T-/- 7-(.E-, E* /!(-6.
En la $gura K4 se muestra la representacin de un objeto de la
clase pila en ella se destacan los siguientes elementos:
3ASE: 3ASE: (ndicador $jo o 7,(*TE- se locali)a o genera al tiempo
de creacin de la 7(!/ y no cambia a trav2s de los procesos en
una pila.
TO&E: TO&E: variable 7,(*TE- que indica la direccin del <imo nodo
incluido en la 7(!/, cambia a medida que se hacen 7U9 o 7,7
de nodos en la lista.
l: !ongitud de cada nodo de la pila en AETE.
, % $ % , % $ % $ % , % $ % , % $ % $ % RE&RESENTACI N 6RAFI CA DEL RE&RESENTACI N 6RAFI CA DEL
FUNCI ONAMI ENTO < ELEMENTOS DE UNA FUNCI ONAMI ENTO < ELEMENTOS DE UNA
&I LA &I LA O STAC;% O STAC;%
3ase FL4 LY F To(e STo(e! F In-ormaci/n +el Rltimo
no+o +e la lista o (ila
Fig"ra #$% -epresentacin de un objeto de la 0lase pila o stacF.
A>AI L A>AI L: Espacio disponible en AETE para la adicin de nodos
en la 7(!/, no se debe violar.
MAL: MAL: direccin del m'ximo nodo que se puede agregar a la
pila.
la variable MAL MAL a nivel de implementacin se calcula de$niendo
el m'ximo n&mero de nodos que puede almacenar la pila en
memoria.
Fig"ra ##. 8r'$ca de un objeto pila o stacF con sus datos
miembro y m2todos b'sicos.
!a $gura KK muestra un objeto de la clase pila o stacF en donde se
pueden destacar los datos miembros: Aase, Tope, l y .ax y los
m2todos b'sicos de 7ush k (nsertar nodos, 7op k eliminar nodos, los
cuales se reali)a por el extremo superior de la pila, llamado to(e.
e dice que el T,7E es la direccin del <imo nodo insertado.
El T./.3 pila o stacF5S6 entonces se denota de la siguiete forma :
DS5 StacY5 CrearMS5 &"s95 &o(5 EscE
En la $gura KG se muestra la clase tacF o pila con sus datos
miembro y sus m2todos b'sicos, se puede adicionar m's m2todos
@
@
@
@
@
P!sA Pop
Tope
Base
S (Base9Tope9l9Ma>)
dependiendo de la necesidad pero estos m2todos deben
construirse con base a los m2todos de 7ush y 7op. En este caso
adicionamos dos m2todos el CrearMS! para crear la pila inicial y
adicionar nodos en cualquier momento a la pila o stacF y el m2todo
Esc! para consultar todos los nodos de la pila o stacF.
Fig"ra #,% -epresentacin de la clase 7ila 5tacF6.
,% $% ,% $% #% ,% $% ,% $% #% CARACTERT STI CAS DE UNA &I LA% CARACTERT STI CAS DE UNA &I LA%
N. Aase`WTope`W.ax.
4. Una pila es vacOa si A/EWT,7E.
K. 7ila llena si T,7EW./;., esto signi$ca que se a agota el espacio
disponible inicialmente diseccionado para almacenar el stacF.
algorOtmicamente al momento de hacer una insercin 57ush6 se
debe controlar esta condicin para evitar el error de overSo# o
rebo)amiento de la pila.
G. +orma de (*0!U(- &USA6 o agregar informacin 5(*+,6 en una
7(!/ o T/0B.
To(e F To(e + l
STo(e! F INFO
J. +orma de 0/*0E!/- 5&O&6 de un nodo en una pila.
INFO F STo(e!
+.A25
0ase6 .o#e6 3a76 l
+.A25()
2rear8+()
)+2()
(o# ( )
(!s9(dato )
To(e F To(e 7 l
=. +orma de 0,*U!T/- sin retirar (*+, de una pila 5T/0BT,76.
9acer combinacin de 7U9 y 7,7.
I. i 7ila vacOa AaseWTope y se quiere hacer 7,7 5retiro o
cancelacin6 de un nodo ocurre U*3E-+!,".El algoritmo de 7op
debe controlar que no ocurra este error.
R. i 7ila !lena ./;WT,7E y se quiere hacer 7U9 5insertar6 error
de ,>E-+!,".
L. 7ara accesar el nod BMesimo debemos hacer 7U9 5cancelar6 los
nodos B@4, B@K, ...T,7E 5sucesores del nodo B6 .
<. e puede hacer 7U9 y 7,7 por la 3ase pero se debe dejar $jo
el To(e%
4N. !impiar o dejar vacOa una pila hacer TopeWAase o
simplemente hacer +elete 3ase DESTRUCTOR!% Este m2todo
se puede adicionar a la clase pila.
,% $% ,% $% ,% AL6ORI TMI CA &ARA &I LA 7 STAC;% ,% $% ,% $% ,% AL6ORI TMI CA &ARA &I LA 7 STAC;%
!a representacin algorOtmica de la clase 7(!/ 5T/0B6 se hace
como sigue:
M 3e$nir la estructura de cada nodo de la lista es decir el tipo de
dato a almacenar ya sea: un tipo de datos primitivo o creado por el
usuario esto es, un registro. El tipo de nodo se de$ne asi:
&ila [
Ti(o SN
X
S: es una variable de cualquier tipo, para efectos algoritmicos
suponemos un tipo de dato primitivo, esto es un dato simple,
almacena un solo valor.
M 3e$nir los datos miembros de la clase T/0B , teniendo en cuenta
que MaK5 3ase : To(e son variables apuntador de tipo &ila y l
es la longitud en bytes de cada nodo.
&ila _Aase, _Tope, _.ax.
Int l
M 3e$nir la estructura de la clase T/0B con sus datos miembro y
m2todos, en la representacin siguiente.
Class STAC;
[
WO Datos miembro OW
&ila _Aase, _Tope, _.ax.
Int l
WO mQto+os (ri)a+osOW
&"s9 +ato !
a
c
&o( !
a
c
WO mQto+os (Rblicos OW
("blic :
STAC; ! WW este es el mQto+o constr"ctor%
[
X
2rear8+( )
[
X
)+2()
[
X
X
E! 0,*T-U0T,-. E! 0,*T-U0T,-.
El m2todo constructor de la clase T/0B 5 6, iniciali)a las variables
Aase, Tope y .ax% para ello se debe tener en cuenta que el estado
inicial del stacF es >/0(N. 3e$niremos el estado vacio de un objeto
de la clase T/0B si Aase W Tope. En el constructor tambien
determinaremos el n&mero maximo de nodos que el T/0B puede
almacenar 5n nodos6. *o olvidar que para efectos de control el
nodo con direccin 3ase no almacena informacin y que T/0B
solo se almacena en el intervalo de direcciones de Aase a .ax.
STAC; !
[
Escriba \+igite el nRmero maKimo +e no+os +el STAC;]
Lea n
3ase F ne. &ila HnJ
To(eF3ase ?? Estado vacio del T/0B
MaKF3ase+n
X
En la instruccin G se asigna, por medio de ne#, una direccin de
memoria de tipo 7ila a base y se separan n posiciones
secuenciales de memoria de longitud l , para almacenar los nodos
del stacF, en la instruccin = ubicamos la direccin maxima 5.ax6
que puede ocupar un nodo del stacF y en la instruccion J hacemos
3aseFTo(e condicin de T/0B vacio.
MCTODO DE I NSERTAR NODOS EN UN STAC; MCTODO DE I NSERTAR NODOS EN UN STAC;
&USA &USA +ato!!% !!%
(nsertar un nuevo nodo al stacF se reali)a por el extremo superior
del stacF, por lo tanto la variable Tope almacena la direccin del
<imo nodo insertado y adem[s se mueve hacia .ax l bytes por
cada nodo nuevo en el stacF% se debe controlar el error de overSo#
esto es Tope no puede ser mayor que .ax, pero este control se
debe hacer en aquel m2todo que invoque a 7U956 no en este,
para evitar quitarle mayor mayor generalidad y reu)abilidad.
&"s9+ato !
[
TopeWTope @ l
5tope6Wdato
X
MCTODO DE CANCELAR NODOS EN UN STAC; MCTODO DE CANCELAR NODOS EN UN STAC;
&O&!!% &O&!!%
(gual que la insercin para eliminar un nodo del stacF este se
reali)a por el mismo extremo, es este caso por el tope. El m2todo
considera los siguientes aspectos:
!a informacin del nodo a eliminar se almacena en otra variable,
supuesto que posteriomente esta informacin tiene alg&n uso.
El tope se disminuye l bytes por cada nodo elimina y se acerca a la
Aase, por tal motivo es necesario controlar el estado >/0(, para
evitar error de UnderSo#, esto se debe hacer fuerar del m2todo
7op56 para darle m's generalidad y reu)abilidad.
&o(!
[
datoW5tope6
tope Wtope kl
ret"rn +ato
X
CREAR STAC;% CREARMS!! CREAR STAC;% CREARMS!!
Este m2todo permite adicionar nodos a un objeto stacF
previamente creado, introduce datos al T/0B desde Aase@l a
.ax, por tal motivo se tienen en cuenta las consideraciones
siguientes: (nvocar al m2todo 7ush y controlar que Tope no supere
a .ax 5Tope ^.ax6 , si esto ocurre, se debe terminar el proceso
dado que si continua se genera error de ,verSo#.
CrearMS!
[
char op
do a
opWono
Escriba e3igite datoWe
!ea dato
7ush5dato6
do a
Escriba e.as datos 5s6 o 5n6e
opWgetchar56
c #hile5op nWoso and opnWono and opnWoo and opnWo*o6
c #hile 5opnWono and opnWo*o and Tope`Wmax6
X
CONSULTAR LOS NODOS DE UN STAC;% ESC!!% CONSULTAR LOS NODOS DE UN STAC;% ESC!!%
7ara consultar los nodos de un objeto pila debemos utili)ar los
m2todos 7op56 y 7ush5dato6 el proceso denominado T/0BT,7.
En T/0BT,7 se de$nen los siguientes procesos:
M e 0ancelan uno a uno los nodos del tacF usando 7op 5 6.
M e 0onsulta la informacin de los nodos cancelados.
!os nodos cancelados se insertan en otro objeto pila previamente
creada usando 7ush 5dato6.
M +inali)ada la consulta se restaura el objeto pila original , es decir
hacemos el proceso inverso pasamos los nodos del segundo objeto
pila al primero.
ESC !
[
T/0B 74 ?? creamos un nuevo objeto pila
"hile 5Tope ^ Aase6a
(nfW7op56
Escriba (nf ?? consulta
74.7ush5inf6 ??almacenamos inf en otro objeto pila
c
?? 3evolvemos informacin al objeto pila inicial.
#hile 574.tope^74.base6a
(nfW74.pop56
7ush5inf6
c
delete 574.Aase6 ?? destruimos el segundo objeto pila creado
X
0ualquier otro m2todo creado para una pila debe usar los m2todos
&"s9 y &o(%
,% $% ,% #% ,% $% ,% #% COLA O =UEUE COLA O =UEUE
!a clase cola o queue es una lista lineal secuencial 5lls6 en donde la
operacin de insercin de nodos se hace por un extremo 5To(e6 y
la cancelacin?borrado o recuperacin de un nodo se hace por el
otro extremo 5Aase6.
e puede construir todas las operaciones o m2todos que se
quieran de$nir para la clase queue pero todas deben
implementarse con base en dos operaciones o m2todos 3aSICAS
que son ADICIONES o INSERT +e no+os &USA! y
CANCELACIONES o REMO>E +e no+os &O&!%
O&ERACI N ADI CI N O I NSERT NODOS A UN O&ERACI N ADI CI N O I NSERT NODOS A UN
COLA % COLA %
/gregar un nodo a un objeto de la clase 0,!/ se hace por el
extremo superior cuya direccin es To(e%
O&ERACI N REMO>E% O&ERACI N REMO>E%
e cancela un nodo de un objeto de la clase 0,!/ por el extremo
inferior cuya direccin es 3ase%
e dice que una clase 0,!/ o CUEUE las operaciones o m2todos de
(*E-T y -E.,>E se de$nen para ejecutarse en forma FIFO
5+(-T (* +(-T ,UT6 o &E&S 57-(.E-, E* E*T-/- 7-(.E-, E*
/!(-6.
, % $ % , % # % $ % , % $ % , % # % $ % RE&RESENTACI ON 6RAFI CA DEL RE&RESENTACI ON 6RAFI CA DEL
FUNCI ONAMI ENTO < ELEMENTOS DE UNA FUNCI ONAMI ENTO < ELEMENTOS DE UNA
COLA COLA O =UEUE% O =UEUE%
Ficticio
O O %%%%%
%
=TO&E
!
%%%%%%A>AI
L
%%%%
=to(e! : informacin del nodo cuya direccin es tope.
Fig"ra #0% Re(resentaci/n +e "n ob*eto +e la clase COLA o
=UEUE%
En la $gura KJ se muestra un objeto de la clase 0,!/ o CUEUE en
donde se destacan los siguientes elementos:
MI N: MI N: (ndicador $jo o 7,(*TE- se locali)a o genera al tiempo de
creacin de la 0,!/ y no cambia a trav2s de los procesos en una
pila.
3ASE: 3ASE: variable 7,(*TE- que indica la direccin del <imo nodo
cancelado 5remove6 de la 0,!/, su informacin no es parte de
la 0,!/. i no se ha cancelado ning&n nodo 3ase F Lo% 3ase
se cambia a medida que se van removiendo nodos de la lista.
TO&E: TO&E: variable 7,(*TE- que indica la direccin del <imo nodo
incluido en la 0,!/, cambia a medida que se hacen (*E-T de
nodos en la lista
l : : !ongitud de cada nodo de la pila en AETE. En 0@@ la
longitud que de$nida en los 7,(*TE- a cada nodo.
A>AI L: >AI L: Espacio disponible en AETE para la adicin de nodos
en la 0,!/, no se debe violar.
l
Tope
3A:
;
Base
INSE&T
&EMOBE
Min
MAL: MAL: direccin del m'ximo nodo que se puede agregar a la
0,!/.
la variable ./; se pueden cambia a nivel de implementacin se
de$ne a partir del m'ximo n&mero de nodos que puede almacenar
la cola en memoria. 3ebe ser calculado por el programador o
analista.
Fig"ra #1. 8r'$ca de un objeto cola o queue con sus datos
miembro y m2todos b'sicos.
!a $gura K= muestra un objeto de la clase cola o queue en donde
se pueden destacar los datos miembros: Aase, Tope, l min y .ax y
los m2todos b'sicos de (nsert k (nsertar nodosque se reali)a por el
extremo superior de la cola, llamado To(e, -emove k eliminar
nodos, se reali)a por el extremo inferior de la cola , llamado base.
e dice que el T,7E es la direccin del <imo nodo insertado y la
A/E la direccin del <imo nodo cancelado o removido.
El T./.3 cola o queue 5= 6 se denota de la siguiete forma :
D=5 ="e"e5 CrearM=5 Insert5 Remo)e5 EscE
En la $gura KI se muestra la clase Cueue o cola con sus datos
miembro y sus m2todos b'sicos, se puede adicionar m's m2todos
dependiendo de la necesidad pero estos m2todos deben
construirse con base a los m2todos de (nsert y remove. En este
@
@
Tope
Base
+ (Base9Tope9Min9Ma>9l)
Min
INSE&T
&EMOBE
@
caso adicionamos dos m2todos el CrearM=! para crear la pila
inicial y adiconar nodos en cualquier momento a la cola o queue y
el m2todo Esc! para consultar todos los nodos de queue.
Fig"ra #2% -epresentacin de la clase c,!/ 5Cueue6.
, % $ % , % # % # % , % $ % , % # % # % CARACTERI STI CAS DE UNA COLA% CARACTERI STI CAS DE UNA COLA%
4. .in `W Aase`W.ax y .in`WTope`W.ax.
K. 0ola vacOa si 3ase F To(e y si esta condicin se da debemos
llevarlos a .(n es decir 3aseF To(eFMin%
G. 0ola llena sO 3aseFMin : To(eFMaK% En la implementacin
3aseFMin : canti+a+ +e memoria asigna+a se 9a
agota+o%
J. Error de Un+erZo. si cola vacOa y se quiere hacer -E.,>E.
=. Error de O)erZo. si cola llena y se quiere hacer (*E-T.
I. 3ejar vacOa una 0,!/ hacer AaseWTopeW.in. i se queire
eliminar la queue usamos el destructor que seria +elete Min %
;1)1)
3in60ase6 .o#e6 3a76 l
;1)1)()
2rear8;()
)+2()
*emo<e ( )
/nsert(dato )
R. 7ara accesar el nod BMesimo debemos hacer remo)e de los
nodos Aase@l, Aase@K_l , ...Aase@5BM46_l 5antecesores del nodo
B6
, % $ % , % # % , % , % $ % , % # % , % ANALI SI S DE LOS &OSI 3LES ESTADOS DE ANALI SI S DE LOS &OSI 3LES ESTADOS DE
UNA COLA% UNA COLA%
FI6URA #?% Re(resentaci/n +e los +i-erentes esta+os +e "n
ob*eto +e la clase cola B"e"e!
Lo
Ma>
2ola =a"ia
BaseCTopeCLo
(A)
@
@
@
Tope
Base Lo
Ma>
@
@
(0)
@
@
@
Tope C
Lo
Ma>
Base
@
@
@
2ola llena
(2)
@
@
@ Tope
Base
Lo
Ma>
@
@
@
@
Base
Lo
Ma>
@
@
@
Tope C
Base
Lo
Ma>
Tope
@
@
(>)
()) (F)
@
@
@
Base
Lo
Ma>
@
@
@
Tope
Base
Lo
Ma>
@
Base
Tope
Lo
Ma> Tope
@
@
@ @
@
@
@
@
(?) (@) (/)
@
Base
Lo
Ma>
@
@
@
Tope
BaseC
Lo
Ma>
@
Tope
Base C
Lo
Ma>
Tope (5) (4)
!as gra$cas de los diferentes estados de un objeto cola mostrados
en la $gura KR sirven para anali)ar cuando se puede o no hacer
(*E-T o -E.,>E en una 0,!/. Estas gr'$cas permiten construir
los m2todos de -E.,>E e (*E-T en forma consistente y e$ciente.
!a tabla K. hace un resumen de las instrucciones de (ncluir o
(nsertar y cancelar o remover un nodo en un objeto de la clase cola
seg&n cada uno de los estados que se muestran en la $gura KR.
CASO INCLUIR I!W
CANCELAR C!
INSTRUCCION O3SER>ACION
/ ( : p 0: *, Incl"ir:
Tope Tope @l
C5Tope6 (nfo
Cola >acba TopeWAaseW!o
A ( :p 0: *, incl"ir:
Tope Tope @l
C5Tope6 (nfo
Cancelar:
Aase Aase@l
(nfo C5Aase6
0 ( : *, 0: p Cancelar:
Aase Aase@l
(nfo C5Aase6
Cola llena TopeW.ax y AaseW!o
3 (: p 0:p Incl"ir:
Tope Tope @l
C5Tope6 (nfo
cancelar:
Aase Aase@l
(nfo C5Aase6
E (: p 0:p Incl"ir:
Tope !o @l
C5Tope6 (nfo
Cancelar:
Aase Aase@l
(nfo C5Aase6
e dice que una cola trabaja en forma
CIRCULAR este caso ocurre cuando
Tope W .ax y Aase^ !o @ l, para evitar
que Tope /lcance a la Aase. 0uando la
cola trabaja asO se denomina cola
Circ"lar. i no permite esto se llama
cola SIM&LE.
+ (:p 0:p Incl"ir:
Tope Tope @l
C5Tope6 (nfo
Cancelar:
Aase Aase@l
(nfo C5Aase6
8 (:*, 0:( Cancelar:
Aase Aase@l
(nfo C5Aase6
TopeW.ax i se va incluir Entonces: Tope
!o @ l% como Tope /lcan)a a Aase NO
SE &UEDE INCLUIR5 Una ve) que Tope
y Aase salen de !o solo puede volver a
!o sO y solo sO !a lista queda vacOa.
9 ( : *, 0: ( Cancelar:
Aase Aase@l
(nfo C5Aase6
*o incluir 7orque al 9acer Tope
Tope@l, Tope ALCAN8A a Aase, lo cual
no es permitido.
( ( : ( 0: ( Incl"ir:
Tope Tope @l
C5Tope6 (nfo
CASO INCLUIR I!W
CANCELAR C!
INSTRUCCION O3SER>ACION
Cancelar:
Aase Aase@l
(nfo C5Aase6
: ( : ( 0: ( Incl"ir:
Tope Tope @l
C5Tope6 (nfo
Cancelar:
Aase Aase@l
(nfo C5Aase6
7ara el caso de 0ancelar al 9acer:
Aase Aase @ l, Aase /lcan)a al Tope,
en este caso la !ista queda >acba
l"ego +ebemos 9acer: Tope !o y
Aase !o
B ( :( 0:( Incl"ir:
Tope Tope @l
C5Tope6 (nfo
Cancelar:
Aase !o@l
(nfo C5Aase6
3ebe preguntarse por AaseWW .axm.
Entonces Aase !o @ l en la
0ancelacin.
! (: ( 0: ( Incl"ir:
Tope Tope @l
C5Tope6 (nfo
Cancelar:
Aase !o@l
(nfo C5Aase6
En el caso de cancelar como Aase
/lcan)a al Tope debe hacerse: Tope
!o y Aase !o para dejar cola vacOa.
TA3LA #% /n'lisis algoritmico de para la construccin de los
m2todos (nsert y -emove para una cola.
,% $% ,% #% 0% CARACTERI STI CAS ADI CI ONALES DE ,% $% ,% #% 0% CARACTERI STI CAS ADI CI ONALES DE
COLAS O =UEUE% COLAS O =UEUE%
0% >ACIAR UNA COLA: 0onsiste en 3ejarla >acOa. i la
informacin que almacena se necesita debe almacenarse en
otra objeto de la misma clase o de otra clase de estructura
de datos. 7ara dejar vacia la cola se puede : 3estruirla con el
destructor de objetos de la clase cola, +elete Min o
-ede$nirla 9acer: Tope W .in y Aase W .in
1% 7ara 0onsultar un *odo cualquiera de una cola se deben
-emover todos sus antecesores o predecesores.
2% Una cola llega a >acOa si 3ase ALCAN8A AL To(e To(e F
3ase!% !a cola se debe volver a DEFINIR para ello
hacemos: To(eFMin y 3aseF Min%
?% /l tiempo de (*0!U(,* el Tope no puede /lcan)ar a la
Aase.
G% Una 0,!/ trabaja en forma circular y por tanto el sucesor de
C5.ax6 es C5!46 donde !4W.in@l.
*,T/: En los casos tratados siempre se ha incluido por un extremo
5To(e! y se remueve o cancela por el otro 53ase!% 7ero se puede hacer
al contrario, es decir, incluir por base pero se debe cancelar por tope,
conservando las reglas establecidas.
G%$%,% DO3LE COLA O DOU3LE =UEUE%
Una doble cola o doble queue es una lista lineal secuencial 5lls6 en
donde las ,7E-/0(,*E se hacen por sus dos extremos
0U/!CU(E-/ CUE E/ !/ ,peracin.
e puede hacer todas las operaciones que se quieran de$nir pero
basadas en las dos operaciones 3ASICAS que son ADICIONES o
INSERT y CANCELACIONES o REMO>E%
O&ERACIN INSERT: /gregar un nodo a la 3,A!E 0,!/ se
puede hacer por el extremo superior cuya direccin es To(e5 o
por el extremo inferior cuya direccin es 3ase%
O&ERACIN REMO>E: e cancela un nodo de la 3,A!E 0,!/
por el extremo superior cuya direccin es To(e5 o por el extremo
inferior cuya direccin es 3ase%
En la 3,A!E 0,!/ el orden de salida o entrada depende de la
decisin que se tome para cancelar e incluir respecto del extremo
escogido para cada caso.
&ED&ESA&
G%$%0% RE&RESENTACIN 6RAFICA DEL FUNCIONAMIENTO < ELEMENTOS DE UNA
DO3LE COLA O DOU3LE =UEUE%
Ficticio O O %%%%%% D=TO&E! %%% A>AIL %%%%
Lo 3ase Ln F To(e D=To(e!FIn-ormaci/n +el Rltimo
no+o +e la Cola
&ED&ESA&
G%$%1% ELEMENTOS DE UNA DO3LE COLA
Lo : (ndicador $jo o 7,(*TE- se locali)a o genera al tiempo de
creacin de la 3,A!E 0,!/ y no cambia a trav2s de los procesos
en una pila.
3ASE : variable 7,(*TE- que indica la direccin del <imo nodo
cancelado 5remove6 de la 3,A!E 0,!/, su informacin no es
parte de la 3,A!E 0,!/. i no se ha cancelado ning&n nodo
3ase F Lo% 3ase se cambia a medida que se van removiendo
nodos de la lista.
TO&E F variable 7,(*TE- que indica la direccin del <imo
nodo incluido en la 3,A!E 0,!/, cambia a medida que se hacen
(*E-T de nodos en la lista
l: !ongitud de cada nodo de la pila en AETE. En 0@@ la longitud
que de$nida en los 7,(*TE- a cada nodo.
l
.o#e
MAE
D+
0ase
/-+)*.
*)3,=)
4o
/-+)*.
*)3,=)
(a)
(b)
(")
(d)
A>AIL : Espacio disponible en AETE para la adicin de nodos en
la 3,A!E 0,!/, no se debe violar.
MAL: direccin del m'ximo nodo que se puede agregar a la
3,A!E 0,!/.
/>/(! E ./; se pueden cambia a nivel de implementacin en c@@
de$niendo el m'ximo n&mero de nodos que puede almacenar la
cola en memoria. 3ebe ser calculado por el programador o analista.
&ED&ESA&
G%$%2% CARACTERISTICAS DE UNA DO3LE COLA%
4. !o `W Aase`W.ax y !o`WTope`W.ax.
K. 0ola vacOa si 3ase F To(e y si esta condicin se da debemos
llevarlos a !o es decir 3aseF To(eFLo%
G. 0ola llena sO 3aseFLo : To(eFMaK% En la implementacin
3aseFLo : nRmero +e memoria asigna+a se 9a agota+o%
J. Error de Un+erZo. si doble cola vacOa y se quiere hacer
-E.,>E.
=. Error de O)erZo. si doble cola llena y se quiere hacer (*E-T.
I. 3ejar vacOa una 3,A!E 0,!/ hacer AaseWTopeW!o o hacer
+elete Lo%
@
@
@
Tope
Base
D+ (Base9Tope9Lo9l)
Lo
INSE&T
&EMOBE
&EMOBE
INSE&T
R. 7ara accesar el nod BMesimo debemos hacer remo)e de los
nodos !o@l, !o@K_l , ...!o@5BM46_l 5antecesores del nodo B6 . o
de sus sucesores Tope , Tope Ml , Tope MK_l, ....
L. En una 3,A!E 0,!/ si : (ncluye por Aase entonces la 3C crece
hacia !o, /l incluir por tope la 3C crece hacia ./;.
<. 9ay cuatro casos para el manejo de (*E-T/- E -E.,>E- nodos
en una 3C.
INSERTAR REMO>ER FUNCIONA COMO
5b6 5d6 tacF
5a6 5c6 tacF
5b6 5c6 cola
5a6 5d6 cola
4N. i a la 3,A!E 0,!/ se le quita una E*T-/3/ 5(*E-T6 la 3C se
llama 3C con (*7UT restringido.
44. i a la 3,A!E 0,!/ se le quita una /!(3/ 5-E.,>E6 la 3C se
llama 3C con ,UT7UT restringido.
4K. !os procedimientos para manejo de (*E-T y -E.,>E en una
3C ser'n
(*0!U(- 7,- T,7E, 0/*0E!/- 7,- A/E, 0/*0E!/- 7,- T,7E e
(*0!U(- 7,- A/E.
!os dos primeros son los mismos que se vieron para 0,!/.
4G. 3cola llega a vacOo si: la cancelacin es por A/E entonces
A/E alcan)a a T,7E y si la cancelacin es por T,7E entonces
tope alcan)a a A/E. Tan pronto como ocurra una de estas
condiciones se debe rede$nir la 3C es decir Tope !o y Aase
!o.
4J. -ecordar que si Tope y Aase salen de !o, solo puede llegar a
!o si y solo si 3oble 0ola 53C6 vacOa.
4=. !a 3C tambi2n puede trabajar en forma circular. E 3E0(- E!
U0E,- 3E 3C5.ax6 es 3C5!46. 3onde !4W!o@l.
4I. >ACIAR UN DO3LE COLAD=! E !!E>/- / >/0(/.
&ED&ESA&
G%$%?% O&ERACIONES 3ASICAS DE DO3LE COLAS O DOU3LE =UEUE%
4. CANCELACION 3E U* *,3, o REMO>E E* U*/ 3,A!E 0,!/.
K. INCLUSION 3E U* *,3, o INSERT U*/ 3,A!E 0,!/.
0ualquier otra operacin debe hacerse como combinacin de estas
dos. Ejemplo crear DO3LE COLA
&ED&ESA&
G%$%G% LISTAS LINEALES ENLA8ADAS
Una lista lineal no necesariamente debe tener sus nodos
almacenados secuencialmente, se pueden presentar listas lineales
en memoria con la siguiente situacin.
DI&ECCION
-a$d F((((
-a$d F()((
-a$d F((A(
-a$d F()e$
-a$d F(*((
-a$d F(*a)
)*4
*4-
4(
)*3
ptr -a$d F()((
-a$d F(*a)
-a$d F((A(
NULL
B(
P
B(
@P
k ' nOmero de
predecesores de P en
preorden
Este sPm<olo
si#ni$ica c!al8!ier
enlace real o Ailo
FWN
FW4
FI6URA $@. -epresentacin general de un 'rbol binario enhebrado
con hilos a i)quierda M recorrido inorden.
FWN
FW4
B(
@
.
P
@P
B(
@@P
@P
(B
P
(B
PQ
k ' nOmero de
predecesores de P en
postorden
Este sPm<olo
si#ni$ica c!al8!ier
enlace real o Ailo
FWK
F caso general
FI6URA #4. -epresentacin general de un 'rbol binario enhebrado
con hilos a derecha M recorrido inorden.
/ partir de la $gura 4L y la generali)acin de un 'rbol binario
enhebrado de las $guras 4< y KN es preciso saber distinguir en la
-E7-EE*T/0(,* 3E .E.,-(/ los enlaces correspondientes a las
lOneas continuas 5enlaces efectivos6 y enlaces en lOneas punteadas
5hilos6 % ello se consigue mediante la adicin de dos campos a
cada nodo llamados LTA6 y RTA6 % la longitud de cada campo es
de un NI3LE0 3ITS!.
B(
B(
PQ
.
PQQ
PQ
PQ
P
P
JC*
J en caso #eneral
7odemos entonces hacer una comparacin, +(8U-/ K4, entre la
representacin *, E*9EA-/3/ , -E7-EE*T/0(,* */TU-/! y la
representacin E*9EA-/3/ para de$nir en forma exacta esta
<ima.
RE&RESENTACION
NATURAL
RE&RESENTACION
ENAE3RADA
!!(*B576 *U!! !T/8576WN !!(*B576Wv7
!!(*B576WC !T/8576W4 !!(*B576WC
-!(*B576W*U!! -T/8576WN -!(*B576W7v
-!(*B576WC -T/8576W4 -!(*B576WC
FI6URA #$. 3e$nicin de las representaciones de un 'rbol binario.
eg&n la de$nicin dada en la $gura K4, cada nuevo enlace d9( !,U
direcciona directamente al predecesor o sucesor de nodo en
cuestin, &, en (*,-3E* 5orden sim2trico6, nuevamente se
recuerda que su generali)acin se da en las $guras 4< y KN.
!a gran ventaja de los 'rboles enhebrados es que los algoritmos de
recorrido son m's simples, porque si tenemos un nodo con
direccin & con su representacin enhebrada se puede encontrar
la direccin de su sucesor o predecesor es decir e& y &e 5(*,-3E*6
mientras que en su representacin natural se necesita una pila
adicional para guardar las direcciones en cada recorrido a efectos
de saber que nodo est' encima de otro nodo dado & 5 ET/ E !/
+U*0(1* CUE -E/!(P/ !/ 7(!/6.
-E8-E/-
$4%1%$$% RE&RESENTACIN EN MEMORIA DE UN AR3OL 3INARIO ENAE3RADO%
7ara representar un 'rbol binario E*9EA-/3, en memoria es
necesario tener en cuenta las siguientes consideraciones :
a) 0/3/ *,3, tendr' la con$guracin que se nuestra en la $gura
KK.
FI6URA ##% -epresentacin de un nodo de un 'rbol enhebrado en
memoria.
3onde:
LLIN;&! 5 RLIN;&! son apuntadores, e INFO&! contenido del nodo.
LTA6&! : RTA6&! son variables de tipo Ait que ocupan cada una
un *(A!E 5sus valores N 46, que se usar' para saber cuando un
enlace es 9(!, o no 9(!,.
<) (niciali)ar el 'rbol con un nodo +(0T(0(, o 9E/3 para enhebrar
los enlaces de los nodos hojas m's a la i)quierda y derecha del
'rbol a una direccin efectiva. 7or tanto un 'rbol enhebrado
vacOo cumplir' satisfactoriamente con :
!!(*B59E/36W9E/3 !T/859E/36WN
a) 0uando el 'rbol enhebrado est2 *, >/0(, en el nodo 9E/3 E
3EAE 0U.7!(- CUE.
!!(*B59E/36 W T donde T es la direccin de la raO) del 'rbol
-!(*B59E/36 W 9E/3 -T/859E/36W4
!T/859E/36W4
LLINJ(P) LTAD(P) IN/O(P) &TAD(P) &LINJ(P)
(
(
!o anterior es con el $n de tener !,05T6_ y !,05T6v como los
primeros nodos en pre e inorden respectivamente. 7or tanto 9E/3
indica !,05T6 es decir la direccin del nodo cabecera.
9ay que decir $nalmente que el 'rbol crece con nodos insertados a
la i)quierda del nodo de cabecera, asO que, la $gura KG .UET-/ E!
Xrbol de la $gura 4R y 4L con su representacin en memoria en
forma enhebrada.
FI6URA #,% -epresentacin en memoria de un 'rbol enhebrado.
-E8-E/-
$4% 2% $4% 2% AR3OLES 3I NARI OS COMO RE&RESENTACI ON DE AR3OLES 3I NARI OS COMO RE&RESENTACI ON DE
AR3OLES AR3OLES
Un bosque de 'rboles o arboleda FT
$
5T
#
5T
,
5%%%%5T
n
! se puede
representar como un 'rbol binario correspondiente llamado 3F!.
El proceso de convertir FT
$
5T
#
5T
,
5%%%%5T
n
! a 3F! sigue los
siguientes pasos:
A
B C
D E
D
.
/
H I
@)A>
a6 Unir todas las raOces T
$
5 T
#
5 T
$
5 %%%% T
n%
<) Unir todos los hijos de un mismo padre, nodos que se
desprenden de una misma raO) .
c) Aorrar todos los enlaces verticales excepto los del padre con el
hijo m's a la i)quierda.
d6 -otamos el diagrama MJ=w y tenemos asO el 'rbol binario 3F!
correspondiente a FT
$
5 T
#
5 T
,
5 %%%% T
n
!%
!a +(8U-/ KJ. .uestra ejemplos de transformacin de un bosque a
su 'rbol binario correspondiente.
!a transformacin de FT
$
5 T
#
5 T
,
5 %%%%T
n
! a 3F! se le conoce
como 0,--E7,*3E*0(/ */TU-/! entre bosques y 'rboles
binarios.
i tenemos FT
$
! bosque de un 'rbol decimos entonces que hay
una correspondencia entre 'rboles y aquellos 'rboles binarios que
tienen raO) pero no sub'rbol derecho, dicho de otra forma la
representacin de un 'rbol T
$
corresponde a un 'rbol binario 3T
$
!
E8/3, a (PCU(E-3/.
3ado entonces FT
$
5 T
#
5 T
,
5%%%%5T
n
! un bosque de 'rboles. El 'rbol
binario 3F! correspondiente a F puede de$nirse rigurosamente
como sigue :
a) si nWN 5numero de 'rboles del bosque6 , 3F! est' vacOo.
<) si n^N, !a raO) de 3F! es T
$
N el sub'rbol i)quierdo de 3F! es
3T
$$
5 T
$#
5 T
$,
5%%%5T
$m
! donde T
$$
5 T
$#
5 T
$,
5%%%5T
$m
son los
sub'rboles de la raO) T
$
N y el sub'rbol derecho de 3F! es 3T
#
5
T
,
5%%%%5T
n
!%
Es sencillo, seg&n la de$nicin, ver que cualquier 'rbol binario
corresponde a un solo bosque de 'rboles e invertir el proceso, esto
es, dado un 'rbol binario hallar el bosque correspondiente.
Aosque +5T4,TK6
A5+6 correspondiente a
+5T4,TK6
FI6URA #0% Transformacin de un Aosque o arboleda a un 'rbol
binario.
3espu2s de hacer la transformacin de bosque o arboleda a 'rbol
binario se concluye que para todo T* no 9o*a en un 'rbol binario
que representa un bosque se cumple, como lo muestra la $gura K=,
que *odo a la i)quierda de T* son descendientes y nodos a
derecha de T* son 9ermanos.
.1
A
B
D
T
*
E D
J
C
/
H I
.1
A
B
J
C
D
T
*
E
D
/ H
I
.%
Nodo HiKo de TK Nodo Hermano de TK
FI6URA #1% *odos de un 'rbol binario que es representacin de
una arboleda o bosque.
-E8-E/-
$4%2%,%RE&RESENTACIN DE UNA AR3OLEDA COMO AR3OL 3INARIO EN MEMORIA
3ada una arboleda o bosque FT
$
5 T
#
5 T
,
5%%%5T
n
!5 para su
implementacin en el computador una forma conveniente es hallar
su representacin como 'rbol binario 3F! y de esta forma, cada
nodo T* tendr' la con$guracin que se muestra en la $gura KI.
FI6URA #2. (mplementacin de un nodo de 3F! en memoria para
FT
$
5 T
#
5 T
,
5%%%%5T
n
!%
3!(*B5Tj6 W *E;T5Tj6 : /puntador o enlace al descendiente de Tj.
9!(*B5Tj6W ,*5Tj6 : /puntador o enlace al 9ermano de Tj.
(*+,5Tj6 : (nformacin del nodo Tj.
-E8-E/-
$4%2%0%>ISITA O RECORRIDO DE UN 3OS=UE O AR3OLEDA
7ara recorrer o visitar los nodos de una arboleda o bosque FT
$
5 T
#
5
T
,
5 %%%% T
n
! se de las siguientes formas :
9allar primero el 'rbol binario 3F! correspondiente y luego se
usan los m2todos de visita vistos 5(reor+en5 inor+en :
DLINJ(TK) IN/O(TK) HLINJ(TK)
TK
(ostor+en6. Esta es la m's adecuada a nivel de
implementacin.
Usando notacin de par2ntesis /nidados se puede recorrer una
arboleda o bosque FT
$
5 T
#
5 T
,
5 %%%% T
n
! en 7-E,-3E*, (*,-3E*
E 7,T,-3E* sin necesidad de construir su 'rbol binario 3F!
correspondiente.
0onsideremos el bosque de la $gura KR. 7ara hacer los tres
recorridos usando los dos m2todos.
FI6URA #?% /rboleda o bosque FT
$
5 T
#
5 T
,
!
!a $gura KL. .uestra el 'rbol 3F! correspondiente a la arboleda
de la $gura KR.
.
1
A
B
D
C
E
/
D
.
2
H
I
I
J
L
.
3
M
P
&
+
N
O
P&EO&DEN F ABCDE/DHIIJLMP&+NO
INO&DEN F DE/CBAIIJHD&+PMNOL
POSTO&DEN F/EDCBJIIH+&PONMLDA
.
1
A
B
D
T
*
J
N
D
C
H
I
I
.
3
L
M
P
O
+
E
/
&
FI6URA #G% -epresentacin de la /rboleda o bosque FT
$
5 T
#
5 T
,
!
como 'rbol binario 3F!%
-ecorrido del bosque de la $gura KR FT
$
5 T
#
5 T
,
! usando
par2ntesis /nidados
FF A35CD5E5F!!5 6A I5I5;!!5 LM&R5=!!5N5O!!
7ara el recorrido en 7-E,-3E* se quitan par2ntesis y comas
quedando :
.
1
A
B
D
T
*
J
N
D
C
H
I I
.
3
L
M
P
O
+
E /
&
7-E,-3E* : /A03E+89(:B!.7-C*,
7ara el recorrido en inorden, se colocan las raOces despu2s de cada
par2ntesis y despu2s se eliminan par2ntesis y comas obteniendo :
FF 35D5E5F!C!A5 I5I5;!A!65 R5=!&!M5N5O!L!
(*,-3E*: A3E+0/(:B98-C7.*,!
7ara el recorrido en postorden se debe seguir este algoritmo
AA Terminar nodos /rbol
>aya a derecha hasta encontrar el primer par2ntesis !%
>aya a ()quierda >((T/*3, *,3, hasta encontrar el
primer par2ntesis %
Aorre *,3, >((T/3, y los 5 6 encontra+os%
FAA%
>eamos con el ejemplo:
4. primer paso
FF A35CD5E5F!!5 6A I5I5;!!5 LM&R5=!!5N5O!!
eg&n lo anterior visitamos +E3 luego los eliminamos junto con
los dos par2ntesis y repetimos para el resto el algoritmo.
)er ( der Encontrado) )er (i?8 Encontrado)
FF A35C!5 6A I5I5;!!5 LM&R5=!!5N5O!!
>isitarOamos aquO 0A, los eliminamos junto con par2ntesis y
repetimos para el resto el algoritmo
FF A5 6A I5I5;!!5 LM&R5=!!5N5O!!
9asta aquO tenemos: +E30AB:( continuando en la misma forma
para el resto de la notacin obtenemos: 7,T,-3E* :
+E30AB:(9C-7,*.!8/
-E8-E/-
RE&RESENTACION DE EL&RESIONES AL6E3RAICAS 6ENERALES
UTILI8ANDO AR3OLES.
i incluimos operaciones unarias como 7 y funciones como log5
sen5 cos5 abs etc. !a representacin no puede ser un 'rbol
binario, sino un 'rbol.
E:E.7!,: 0onstruir el 'rbol que representa a cada una de las
siguientes expresiones algebraicas.
a) G!n5x@46 b6 Gln5x@46 M a?x__K c6 sen 5Kx@y6
MJlog5sen5xM466@Garcsen5x@K6
d6 yWGln5x6Mcos5x@46Me__G
!a $gura K<. .uestra la representacin en 'rbol de la expresin
algebraica del ejemplo a6 y su correspondiente 'rbol binario.
.
@
4 Ln
7
> )
Ar<ol <inario
correspondiente
.
@
4
Ln
7
>
)
FI6URA #@% -epresentacin de una expresin algebraica en 'rbol
y su 'rbol binario correspondiente.
?? 7rograma de /rboles Enhebrados
?? +echa junio de 4<<L anta .arta
?? 7rograma Elaborado 7or.....
?? Universidad 0ooperativa de 0olombia
?? +acultad de (ngenierOa de istemas
Yincludeestdio.he
Yincludeedos.he
Yincludeeconio.he
Yincludeea:utree.he
Yincludeea:uarbolen.he
void main56
a
ne _head, _q, _p, _avail%
char opcion,opcion4%
Soat inf%
unsigned int s#WN%
doa
men& 56%
doa
opcionWgetchar56%
c#hile5opcin`oNo ff opcin^o=o6%
s#itch 5opcin6a
case o4o:
if 5s#WWN6a
pWne# ne%
headWp%
headM^llinFWhead%
headM^ltagWN%
headM^rlinFWhead%
headM^rtagWN%
availWN%
s#W4%
clrscr56%
gotoxy5G4,4K6%
printf5e/-A,! (*(0(/!(P/3,e6%
validar56%
c
elsea
clrscr56%
gotoxy5GK.=,4K6%
printf5e/-A,! E/ 0-E/3,e6%
validar56%
c
breaF%
case oKo:
if 5s#WWN6a
controlbs#56%
c
elsea
clrscr56%
gotoxy5KJ,4K6%
printf5e3(8(TE !/ (*+,-./0(,* W e6%
gotoxy5JR,4K6%
leerbinfo5finf6%
inclusionbnodobenhebrado5fhead, inf, fp6%
c
breaF%
case oGo:
if 5s#WWN6a
controlbs#56%
c
elsea
if5headM^ltagWW46a
clrscr56%
gotoxy5KJ,K6%
printf5e-E0,--(3, 3E U* /-A,! E*
(*,-3E*une6%
recorridobinorden5head6%
validar56%
c
elsea
clrscr56%
gotoxy5GJ.=,I6%
printf5e/-A,! >/0(,e6%
validar56%
c
c
breaF%
case oJo:if5s#WWN6a
controlbs#56%
c
elsea
if5headM^ltagWW46a
clrscr56%
gotoxy5KJ,4K6%
printf5e3(8(TE !/ (*+,-./0(,* / 0/*0E!/- W
e6%
leerbinfo5finf6%
clrscr56%
removerbnodobdelbarbolne5fhead,i nf, favail6%
c
elsea
clrscr56%
gotoxy5GJ.=,I6%
printf5e/-A,! >/0(,e6%
validar56%
c
c
breaF%
default:breaF%
c
c#hile5opcionnWo=o6%
clrscr56%
gotoxy5GN,4K6%
printf5e+(* 3E 7-,0E,e6%
c
????3E+(*(0(1* 3E !, 0/.7, 3E! -E8(T-, 3E! /-A,!????
typedef struct nodobenhebradoa
nodobenhebrado _!linF%
int ltag:J%
int rtag:J%
Soat info%
nodobenhebrado _-linF%
cne%
???+U*0(,* 7/-/ !EE- !/ (*+,-./0(,* 7/-/ (*E-T/- E
0/*0E!/- E* E! /-A,! ?????
void leerbinfo5Soat _inf6
a
Soat infs%
scanf5etfU, finfs6%
_infWinfs%
c
???+U*0(,*7/-/ AU0/- (T(, 3E (*0!U0(,* 3E !/ (*+,-./0(,*
E* E! /-A,! ?????
void buscarbsitiobinclusion5ne _head, ne __r, Soat inf, unsigned int
_s#6
a
_rWheadM^llinF%
#hile 5_s#WWN ff infnW5_r6M^info6a
if5inf`5_r6M^info6a
if55_r6M^ltagnWN6a
_rW5_r6M^llinF%
c
elsea
_s#W4%
c
c
elsea
if55_r6M^rtagnWN6a
_rW5_r6M^rlinF%
c
elsea
_s#WK%
c
c
c
c
???+U*0(,* 7/-/ (*E-T/- !/ (*+,-./0(,* E* E! /-A,!????
void inclusionbnodobenhebrado5ne __head, Soat inf, ne __p6
a
ne _r%
unsigned int s#WN%
_pWne# ne%
5_p6M^ltagWN%
5_p6M^rtagWN%
5_p6M^infoWinf%
if55_head6M^ltagWWN6a
5_head6M^llinFW_p%
5_head6M^ltagW4%
5_p6M^llinFW_head%
5_p6M^rlinFW_head%
c
elsea
buscarbsitiobinclusion5_head, fr, inf, fs#6%
if5s#WW46a
5_p6M^llinFWrM^llinF%
rM^llinFW_p%
5_p6M^rlinFWr%
rM^ltagW4%
c
elsea
if5s#WWK6a
5_p6M^rlinFWrM^rlinF%
rM^rlinFW_p%
5_p6M^llinFWr%
rM^rtagW4%
c
c
c
c
??+U*0(,* 7/-/ >((T/- 0/3/ U*/ 3E !/ (*+,-./0(,* E* E!
/-A,!???
void visitarne5ne _p6
a
printf5etN.Gf e,pM^info6%
c
??+U*0(,*7/-/ -E/!(P/- E! -E0,--(3, 3E !/ (*+,-./0(,* E*
E! /-A,!???
void recorridobinorden5ne _head6
a
ne _p, _q, _r%
pWheadM^llinF%
if5pM^ltagWWN ff pM^rtagWWN6a
visitarne5p6%
c
elsea
doa
#hile5pM^ltagWW46a
pWpM^llinF%
c
visitarne5p6%
#hile5pM^rtagWWN ff pM^rlinFnWhead6a
pWpM^rlinF%
visitarne5p6%
c
pWpM^rlinF%
c#hile5pM^rlinFnWhead6%
??MMMMMMMsegmento para visitar los hijos i)quierdos del nodo mas a la
derecha de la raO)MMMMMM
if5headM^rlinFnWp ff pM^ltagWW46a
qWp%
pWpM^llinF%
doa
#hile5pM^ltagWW46a
pWpM^llinF%
c
visitarne5p6%
#hile5pM^rtagWWN ff pM^rlinFnWq6a
pWpM^rlinF%
visitarne5p6%
c
pWpM^rlinF%
c#hile5 pM^rlinFnWhead 6%
if5qnWhead 6a
visitarne5q6%
c
c
elsea
if5pnWhead 6a
visitarne5p6%
c
c
c
c
????+U*0(,*7/-/ AU0/- 0/3/ U*/ 3E !/ (*+,-./0(,* E* E!
/-A,!????
void buscarbnodobenhebrado5ne _head, ne __p, ne __q, Soat inf6
a
#hile5_pnWhead ff infnW5_p6M^info6a
_qW_p%
if5inf`5_p6M^info6a
_pW5_p6M^llinF%
c
elsea
_pW5_p6M^rlinF%
c
c
c
?????+U*0(,*7/-/ !(AE-/- ?????????
void liberarne5ne _p, ne __avail6
a
pM^rlinFW_avail%
_availWp%
c
????+U*0(,* 7/-/ E!(.(*/- *,3, 9,:/ E* E! /-A,!????
void eliminarbhojabne5ne _q, ne _p, ne __avail6
a
qWpM^rlinF%
if 5qM^llinFWWp6a
qM^llinFWpM^llinF%
qM^ltagWN%
c
elsea
qWpM^llinF%
qM^rlinFWpM^rlinF%
qM^rtagWN%
c
liberarne5p,f5_avail66%
c
???+U*0(,* 7/-/ E!(.(*/- *,3, -/./ E* E! /-A,!?????
void eliminarbnodobramabne 5ne _head, ne _q, ne _p, ne __avail6
a
ne _s, _#, _t, _F, _x, _), _l, _y, _m%
#WpM^llinF%
tWpM^rlinF%
if5pM^ltagWWN ff pM^rtagWW4 ff pWWheadM^llinF6a
if5tM^rtagWWN ff tM^ltagWWN6a
pM^infoWtM^info%
pM^rlinFWtM^rlinF%
pM^rtagWN%
yWt%
c
elsea
if5tM^rtagWW4 ff tM^ltagWWN6a
headM^llinFWt%
tM^llinFWhead%
yWp%
c
elsea
if5tM^ltagWW46a
#hile5tM^ltagWW46a
xWt%
tWtM^llinF%
c
pM^infoWtM^info%
if5tM^rtagWWN6a
xM^llinFWtM^llinF%
xM^ltagWN%
yWt%
c
elsea
lWtM^rlinF%
xM^llinFWl%
if5lM^ltagWW46a
#hile5lM^ltagWW46a
lWlM^llinF%
c
lM^llinFWtM^llinF%
c
elsea
lM^llinFWtM^llinF%
c
yWt%
c
c
c
c
c
elsea
if5pM^ltagWW4 ff pM^rtagWWN ff pWWheadM^llinF6a
if5#M^rtagWWN ff #M^ltagWWN6a
pM^infoW#M^info%
pM^llinFW#M^llinF%
pM^ltagWN%
yW#%
c
elsea
if5#M^ltagWW4 ff #M^rtagWWN6a
pM^infoW#M^info%
sW#M^llinF%
pM^llinFWs%
sM^rlinFW#M^rlinF%
yW#%
c
elsea
sW#M^rlinF%
#hile5sM^rtagWW46a
#Ws%
sWsM^rlinF%
c
pM^infoWsM^info%
if5sM^ltagWWN6a
#M^rlinFWsM^rlinF%
#M^rtagWN%
yWs%
c
elsea
if5sM^ltagWW46a
FWsM^llinF%
#hile5FM^rtagnWN ff FM^ltagnWN6a
)WF%
FWFM^rlinF%
c
sM^infoWFM^info%
)M^rlinFWFM^rlinF%
)M^rtagWN%
yWF%
c
c
c
c
c
elsea
if5pM^rtagWWN ff pWWqM^llinF6a
sWpM^llinF%
qM^llinFWs%
#hile5sM^rtagWW46a
sWsM^rlinF%
c
sM^rlinFWq%
yWp%
c
elsea
if5pM^ltagWWN ff pWWqM^llinF6a
sWpM^rlinF%
qM^llinFWs%
#hile5sM^ltagWW46a
sWsM^llinF%
c
sM^llinFWpM^llinF%
yWp%
c
elsea
if5pM^rtagWWN ff pWWqM^rlinF6a
sWpM^llinF%
qM^rlinFWs%
#hile5sM^rtagWW46a
sWsM^rlinF%
c
sM^rlinFWpM^rlinF%
yWp%
c
elsea
sWpM^rlinF%
qM^rlinFWs%
#hile5sM^ltagWW46a
sWsM^llinF%
c
sM^llinFWq%
yWp%
c
c
c
c
c
liberarne5y,f5_avail66%
c
???+U*0(,* 7/-/ -E.,>E- *,3, 3E! /-A,!???
void removerbnodobdelbarbolne5ne __head, Soat inf, ne __avail6
a
ne _s, _p, _q%
pW5_head6M^llinF%
if5pM^ltagWWN ff pM^rtagWWN ff pM^infoWWinf6a
5_head6M^llinFW_head%
5_head6M^ltagWN%
liberarne5p,f5_avail66%
c
elsea
buscarbnodobenhebrado5_head, fp, fq, inf6%
if5infWWpM^info6a
if5pM^ltagWWN ff pM^rtagWWN6a
eliminarbhojabne5q, p, f5_avail66%
c
elsea
if5pM^ltagWWN ff pM^rtagnWN6a
eliminarbnodobramabne5_head, q, p, f5_avail66%
c
elsea
if5pM^ltagnWN ff pM^rtagWWN6a
eliminarbnodobramabne5_head, q, p, f5_avail66%
c
elsea
??b&squeda de s
qWp%
sWpM^llinF%
#hile5sM^rtagWW46a
qWs%
sWsM^rlinF%
c
pM^infoWsM^info%
pWs%
if5pM^rtagWWN ff pM^ltagWWN6a
eliminarbhojabne5q, p, f5_avail66%
c
elsea
eliminarbnodobramabne5_head, q, p, f5_avail66%
c
c
c
c
c
elsea
gotoxy54<,I6%
printf5e!/ (*+,-./0(,* *, E E*0UE*T-/ E* E! /-A,!e6%
validar56%
c
c
c
?? 3e$nicin del registro para el 'rbol
typedef struct nominaa
nomina _!linF%
char info%
nomina _-linF%
cnom%
??+uncin >alidar
void validar56
a
gotoxy5KN.=,4J6%
printf5e7-E(,*E 0U/!CU(E- TE0!/ 7/-/ 0,*T(*U/-e 6%
getch56%
c
?? +uncin que 0ontrola "
void controlbs#56
a
clrscr56%
gotoxy5KJ,4K6%
printf5e/-A,! *, (*(0(/!(P/3, e6%
validar56%
c
??+uncin que 0ontrol "4
void controlbs#456
a clrscr56%
gotoxy5GJ.=,4K6%
printf5e/-A,! >/0(,e6%
validar56%
c
??+uncin para el .en& 7rincipal
void men&56
a clrscr56%
gotoxy5KL,R6%
printf5e.E*U 3E /-A,!E E*9EA-/3,e6%
gotoxy5G4.J,4N6%
printf5e4M (*(0(/!(P/0(,* e6%
gotoxy5G4.J,4K6%
printf5eKM 0-E/- *,3, e6%
gotoxy5G4.J,4J6%
printf5eGM .,T-/-e6%
gotoxy5G4.J,4I6%
printf5eJM 0/*0E!/-e6%
gotoxy5G4.J,4L6%
printf5e=M /!(-e6%
gotoxy5G4.J,KK6%
printf5e3igite ,pcin :e6%
gotoxy5JR,KK6%
c
??funcin para el ubmenu
void submenu56
a
clrscr56%
gotoxy5K<,<6%
printf5e UA .E*U 7/-/ ./*E:,e6%
gotoxy5G4.=,4N6%
printf5e 3E ,-3E*/.(E*T,e6%
gotoxy5GG,4K6%
printf5e4M 7-E,-3E*e6%
gotoxy5GG,4J6%
printf5eKM 7,T,-3E*e6%
gotoxy5GG,4I6%
printf5eGM (*,-3E*e6%
gotoxy5GG,4L6%
printf5eJM -ET,-*/-e6%
gotoxy5GG,KK6%
printf5e3(8(TE ,70(,* 5 6e6%
gotoxy5JL,KK6%
c
??+uncin para leer informacin
void leabinfo5char _inf6
a
char infs%
doa
scanf5etcU, finfs6%
c#hile5infs`o/oxx infs^oPo6%
_infWinfs%
c
??+uncin para visitar
void visitar5nom _p6
a
printf5etc e,pM^info6% c
??funcin para crear 'rbol
void crearbarbolbbusqueda5nom __t, char inf6
a
nom _p, _q, _r%
pWne# nom%
pM^llinFWN%
pM^rlinFWN%
pM^infoWinf%
if5_tWWN6a
_tWp%
clrscr56%
gotoxy5G4.=,4K6%
printf5e*,3, (*(0(/!(P/3,e6%
validar56%
c
elsea
qW_t%
#hile 5qnWN ff infnWqM^info6a
rWq%
if 5qM^info^inf6a
qWqM^llinF%
c
elsea
qWqM^rlinF%
c
c
if5rM^info^inf6a
rM^llinFWp%
c
else a
rM^rlinFWp%
c
c
c
?? +uncin Cue !ocali)a Espacio 3isponible
void locali)ar5nom __7, nom __avail6
a
if5_availWWN6a
_7Wne# nom%
c
elsea
_7W_avail%
_availW5_avail6M^rlinF%
c
c
??+uncin para liberar y .andar El *odo /l Espacio 3isponible
void liberar5nom _p, nom __avail6
a
pM^rlinFW_avail%
_availWp%
c
??+uncin 7ara Auscar Un *odo 7ara 0ancelar en el /rbol
void buscarbnodobarbol5nom _t, nom __p, nom __q, char inf6
a
_qWt%
_pW_q%
#hile5_pnWN ff infnW5_p6M^info6a
_qW_p%
if 5inf`5_p6M^info6a
_pW5_p6M^llinF%
c
elsea
_pW5_p6M^rlinF%
c
c
c
??+uncin 7ara Eliminar Un *odo 9oja de Un /rbol />!
void eliminarbhoja5nom _q, nom _p, nom __avail6
a
if5pWWqM^llinF6a
qM^llinFWN%
c
elsea
qM^rlinFWN%
c
liberar5p,f5_avail66%
c
??+uncin para Eliminar Un *odo -ama de Un /rbol
void eliminarbnodobrama5nom _q, nom _p, nom _avail6
a
nom _F, _", _+%
FWqM^rlinF%
"WqM^llinF%
if5qM^llinFWWN ff qM^rlinFWWF ff FM^llinFWWN ff FM
^rlinFWWN6a
qM^infoWFM^info%
pWF%
eliminarbhoja5q, p, favail6%
c
elsea
if5qM^llinFWWN ff qM^rlinFWWF ff FM^llinFWWN ff FM
^rlinFnWN6a
qM^infoWFM^info%
qM^rlinFWFM^rlinF%
pWF%
c
elsea
if5qM^llinFnWN ff qM^llinFWW" ff "M^llinFnWN ff "M^rlinFWWN6
a
qM^infoW"M^info%
qM^llinFW"M^llinF%
pW"%
c
elsea
if5qM^llinFnWN ff qM^llinFWW" ff "M^llinFWWN ff "M^rlinFnWN6
a
+W"M^rlinF%
qM^infoW+M^info%
pW+%
eliminarbhoja5", p, favail6%
c
elsea
if5qM^llinFnWN ff qM^llinFWW" ff "M^llinFWWN ff "M^rlinFWWN6
a
qM^infoW"M^info%
pW"%
eliminarbhoja5q, p, favail6%
c
elsea
if5qM^llinFWWN ff qM^rlinFWWF ff FM^llinFnWN ff FM^rlinFWWN6
a
+WFM^llinF%
qM^infoW+M^info%
pW+%
eliminarbhoja5F, +, favail6%
c
elsea
if5pM^llinFWWN ff pWWqM^llinF6a
qM^llinFWpM^rlinF% c
elsea
if5pM^rlinFWWN ff pWWqM^llinF6
a
qM^llinFWpM^llinF%
c
elsea
if5pM^rlinFWWN ff pWWqM^rlinF6
a
qM^rlinFWpM^llinF%
c
elsea
qM^rlinFWpM^rlinF%
c
c
c
c
c
c
c
c
c
liberar5p, favail6 %
c
??+uncin para -emover un *odo del /rbol
void removerbnodobdelbarbol5nom __t, char inf, nom _avail,
unsigned int _"6
a
nom _s, _p, _q%
if5_tWWN6a
gotoxy5GJ.=,4K6%
printf5e/-A,! >/0(,e6%
validar56%
_"W4%
c
elsea
if55_t6M^llinFWWN ff 5_t6M^rlinFWWN ff 5_t6M^infoWWinf6
a
gotoxy54<,4K6%
printf5eE! *,3, E!(.(*/3, E E! U*(0, 3E! /-A,!e6%
validar56%
_"W4%
pW_t%
_tWN%
liberar5p, favail6%
c
elsea
buscarbnodobarbol5_t, fp, fq, inf6%
if5pM^infonWinf6a ??ff s#4WWN6a
gotoxy54<,L6%
printf5e!/ (*+,-./0(,* *, E E*0UE*T-/
E* E! /-A,!e6%
validar56%
c
elsea
if5pM^llinFWWN ff pM^rlinFWWN6a
eliminarbhoja5q, p, favail6%
c
elsea
if5pM^llinFWWN ff pM^rlinFnWN6a
eliminarbnodobrama5q, p, avail6%
c
elsea
if5pM^llinFnWN ff pM^rlinFWWN6a
eliminarbnodobrama5q, p, avail6%
c
elsea
??b&squeda de s
qWp%
sWpM^llinF%
#hile5sM^rlinFnWN6a
qWs%
sWsM^rlinF%
c
pM^infoWsM^info%
pWs%
if5pM^rlinFWWN ff pM^llinFWWN6
a
eliminarbhoja5q, p, favail6%
c
elsea
eliminarbnodobrama5q, p,
avail6%
c
c
c
c
c
c
c
c
??-ecorrido 3e Un /rbol en 7reorden
void preorden5nom _>6
a
if5>nWN6a
visitar5>6%
preorden5>M^llinF6%
preorden5>M^rlinF6%
c
c
?? -ecorrido de Un /rbol en inorden
void inorden5nom _C6
a
if5CnWN6a
inorden5CM^llinF6%
visitar5C6%
inorden5CM^rlinF6%
c
c
?? -ecorrido de Un /rbol en 7ostorden
void postorden5nom _P6
a
if5PnWN6a
postorden5PM^llinF6%
postorden5PM^rlinF6%
visitar5P6%
c
c
-E8-E/-
1 1 . 1 1 . ARBOL E S BI NARI OS BAL ANCE ADOS ARBOL E S BI NARI OS BAL ANCE ADOS
Y Y
BAL ANCE O DE ARBOL E S BI NARI OS BAL ANCE O DE ARBOL E S BI NARI OS
5a6 altura 'rbol W K
5A6 altura 'rbol W G
506 altura 'rbol W G
/
A 0
3 E
*ivel N
*ivel 4
*ivel K
+ 8
9 (
*ivel G
: B
/
A E
0 3
*ivel N
*ivel 4
*ivel K
/
A 0
3 E
*ivel N
*ivel 4
*ivel K
+ 8
9
(
*ivel G
Figura 30.
Arboles para
definir altura
$4% $4 $4% $4 ALTURA O &ROFUNDI DAD ALTURA O &ROFUNDI DAD
+ormalmente la altura o profundidad de cualquier nodo 5Tj6 en un
'rbol se de$ne como el m'ximo entre la altura del sub'rbol
derecho de Tj y la altura del sub'rbol i)quierdo de Tj. la altura de
un 'rbol o sub'rbol es la altura de su raO) que es igual a la
diferencia entre el m'ximo nivel del 'rbol y el de la raO) la altura se
denota asO:
AT*! F MaKAs"bcrbol +erec9o +e T*!5 As"bcrbol iSB"ier+o
+e T*!
En la notacin anterior, y en las que veremos en adelante en el
capitulo G, se puede tambi2n usar INFOT*6 en lugar de la direccin
T*.
7or de$nicin la ALTURA DE UN AR3OL 3INARIO >ACIOF 7$.
%jemplo : En la $gura GN 5a6, !a altura del 'rbol es de K, es decir,
95T6WK, 95T46W4, 95T4.46WN o usando (*+,5Tj6 seria 95/6WK,
95A6W4, 9506WN.
$$% $% $$% $% AR3OLES 3I NARI OS 3ALANCEADOS AR3OLES 3I NARI OS 3ALANCEADOS
!oa arboles binarios balanceados son llamados tambi2n arboles de
b&squeda />!, en honor a $nderson 1ol2s3is y %#) 4andis quienes
fueron sus descubridores.
7or de$nicin se dice que un 'rbol binario o />!, si para todo nodo
Tj en el 'rbol se cumple que la altura del sub'rbol i)quierdo de Tj y
la altura del sub'rbol derecho de Tj, nunca di$eren en mas de 4.
Esto es que:
7ara todo Tj en el 'rbol 95sub'rbol derecho de Tj6 M 95sub'rbol
i)quierdo de Tj6W N, 4.
$$% #% $$% #% 3ALANCE O FACTOR DE 3ALANCE DE UN NODO EN UN 3ALANCE O FACTOR DE 3ALANCE DE UN NODO EN UN
AR3OL 3I NARI O AR3OL 3I NARI O
E! balance o factor de balance de todo nodo Tj en un 'rbol binario,
se de$ne como, la diferencia entre la altura del sub'rbol i)quierdo
menos la altura del sub'rbol derecho correspondiente.
F3T*! F As"bcrbol iSB"ier+o +e T*! 7 As"bcrbol +erec9o +e
T*!%
%jemplo: En la $gura GN 5a6 hallar el factor de balance de T y T4.
+A5T6W KM4 W 4
+A5T46W 4M4 W N
(5 $6784 795$698 '% -9C% 7$4$5C%$-8 '9 /$6$ 08-8 58-8 0"
%5 %4 $6784 '% C()/4% Q(% :7;0"<= >?,@,?#
$$%#%,%RE&RESENTACIN 6RaFICA < NOTACIN DE AR3OLES 3INARIOS 3ALANCEADOS
En la $gura G45a6 se muestra un 'rbol binario, con sus
correspondientes arboles de balance +(8U-/ G4 5b6 y 5c6 como se
observa en la +(8U-/ G4 506, los nodos contienen el +/0T,- 3E
A/!/*0E 3E 0/3/ *,3, de la $gura G45a6 ya que:
+A54N6WM4 +A5=6WN +A54=6W4 +A54K6WN
se dice cuando:
+A5T:6W 4 entonces T: es (PCU(E-3, /!T, y se denota como W
+A5T:6W N entonces Tj es (8U/! / y se denota como 7
+A5T:6W M4 entonces T: es 3E-E09, /!T, y se nota como f
!a $gura G45b6 muestra el 'rbol equivalente de la $gura G45a6 donde
los nodos almacenan la notacin expuesta anteriormente.
5a6 5b6 5c6
FIGURA =1. /rbol Ainario con sus /rboles Equivalentes de Aalance.
e dice que los arboles de las $guras G45b6 y 5c6 con los arboles de
factor de balance asociados al 'rbol dado el de la $gura G45a6.
$$% ,% $$% ,% AR3OL 3I NARI O 3ALANCEADO &ERFECTO AR3OL 3I NARI O 3ALANCEADO &ERFECTO
Un 'rbol binario es un 'rbol binario balanceado perfecto sO:
T* no+o +el crbol F3TI!F4.
Esto indica que la altura de los sub'rboles i)quierdo y derecho son
iguales.
=
T1
u
M
?
M
M4
N 4
N
T
T1 T2
T2.1
T
T1
T2
T2.1
4N
L
4=
4K
T1 T2
T2.1
T
/ los arboles binarios balanceados perfectos se les denomina tambi2n
arboles T,T/!.E*TE A/!/*0E/3,. !a $gura GK muestra, un 'rbol
binario A/!/*0E/3, 7E-+E0T,.
FIGURA ='# /rbol Ainario Aalanceado 7erfecto.
e deja al lector construir sus 'rboles equivalentes de balance.
$$% 0% $$% 0% AR3OL 3I NARI O DE 3US=UEDA A>L AR3OL 3I NARI O DE 3US=UEDA A>L
Un 'rbol binario de b&squeda />! es un 'rbol binario de b&squeda
balanceado e (*+, 5T:6 son !!/>E de registros de alg&n archivo,
para todo Tj.
/
A 0
3
E
+ 8
T
T1
T2
T2.1
T2.2
T1.1
T1.2
FIGURA 33. Conunto de Arboles
!inarios de !"s#ueda.
+inalmente se puede concluir que un /-A,! A(*/-(, 3E
AUCUE3/ A/!/*0E/3, es 0,-T, E 7,A!/3, lo cual hace que la
b&squeda sea m's e$ciente, por tanto es de gran ventaja que los
'rboles binarios de b&squeda est2n balanceados y dentro de estos
los m's usados e importantes son los />!.
E>"r#i#io: 0on los 'rboles binarios de b&squeda de la $gura G4,
colocar en cada nodo su +A , e indicar cuales de ellos son 'rboles
/>!.
$$% 1% $$% 1% O&ERACI ONES CON AR3OLES 3I NARI OS DE O&ERACI ONES CON AR3OLES 3I NARI OS DE
3US=UEDA A>L 3US=UEDA A>L
!as operaciones con 'rboles binarios de b&squeda />! son en
esencia las misma que para 'rboles binarios ya visto en su
representacin natural, solo que a la estructura general de cada
nodo se le debe agregar un campo adiciona de typo AETE, que
almacena el +A 5factor de balance6, !/ *UE>/ ET-U0TU-/ 3E
0/3/ *,3, E* .E.,-(/ se muestra en la siguiente $gura:
Tj !!(*B5Tj6 (*+,5Tj6 +A5Tj6 -!(*B5Tj6
FI6URA ,0% Estructura de un *odo de un /rbol Ainario de
A&squeda />!
En -esumen las operaciones ser'n.
4. (niciali)acin del 'rbol
K. (nsercin de un nuevo nodo
G. upresin o cancelacin de un nodo
J. 9acer los recorrido 7-E, (* E 7,T,-3E*.
$$%1%,%INICIALI8ACIN DEL AR3OL
!a iniciali)acin del 'rbol />! es la misma que cualquier otro 'rbol
binario esto es: T *ull y />/(! *ull.
$$%1%0%INSERCIN DE UN NUE>O NODO EN UN AR3OL 3INARIO DE 3VS=UEDA A>L
En el proceso de (nsercin de nodos en un 'rbol binario de
b&squeda />! se requiere que se conserve en todo momento la
de$nicin de />! es decir que el 'rbol este A/!/*0E/3,.
En el proceso de insercin de nodos en los 'rboles binarios de
b&squeda en almacenamiento en su forma natural, ya visto, es
posible que el 'rbol quede o no balanceado. 0onsid2rese el
Ejemplo de (nsertar en un 'rbol el siguiente conjunto de valores de
llaves a4=,K=,<,KL,KK,I,=,4c la $gura G= muestra pasa a paso la
forma del 'rbol y si est' o no balanceado es decir es />!.
!os 'rboles de las $guras G= 5a6 a la 5f6 son 'rboles binarios de
b&squeda balanceados 5/>!6 pero los de las $guras G= 5g6 y 5h6
rompen la condicin de balanceo ya que los nodos con infoW< en el
g tiene +A5<6W K y en el 5h6 los nodos con (nfoWI,<,4= tiene
respectivamente +AWK,G,K.
T
)3
T
)3
*3
T
)3
0
*3
T
)3
0
*3
*1
)3
0
*3
** *1
T
)3
0
,
*3
** *1
T
)3
0
,
3
*3
** *1
T
::R
::R
S
::R
::R
::R
::R
::R
S
S
::R ::R
::R
S
::R
::R
::R
::R
T
::R
::R
::R
::R
::R
T
T
/B (0)C*
(a)
(<)
(c) (d)
(e) ($)
(#)
FIGURA 35. Se$uen$ia de
$rea$i%n de un &rbol
binario de b"s#ueda.
Esto signi$ca al momento de la insercin se debe evitar que los
+A5Tj6 para todo Tj en el 'rbol sea diferente de 4,N y M4.
En los 'rboles binarios de b&squeda />! se requiere que para T,3/
(*E-0(,* de un nuevo nodo el 'rbol quede balanceado es decir
siga siendo />!.
!as inserciones que producen un desbalanceo son:
El nuevo nodo insertado es un 3E0E*3(E*TE (PCU(E-3, de un
nodo Tj cuyo +A5Tj6W4 es decir es ()quierdo alto 5?6.
El nuevo nodo insertado es un 3E0E*3(E*TE 3E-E09, de un
nodo Tj cuyo +A5Tj6WM4 es decir es derecho alto 5u6.
$$%1%0%#% C/mo 9acer (ara mantener el crbol balancea+o +es("Qs +e
ca+a inserci/n +e "n n"e)o no+og
3ebe construirse procedimientos que al tiempo de insercin
realicen la transformacin del 'rbol tal que:
El recorrido (*,-3E* del /-A,! T-/*+,-./3, sea el mismo
que el del 'rbol original es decir se garantice el orden en el
'rbol binario de b&squeda.
El 'rbol binario de b&squeda este balanceado es decir sea />!.
!os 7-,0E3(.(E*T, que garanti)an los dos puntos anteriores se
denominan -,T/0(,*E y son dos :
-,T/0(,* 3E-E09/ y -,T/0(,* (PCU(E-3/ que reconstruyen el
'rbol o parte de 2l para restablecer el Aalanceo.
$$%1%0%,% Rotaci/n iSB"ier+a
!a nuevo nodo a insertar es un 3E0E*3(E*TE 3E-E09, 3E un
nodo 7 cuyo +A576WM4 es decir 7 es derecho alto5u6.
FI6URA ,2% Ejemplo de 'rboles para insercin que produce
-,T/0(,* (PCU(E-3/
En la $gura GI 5a6 si insertamos KI o GN el 'rbol se desbalancea,
ya que +A54=6 serOa MK, para evitar esto se debe hacer un rotacin
()quierda sobre C y se consigue el 'rbol de la $gura GI 5b6 que es
un 'rbol balanceado 5/>!6. 7ara conseguir esto se ejecuta el
siguiente conjunto de instrucciones.
C -linF576
-linF576!linF5C6 ( -linF5!linF5C66Wnull and !linF5!linF5C66Wnull
!linF5C6 7
$$%1%0%0% Rotaci/n +erec9a
!a nuevo nodo a insertar es un 3E0E*3(E*TE (PCU(E-3, 3E un
nodo 7 cuyo +A576W 4 es decir 7 es i)quierdo alto5u6.
FI6URA ,?% Ejemplo de 'rboles para insercin que produce -,T/0(,*
3E-E09/
En la $gura GI 5a6 si insertamos L o 4N el 'rbol se desbalancea, ya
que +A5K=6 serOa K, para evitar esto se debe hacer un rotacin
()quierda sobre C y se consigue el 'rbol de la $gura GI 5b6 que es
un 'rbol balanceado 5/>!6.
7ara conseguir esto se ejecuta el siguiente conjunto de
instrucciones.
C !linF576
!linF576-linF5C6 ( !linF5-linF5C66Wnull and
-linF5-linF5C66W*ull
-linF5C6 7
$$%1%0%1% Rotaciones +obles
i al inserta un nuevo nodo se hace necesario -,T/0(,*
(PCU(E-3/ ,A-E U* *,3, 7 , pero se tiene que
RlinYLlinY=!! `F N"ll o LlinYLlinY=!! `F N"ll 5 se debe
hacer primero una -,T/0(,* 3E-E09/ ,A-E C y luego hacer
-,T/0(,* (PCU(E-3/ sobre 7. Esto es rotaci/n Doble.
FI6URA ,G% .uestra un ejemplo donde se debe hacer rotacin
doble. 3erecha M ()quierda
El conjunto de (nstrucciones ser':
?? -otacin derecha sobre C
!!(*B5C6
!!(*B5C6-!(*B56
-!(*B56C
?? !igar sub'rbol rotado con 7
-linF576
?? -otacin i)quierda sobre 7
C-!(*B576
-!(*B576!!(*B5C6
!!(*B5C67
(gualmente, si al inserta un nuevo nodo se hace necesario
-,T/0(,* 3E-E09/ ,A-E U* *,3, 7 , pero se tiene que
RlinYRlinY=!! `F N"ll o LlinYRlinY=!! `F N"ll5 se debe hacer
primero una -,T/0(,* (PCU(E-3/ ,A-E C y luego hacer
-,T/0(,* 3E-E09/ sobre 7. Esto es rotaci/n Doble%
El conjunto de (nstrucciones ser' :
?? -otacin i)quierda sobre C
-!(*B5C6
-!(*B5C6!!(*B56
!!(*B56C
?? !igar sub'rbol rotado con 7
!linF576
?? -otacin derecha sobre 7
C !!(*B576
!!(*B576-!(*B5C6
-!(*B5C67
$$%1%1%SU&RESIN DE UN NODO EN UN AR3OL 3INARIO DE 3UES=UEDA A>L
/l suprimir un nodo en un 'rbol binario de b&squeda />! se debe
tener en cuenta las mismas condiciones que para la insercin esto
es:
El 'rbol resultante despu2s de cancelar nodo debe ser />!.
e debe conservar el recorrido />!
El procedimiento 3e supresin sigue las mismas reglas del
algoritmo visto para 'rboles binarios de b&squeda en
almacenamiento en forma natural, solo que se debe adicionar el
control de balanceo es decir las -,T/0(,*E y adem's tener en
cuenta que la supresin de un nodo puede afectar a m's de un
sub'rbol del 'rbol binario de b&squeda />! dado.
$$%1%2%RECORRIDOS EN INORDEN5 &REORDEN < &OSTORDEN
on los mismos algoritmos vistos para su almacenamiento en forma
natural
?? 7rograma de /rboles Aalanceados o T-EE />!
?? +echa junio de 4<<L anta .arta
?? 7rograma Elaborado 7or .....
?? Universidad 0ooperativa de 0olombia
?? +acultad de (ngenierOa de istemas
Yincludeestdio.he
Yincludeestdlib.he
Yincludeedos.he
Yincludeeconio.he
Yincludeea:urutinasutree.he
Yincludeea:urutinasuavl4.he
void main56
a
avl _T, _q, _p, _avail, _pp, _pivote%
char opcion,opcion4,inf%
unsigned int s#WN,"WN%
doa
men& 56%
doa
opcinWgetchar56%
c#hile5opcin`oNo ff opcin^o=o6%
s#itch 5opcin6a
case o4o:
if 5s#WWN6a
TWN%
s#W4%
"W4%
availWN%
clrscr56%
gotoxy5G4,4K6%
printf5e/-A,! (*(0(/!(P/3,e6%
validar56%
c
elsea
clrscr56%
gotoxy5KJ,4K6%
printf5e/-A,! E/ 0-E/3, e6%
validar56%
c
breaF%
case oKo:
if 5s#WWN6a
controlbs#56%
c
elsea
clrscr56%
gotoxy5KJ,4K6%
printf5e3(8(TE !/ (*+,-./0(,* W e6%
gotoxy5JR,4K6%
leabinfo5finf6%
"WN%
construirarbol5fT, inf6%
c
breaF%
case oGo:
if 5s#WWN6a
controlbs#56%
c
elsea
if5"WWN6a
doa
submenu56%
doa
opcion4Wgetchar56%
c#hile 5opcion4`oNo ff opcion4^oJo6%
s#itch5opcion46a
case o4o:
clrscr56%
gotoxy5KN,K6%
printf5erecorrido de un arbol en reordene6%
gotoxy5KN,L6%
preorden5T6%
validar56%
breaF%
case oKo:
clrscr56%
gotoxy5KG,K6%
printf5erecorrido de un arbol en postordene6%
gotoxy5KN,L6%
postorden5T6%
validar56%
breaF%
case oGo:
clrscr56%
gotoxy5KJ,K6%
printf5erecorrido de un arbol en inordene6%
gotoxy5KG.=,L6%
inorden5T6%
validar56%
breaF%
default:breaF%
c
c#hile5opcion4nWoJo6%
c
elsea
controlbs#456%
c
c
breaF%
case oJo:if5s#WWN6a
controlbs#56%
c
elsea
if5"WWN6a
clrscr56%
gotoxy5KJ,4K6%
printf5e3(8(TE !/ (*+,-./0(,* / 0/*0E!/- W e6%
leabinfo5finf6%
clrscr56%
removerbnodobdelbarbolbavl5fT, inf, avail, f"6%
c
elsea
controlbs#456%
c
c
breaF%
default:breaF%
c
c#hile5opcinnW o=o6%
clrscr56%
TWN%
gotoxy5GN,4K6%
printf5e+(* 3E 7-,0E,e6%
c
WW Arc9i)o +e F"nciones : +e (roce+imientos (ara el mane*o +e Arboles
3alancea+os
?? Estructura del *odo del /rbol
typedef struct arbolbavla
arbolbavl _llinF%
int fb%
char info%
arbolbavl _rlinF%
cavl%
?? (nsercin del /rbol />! a la derecha
void unabrotbablabderecha5avl _p, avl _q6
a
pM^llinFWqM^rlinF%
qM^rlinFWp%
pM^fbWN%
qM^fbWN%
c
?? (nsercin del /rbol />! a la ()quierda
void unabrotbablabi)quierda5avl_p, avl_q6
a
pM^rlinFWqM^llinF%
qM^llinFWp%
pM^fbWN%
qM^fbWN%
c
?? -otacin doble a la derecha
void doblebrotbablabderecha5avl _p, avl _q6
a
avl _r%
rWqM^rlinF%
qM^rlinFWrM^llinF%
rM^llinFWq%
pM^llinFWrM^rlinF%
rM^rlinFWp%
s#itch5 rM^fb6a
case N:
pM^fbWN%
qM^fbWN%
breaF%
case 4:
pM^fbWM4%
qM^fbWN%
breaF%
case M4:
pM^fbWN%
qM^fbW4%
breaF%
default:breaF%
c
rM^fbWN%
qWr%
c
?? -otacin doble a la i)quierda
void doblebrotbablabi)quierda5avl _p, avl _q6
a
avl _r%
rWqM^llinF%
qM^llinFWrM^rlinF%
rM^rlinFWq%
pM^rlinFWrM^llinF%
rM^llinFWp%
s#itch5rM^fb6a
case N:
pM^fbWN%
qM^fbWN%
breaF%
case 4:
pM^fbWN%
qM^fbWM4%
breaF%
case M4:
pM^fbW4%
qM^fbWN%
breaF%
default:breaF%
c
rM^fbWN%
qWr%
c
?? 7roceso que (niciali)a el /rbol />!
void construiarbol5avl __r, char inf6
a
unsigned int s#WN,"WN%
avl _x, _pivote, _pp, _p, _q%
xWne# avl%
xM^infoWinf%??0onsigue nuevo registro y con$gura el dato a insertar
xM^llinFWN%
xM^rlinFWN%
xM^fbWN%
if 5_rWWN6a ??si es la primera ve) que se llama el procedimiento, el
registro inicial
_rWx%??conseguido es la raO)
s#W4%
c
if 5s#WWN6a
pW_r%??
qWN%?_sitio donde se insertara nuevo registro y determinar pivote
inicialmente 7(>,TE ser' la raO) y pp ser' cero 5N6_?
pivoteW_r%
ppWN%
#hile 5pnWN6a
if 5pM^infoWWinf6a
clrscr56%
gotoxy54<,4K6%
printf5ela informacion ya se encuentra en el arbole6%
validar56%
??0ontrola que no vaya a quedar datos repetidos
s#W4%
c
if5pM^fbnWN6a
pivoteWp%??determinar valor de 7(>,TE y de su padre.
ppWq%
c
qWp%
if5pM^info^inf6a
pWpM^llinF%??/ctuali)a C
c ?? y
elsea
pWpM^rlinF% ??avan)a con 7
c
c
if 5s#WWN6a
if 5qM^info^inf6a
qM^llinFWx% ??(nserta ; como hijo i)quierdo o como
hijo derecho de q
c
elsea
qM^rlinFWx%
c
if5pivoteM^info^inf6a
pivoteM^fb@@% ??-ecalcula factor de balance
qWpivoteM^llinF%?? de 7(>,TE
c
elsea
pivoteM^fbMM%
qWpivoteM^rlinF%
c
pWq%
#hile5pnWx6a ??-ecalcula factores de balance de todos los registros
if5pM^info^inf6a
??trayectoria desde 7(>,TE hasta el registro insertado ;
pM^fbW4%
pWpM^llinF%
c
elsea
pM^fbWM4%
pWpM^rlinF%
c
c
if5abs5pivoteM^fb6`K6a
clrscr56%
gotoxy5KR.=,4K6%
printf5eE! /-A,! (8UE A/!/*0E/3,e6%
validar56%
"W4%
c
if5"WWN6a
if5pivoteM^fbWWK6a
??3etermina que tipo de rotacin hay que efectuar y llamar
if5qM^fbWW46a
??el procedimiento correspondiente
unabrotbablabderecha5pivote, q6%
c
elsea
doblebrotbablabderecha5pivote, q6%
c
c
elsea
if5qM^fbWWM46a
unabrotbablabi)quierda5pivote, q6%
c
elsea
doblebrotbablabi)quierda5pivote, q6%
c
c
if5ppWWN6a??i el registro desbalanceado
_rWq%??era la raO) actuali)a la nueva
s#W4%
c
if5s#WWN6a
if5pivoteWWppM^llinF6a
??7aga la nueva raO) del 'rbol rebalanceado
ppM^llinFWq%?? al registro C.
c
elsea
ppM^rlinFWq%
c
c
c
c
c
c
?? !ibera memoria
void liberarbavl5avl _p, avl __avail6
a
pM^rlinFW_avail%
_availWp%
c
??+uncin para Auscar Un nodo para 0ancelar
void buscarbnodobarbolbavl5avl _t, avl __p, avl __q, char inf6
a
_qWt%
_pW_q%
#hile5_pnWN ff infnW5_p6M^info6a
_qW_p%
if 5inf`5_p6M^info6a
_pW5_p6M^llinF%
c
elsea
_pW5_p6M^rlinF%
c
c
c
??+uncin 7ara Eliminar un *odo 9oja de Un /rbol />l
void eliminarbhojabavl5avl _q, avl _p, avl __avail6
a
if5pWWqM^llinF6a
qM^llinFWN%
if5qM^fbnWN6a
qM^fbWN%
celsea
qM^fbWM4%
c
c
elsea
qM^rlinFWN%
if5qM^fbnWN6a
qM^fbWN%
celsea
qM^fbW4%
c
c
liberarbavl5p,f5_avail66%
c
??+uncin 7ara Eliminar *odo -ama de Una /rbol
void eliminarbnodobramabavl5avl _q,avl _p, avl _avail6
a avl _F, _", _+%
FWqM^rlinF%
"WqM^llinF%
if5qM^llinFWWN ff qM^rlinFWWF ff FM^llinFWWN ff FM^rlinFWWN6a
qM^infoWFM^info%
pWF%
eliminarbhojabavl5q, p, favail6%
c
elsea
if5qM^llinFnWN ff qM^llinFWW" ff "M^llinFWWN ff "M^rlinFWWN6
a
qM^infoW"M^info%
pW"%
eliminarbhojabavl5q, p, favail6%
c
elsea
if5pM^llinFWWN ff pWWqM^llinF6a
qM^llinFWpM^rlinF%
c
elsea
if5pM^rlinFWWN ff pWWqM^llinF6a
qM^llinFWpM^llinF%
c
elsea
if5pM^rlinFWWN ff pWWqM^rlinF6a
qM^rlinFWpM^llinF%
c
elsea
qM^rlinFWpM^rlinF%
c
c
c
c
c
liberarbavl5p, favail6%
c
??+uncin 7ara -emover un *odo /rbol
void removerbnodobdelbarbolbavl5avl __t, char inf, avl _avail, unsigned int _"6
a
avl _s, _p, _q%
if5_tWWN6a
gotoxy5GJ.=,4K6%
printf5e/-A,! >/0(,e6%
validar56%
_"W4%
c
elsea
if55_t6M^llinFWWN ff 5_t6M^rlinFWWN ff 5_t6M^infoWWinf ff 5_t6M^fbWWN6a
gotoxy54<,4K6%
printf5eE! *,3, E!(.(*/3, E E! U*(0, 3E! /-A,!e6%
validar56%
_"W4%
pW_t%
_tWN%
liberarbavl5p, favail6%
c
elsea
buscarbnodobarbolbavl5_t, fp, fq, inf6%
if5pM^infonWinf6a
gotoxy54<,L6%
printf5ela informacion no se encuentra en el arbole6%
validar56%
c
elsea
if5pM^llinFWWN ff pM^rlinFWWN6a
eliminarbhojabavl5q, p, favail6%
c
elsea
if5pM^llinFWWN ff pM^rlinFnWN6a
eliminarbnodobramabavl5q, p, avail6%
c
elsea
if5pM^llinFnWN ff pM^rlinFWWN6a
eliminarbnodobramabavl5q, p, avail6%
c
elsea
??b&squeda de s
qWp%
sWpM^llinF%
#hile5sM^rlinFnWN6a
qWs%
sWsM^rlinF%
c
pM^infoWsM^info%
pWs%
if5pM^rlinFWWN ff pM^llinFWWN6a
eliminarbhojabavl5q, p, favail6%
c
elsea
eliminarbnodobramabavl5q, p, avail6%
c
c
c
c
c
c
c
c
??funcin para visitar
void visitar5avl _p6
a
printf5etc e,pM^info6%
c
?? -ecorrido de un /rbol en 7reorden
void preorden5avl _>6
a
doa
if5>nWN6a
??visitar5>6%
preordenbavl5>M^llinF6%
preordenbavl5>M^rlinF6%
c
c#hile5>M^fbnW4xx >M^fbnWN xx >M^fbnW M46%
c
?? -ecorrido de un /rbol (norden
void inorden5avl _C6
a
if5CnWN6a
inorden5CM^llinF6%
visitar5C6%
inorden5CM^rlinF6%
c
c
?? -ecorrido de un /rbol de 7ostorden
void postorden5avl _P6
a
if5PnWN6a
postorden5PM^llinF6%
postorden5PM^rlinF6%
visitar5P6%
c
c
1 ' . 1 ' . ORDE NAMI E NT O Y BUS?UE DA ORDE NAMI E NT O Y BUS?UE DA
!os conceptos o procesos de ordenamiento y b&squeda son muy
comunes en programacin. on de gran importancia en la
estructuracin y recuperacin de informacin a trav2s del uso del
ordenador son herramientas b'sicas en la red mundial de
informacin (*TE-*ET, especialmente usados por los llamados
.,T,-E 3E AUCUE3/ como E/9,,, altavista etc. y en las bases
de datos de cualquier tipo. Trataremos en este apartado las
t2cnicas m's comunes de ordenamiento y los m2todos m's usados
en los procesos de b&squeda de informacin.
$4% $$ $4% $$ TECNI CAS DE ORDENAMI ENTO TECNI CAS DE ORDENAMI ENTO
!a forma m's conveniente y ptima de guardar datos e
informacin en el computador que sea f'cil de locali)arla es la de
mantenerla en un orden conveniente.
En forma general la informacin se guarda o almacena en archivo
formado de registros, los cuales a su ve) contienen campos de
informacin.
7or ejemplo: El directorio telefnico no es m's que un archivo, en
donde los registros contienen la informacin en la $gura I.4.
NOM3RE TELEFONO DIRECCION
/*3-/3E 0/-!,
KGR4<L 0/!!E 4 Y KGMKN
A/--E-/ 7E3-, K4KNI= /v. +erro. Y KRM<R
0,--E/ :U/* KGKLIN 3iag. KN Y =ML
P/7/T/ 0/-!, K4KNII Transv. I Y =MJG
GRAFICA @.1. 3irectorio telefnico
0omo se observa los registros del archivo est'n ,-3E*/3, por
un campo 0!/>E que en este caso es el nombre, esto hace que !/
AUCUE3/ de la informacin se simpli$que por el hecho de estar
ordenado alfab2ticamente.
El ejemplo anterior nos sugiere que es de gran importancia y
utilidad manejar los conceptos de ,-3E*/.(E*T, y AUCUE3/
sobre cualquier estructura de datos.
$#%$%,%ORDENAMIENTO &OR INTERCAM3IO
El m2todo del intercambio es el m's ampliamente conocido y el
m's f'cil de implementar, pero el m's ine$ciente, funciona bien
para cantidades pequeHas de datos, para entenderlo consideremos
en primer lugar que tenemos un arreglo /\i] iW4.G como se
muestra: /W a4K,=,<c,
/quO /\4]W4K, /\K]W= y /\G]W<
AAIB ORDENADO SERIA ACDE2:21'F
7ara ejecutar este proceso se reali)an las siguientes acciones:
4. 0omparo /\4] ^ /\K]m como /\4] E ./E,- CUE /\K] entonces
debo 7//- /\K] donde /\4] y /\4] donde /\K] esto es debo
hacer el intercambio5 el cual se reali)a asO:
TE.7 /\4]
/\4] /\K]
/\K] TE.7
EN ESTE MOMENTO EL ARREGLO A SERIA. ACDE2 1'2 :F
K. 0omparo /\4] ^ /\G]m 0omo no se cumple la condicin no se
hace nada dejamos el vector como est'.
G. +inalmente, comparo l/\K]^/\G]m 0omo se cumple la condicin
hago el intercambio, esto es:
TE.7 /\K]
/\K] /\G]
/\G] TE.7
DE ESTA MANERA EL VECTOR AAIB ?UEDARG FINALMENTE
ASH.
A CDE2:21'F
ET/ T-E (*T-U00(,*E
9/0E* E! (*TE-0/.A(,
ET/ T-E (*T-U00(,*E
9/0E* E! (*TE-0/.A(,
Este es pues el m2todo del intercambio, llamado tambi2n el
m2todo de la burbuja, del cual mostramos dos algoritmos
traducidos a 0@@ a continuacin:
$#%$%,%#% >ersi/n +el intercambio con almacenamiento contig"o
Yinclude `iostream.h^
?? programa para ordenar vectores m2todo de la burbuja
void main56
int a\=N], i, j, temp, n4, n%
cout``U*ro. de Elementos de /: d%
cin^^n%
for5iW4% i`Wn% i@@6a
cout ``U/\d``i``U]WU%
cin^^a\i]%
c
n4WnM4%
for5iW4% i`Wn%i@@6a
for5jWi@4%j`Wn%j@@6a
if5a\i]^a\j]6a
tempWa\i]%
a\i]Wa\j]%
a\j]Wtemp%
c
c
c
cout``UunU%
cout``U>ector / ordenadoununU%
for 5iW4%i`Wn4%i@@6a
cout``U/\d``j``K]WU``a\i]``U d%
c
c
Yinclude`iostream.h^
??7rograma para ordenar vectores m2todo de la burbuja .E:,-/3,
void main56
a
int a\=N],i,j,temp,n4,n%
unsigned int s#%
cout``U*ro. de Elementos de /:U%
cin ^^n%
for5iW4%i`Wn%i@@6a
cout``U/\d``i``U]WU%
cin^^a\i]%
c
s#WN%
n4WnM4%
#hile 5s#WWN6a
jWK%
s#W4%
for 5iW4%i`Wn4%i@@6a
if 5a\i]^a\j]6 a
tempWa\i]%
a\i]Wa\j]%
a\i]Wtemp%
s#WN%
c
j@@%
c
n4Wn4M4%
c
cout``UunU%
cout``U>ector ordenadoununU%
for 5iW4%i`Wn%i@@6a
cout``U/\d``i``U]WU``a\i]``U d%
c
c
$#%$%0%ORDENAMIENTO &OR INSERCIN
!a ordenacin por insercin se basa en los siguientes pasos: ordena
los dos primeros elementos de la estructura, (*E-T/ el tercer
elemento en su lugar en relacin con los dos primeros elementos,
el cuarto elemento se (*E-T/ en su lugar en relacin con los tres
primeros.
Este proceso continua hasta que todos los elementos de la
estructura est2n ordenados. 7ara entenderlos supongamos el
arreglo /\i] iW4...=
A F [$#5@5,5$5#X
!os pasos que seguirOan serian:
0omien)o 4K,<,G,4,K
7aso 4 <,4K,G,4,K
7aso K G,<,4K,4,K
7aso G 4,G,<,4K,K
7aso J 5ultimo6 4,K,G,<,4K
+inalmente / Wa4,K,G,<,4Kc
$#%$%0%#% >ersi/n +e inserci/n con almacenamiento contig"o
Yinclude `iostream.h^
?? programa para ordenar vectores m2todo insercin
void main56
a
int a\=N],i, j, temp, n, menor%
cout``U*ro de Elementos de /: U%
cin^^n%
for 5iW4%i`Wn%i@@6a
cout``U/\d``i``]WU%
cin^^a\i]%
c
for 5iWK%i`Wn%i@@6a
jWiM4%c
menorWa\i]%
#hile 5menor`a\j] ff j^N6a
a\j@4]Wa\j]%
jWjM4%
c
a\j@4]Wmenor%
c
cout``UunU%
cout``U>ector / ordenadoununU%
for 5iW4%i`Wn%i@@6a
cout``U/U\d``i``U]WU``a\i]``U d%
c
c
$#%$%1%ORDENAMIENTO &OR SELECCIN
El m2todo del ordenamiento por seleccin, busca en la estructura
el elemento 5suponer n elementos en la estructura6 con el valor
mas bajo 5menor6 y lo coloca como el primero, luego busca en los
nM4 elementos restantes el de valor m's bajo y lo coloca de
segundo y asO sucesivamente hasta agotar la estructura.
0onsideremos el /rreglo /\i] iW4...= del caso anterior.
A C D1'2:2=212'F
!os pasos que se seguirOan son:
0omien)o 4K,<,G,4,K
7aso 4 4,<,G,4K,K
7aso K 4,K,G,4K,<
7aso G 4,K,G,4K,<
7aso J 4,K,G,<,4K
+inalmente / W a4,K,G,<,4Kc
$#%$%1%#% >ersi/n +e selecci/n con almacenamiento contig"o
Yinclude `iostream.h^
??programa para ordenar vectores m2todo de seleccin
void main56
a
int a\=N],i, j, temp, n, menor%
cout``U*ro de Elementos de /:U%
cin^^n%
for 5iW4%i`Wn%i@@6a
cout``U/\d``i``U]WU%
cin^^a\i]%
c
for 5iW4%i`Wn%i@@6a
menorWa\i]%
tempWi%
for 5jWi@4%j`Wn%j@@6a
if 5menor^a\j]6a
menorWa\j]%
tempWj%
c
c
a\temp]Wa\i]%
a\i]Wmenor%
c
cout``UunU%
cout``U>ector / ordenado ununU%
for 5iW4%i`Wn%i@@6a
cout``U/\d``i``U]WU``a\i]``U d%
c
c
$#%$%2%ORDENAMIENTOS MEIORADOS
!os m2todos de ordenamiento mejorados m's conocidos son: El
m2todo 9E!! y el CU(0B,-T 5ordenamiento r'pido6, uso de
arboles binarios de b&squeda y />!.
El .2todo 9E!! 53.!: 9E!!6 Es una variante del m2todo por
insercin.
El m2todo quicFsort se fundamenta en los procesos de intercambio
y divisin.
$#%$%2%#% MQto+o SAELL
Este m2todo se fundamenta en el m2todo de insercin y
adicionalmente en el proceso llamado 3(.(*U0(,* (*0-E.E*T/!.
Este m2todo ordena subestructuras separadas de la estructura
general, estas subestructuras contienen elementos de la estructura
original separadas F unidades. El valor de F denominado
(*0-E.E*T,.
>eamos un ejemplo: 0onsideremos el arreglo
A F [#151@50?5,15$#5@45G25,,X
U7,*8/., FW=, G, 4 ETE 0,*:U*T, E !!/./ E0UE*0(/ 3E
(*0-E.E*T,.
7ara la secuencia dada las subestructuras que se ordenarOa seria:
7aso 4. 5incremento W=6 /\4], /\I]
/\K], /\R]
/\G], /\L]
/\J]
/\=]
7aso K 5incremento W G6 /\4], /\J], /\R]
/\K], /\=], /\L]
/\G], /\I]
7aso G 5incremento W 46 /\4], /\K], /\G], /\J], /\=], /\I], /\R]
3e esta manera en cada uno de los pasos tendrOamos:
7aso 4. K=,=<,GG,G=,4K,<N,LI,JR.
7aso K. K=,4K,GG,G=,JR,<N,LI,=<.
7aso G. K=,K=,GG,G=,JR,=<,LI,<N.
$4% $# $4% $# 3US=UEDAS 3US=UEDAS
$#%$%?%3VS=UEDA SECUENCIAL
$#%$%G%3VS=UEDA &OR AR3OLES
$#%$%@%3VS=UEDA 3INARIA
Est2 m2todo es muy &til para estructuras almacenadas
secuencialmente y que a su ve) est2n completamente ordenadas
por alg&n campo clave. 7ara estructuras enla)adas no se
recomienda por hacerse lento, es mejor la b&squeda I.K.4 o I.K.K
seg&n el caso.
>eamos un ejemplo: supongamos que tenemos el arreglo
/Wa4K,K=,GG,G=,JR,=<,LI,<Nc /\i] iW4,L
E el valor a buscar si est' el n&mero infW=<.
4. 7rimero supongamos base W 4 y tope W L.
K. 9allamos medio W \5base @ tope6 ? K] 5para el primer caso
medio W J6.
G. 0omparamos inf ^ a\medio] m si es cumple hacemos base W
medio @4 sino tope W medio.
J. i inf W a\tope] terminamos y se encontr inf sino vamos a K.
=. -epetimos K, G y J hasta cuando base ^ tope o cuando se
encuentre inf.