Sei sulla pagina 1di 234

ESTRUCTURAS DE LA INFORMACIN

DESDE LA PROGRAMACIN ESTRUCTURADA


A
LA PROGRAMACIN ORIENTADA A OBJETOS
C + +
Ingeniero:
Ingeniero:
Ricardo Contreras
Ricardo Contreras
TABLA DE CONTENIDO
P R O L O G O
Quienes trabajan en el campo de las ciencias de la computacin y
especfcamente en el manejo del almacenamiento de la informacin tanto en
memoria principal, como en los medios de almacenamiento secundario han
venido creando mecanismos para el acceso a los datos en forma efciente y
ptima, para ello existe un conjunto de objetos y medios que permiten a travs
de los lenguajes como C,C!, "ava, etc# guardar, recuperar y manipular datos
e informacin almacenada# $ estos objetos o elementos se les denomina
estructuras de datos o estructuras de la informacin#
%l propsito de este texto es el de mostrar los conceptos, la implementacin en
C bajo el paradigma de la programacin orientada a objetos del uso de las
estructuras de datos e informacin en el desarrollo de soft&are#
Quiero resaltar el aporte que los estudiantes de ingeniera de 'istemas de la
(niversidad del )agdalena , de sus directivas, de docentes amigos y
compa*eros de esta casa de estudio, hicieron para que la publicacin de ste
fuera posible, creo que sin ellos, su entusiasmo y su decidida participacin esta
obra no hubiese llegado a feli+ trmino#
%s importante anotar que el contenido en cuanto a su organi+acin y
tratamiento a nivel tem,tico y de implementacin se debe a mi experiencia de
varios a*os en el campo del desarrollo y administracin de sistemas de
informacin, as como, del trabajo como docente en esta ,rea# $dem,s, en un
alto porcentaje sali de las apreciaciones e inquietudes de los estudiantes,
basados en los contenidos que exige la (niversidad para las asignaturas de
%structura de -atos y estructuras de la informacin, esto hace aun m,s valiosa
esta obra y muestra a la comunidad (niversitaria que siempre que haya un
compromiso, una motivacin y un deseo de parte de -ocentes y estudiantes,
cualquier trabajo de investigacin y.o desarrollo de cualquier tem,tica siempre
se podr, reali+ar#
%spero que el contenido, su presentacin y dem,s aspectos, puedan ser
mejorados y actuali+ados de acuerdo a los avances tecnolgicos, que por cierto
son r,pidos y vertiginosos, para ello espero contar con la participacin de todas
aquellas personas interesadas en el tema y que estn conscientes que LA
INVESTIGACION Y EL ESTUDIO PERPETUO SON LA BASE DEL XITO
PERSONAL Y PROFESIONAL#
El Autor.
I N T R O D U C C I O N
Un sistema se concibe como un conjunto de objetos
interrelacionados, que regidos por un conjunto de leyes, cumplen
un objetivo.
Todo lo que es y existe es un sistema, desde este punto de vista
los sistemas se pueden concebir como:
SISTEMA NATURALES: Tienen existencia por si mismos, sus
componentes e interrelaciones se rigen por leyes naturales y en su
conformacin no existe la participacin del hombre: El cuerpo
humano, el sistema solar, el mar etc.
SISTEMAS ARTIFICALES: on construidos, las componentes y sus
interrelaciones se rigen bajo leyes creadas para cumplir objetivos
requeridos por el hombre. !a Empresa, !a sociedad, la
contabilidad, una factura, un libro, el computador, sistema
operativo "indo#s, etc.
!os sistemas arti$ciales se puede clasi$car como: tangibles y
abstractos.
Los sistemas tangibles: son aquellos que sus componentes se
puede ver y tocar mientras que los sistemas abstractos no se
pueden tocar% en estos &ltimos est's los sistemas de informacin.
SISTEMA DE INFORMACIN SI!: Es un sistema cuyo objetivo es
estregar informacin &til, para la toma de decisiones de quien la
requiera. !os ( son la base fundamental de las organi)aciones
modernas. e asegura que la (*+,-./0(1* es el mayor activo de
las empresas en esta 2poca denominada la 2ra de la informacin.
3e los sistemas de informacin se pueden identi$car tres
componentes b'sicos: 3atos, procesos e informacin.!a $gura 4
muestra la estructura de un .( y la interrelacin entre sus
componentes.
+igura 4. .odelo ist2mico de los (.
!os 3/T, 5Entrada6, que son 7-,0E/3, por los 7-,8-/./
5procedimientos6, y los resultados (*+,-./0(,* 5salida6 son la
base y la ra)n de ser de todo sistema de informacin.
7ara de$nir, almacenar y procesar datos e informacin con el
computador se usan !/ ET-U0TU-/ 3E 3/T, o ET-U0TU-/
3E !/ (*+,-./0(1*.
Este texto se dedica al estudio y tratado de las estructuras de la
informacin como componentes soft#are para el desarrollo de
sistemas de informacin a todos los niveles de las organi)aciones .
INFORMACION
DATOS PROCESOS
1 . CONCE PT OS BASI COS DE UN 1 . CONCE PT OS BASI COS DE UN
SI ST E MA PARA E L MANE J O DE DAT OS E SI ST E MA PARA E L MANE J O DE DAT OS E
I NF ORMAC I ON I NF ORMAC I ON
Fi g"r a # Fi g"r a #. . Es t r uct ur a gener al de un comput ador Es t r uct ur a gener al de un comput ador
$% $% $% $% COM&UTADOR COM&UTADOR
istema que funciona por sus dos componentes 9/-3"/-E y
,+T"/-E.
$% #% $% #% SOFT'ARE SOFT'ARE
0onjunto de programas que hacen &til el computador. Un
programa no es m's un que conjunto de instrucciones que de$nen
los procesos que se ejecutan al interior de el computador sobre
los datos para obtener informacin &til y signi$cativa para quien la
requiera.
Dispositivos de
Entrada
(INPUT o I)
Dispositivo de
Salida
(OUTPUT o O)
Memoria Principal
Unidad de
Control
Unidad
Aritmetica
(ALU)
Dispositivos de Almacenamiento
Sec!ndario
Datos " pro#ramas
In$ormaci%n
CPU
$%#%$% CLASIFICACION DEL SOFT'ARE%
$%#%$%$% Sistema o(erati)o:
Es un conjunto de programas que manejan todas las componentes
hard#are del computador, hace que estas trabajen y permite que
otros programas puedan E:E0UT/-E. Ejemplos: 3,, U*(;, ;E*(;,
"(*3,"<=, "(*3," *T, *ET"/-E, .U(0, >.?7, U!T-(;,
"(*3, ;7 , !(*U; , etc.
3entro de algunas labores que reali)a el .,. tenemos: /rranca la
m'quina, identi$ca y pone a disposicin los dispositivos conectados
al sistema, facilidades de formateo de dispositivos etc.
$%#%$%#% Leng"a*es +e (rogramacion:
0onjunto de programas que permite construir otro soft#are.
Ejemplos: 7ascal, 0, 0@@, 0,A,!, +,-T-/*, !(T, *,A,!, !,8,,
./!T/!B, >isual Aasic, 9T.!, :/>/, :7, /7, C!, 7!?C! ,79D.:7
./7 etc.
$%#%$%,% So-t.are +e (ro(/sito general:
0onjunto de herramientas hechas en alg&n lenguaje, que permite
reali)ar o ejecutar varias labores E:E.7!,: 9,:/ E!E0T-,*(0/
5E;0E!, !,TU, C7-,6, ./*E:/3,-E 3E /-09(>, 5+,;, 3A/E6,
7-,0E/3,-E 3E 7/!/A-/ 5",-B, ",-3, ",-37E-+E0T.
$%#%$%0% So-t.are +e base +e +atos:
7ara manejo de sistemas de informacin a nivel empresarial donde
toda los datos e informacin se integral en un solo sistema
!!/./3, (TE./ 8ET,- 3E A/E 3E 3/T, , 3/T/A/E
./*/8E- ETE. 5oracle, informix, dba, access, sysbases,
postgres etc.6.
$%#%$%1% So-t.are +e a(licaciones:
0onjunto de programas que solucionan un problema especi$co de
la empresa. Ejemplo. 0ontabilidad, cartera, nomina etc.
$%#%$%2% So-t.are "tilitario:
0onjunto de programas que prestan servicio para algunas labores
especi$cas por ejemplo: antivirus, .sbacFup o 7cbacFup 5copias6,
Explorer 5conexin a internet6, calculadora, etc.
$% ,% $% ,% CONCE&TOS 3ASI COS DE MEMORI A CONCE&TOS 3ASI COS DE MEMORI A
El estudio de las estructuras de datos o de informacin requiere
que se tenga un conocimiento de la forma como el computador, el
sistema operativo instalado y los lenguajes administran la
memoria, por este motivo en este apartado hacemos un estudio de
la memoria, como funciona, como se divide y como datos,
informacin y programas la utili)an.
!a +igura G. .uestra las partes en que se divide !a .E.,-(/,
estas son:
-,. 5-E/3 ,*!E .E.,-E6: memoria de lectura &nicamente, es
una porcin de la memoria que los fabricantes pregraban
cuando ensamblan 5arman6 la computador dejan almacenados
un conjunto de programas llamados +(-."/-E que sirve
para iniciar el A,,T o arranque del sistema entre otras, es no
>,!/T(! esto signi$ca que si se apaga el computador su
contenido no se borra.
Fig"ra ,. 3ivisin de la memoria
-/. 5-/.3,. /00E .E.,-E6: memoria de acceso aleatorio,
es la parte de la memoria donde se almacenan los datos y
programas del usuario% es de mayor tamaHo que la -,. y es
>,!/T(! su contenido se borra cuando el equipo se apaga. e
llama de acceso aleatorio porque los datos y programas no se
almacenan siempre en posiciones consecutivas de
&OM
&AM
5-E/3 ,*!E .E.,-E6
5-/.3,. /00E .E.,-E6
almacenamiento, sino que se alojan dependiendo del tamaHo y
del espacio disponible.
El n&mero de chips de memoria 5Bilobytes 5Bb6 o .egabytes 5.b66
determinan la cantidad de memoria que pueden ocupar los
programas y datos. !a cantidad de memoria varia, pero en forma
general la memoria -,. puede estar entre IJFb a =4KFb, y la
-/. para la actualidad se tiene valores desde 4KL.b, K=I.b,
=4K.b, 4 gb, K8b.
7ara el computador los chips de memoria no son m's que U*/
7,0/ 7,(0(,*E 3E /!./0E*/.(E*T, 5bytes6, 0ada posicin o
4 Ayte tiene una direccin asociada como se muestra en la +igura
J.
Fig"ra 0% 3ireccionamiento directo o secuencial de memoria.
En donde 3(-E04, 3(-E0K. 3(-E0* son valores num2ricos que
indican la posicin que ocupa cada AETE en la memoria.
!os programas, en cualquier lenguaje, se diseHaron para accesar o
3(-E00(,*/- la memoria en t2rminos de direcciones.
9ay varios m2todos de 3(-E00(,*/- !/ .E.,-(/.
4. 3ireccionamiento lineal.
B'TE
BIT
( )
DI&ECCION
DI&EC)
DI&EC*
DI&ECN
K. 3ireccionamiento por segmento despla)amiento.
G. 7aginamiento.
J. 0ombinacion de segmentoMdespla)amiento y paginamiento.
=. ,tros
3e los anteriores solo anali)aremos los K primeros, por
considerarlos b'sicos, estos temas se pueden profundi)ar en texto
de microprocesadores y que traten de la arquitectura del
computador.
$% ,% $ DI RECCI ONAMI ENTO SECUENCI AL O DI RECTO% $% ,% $ DI RECCI ONAMI ENTO SECUENCI AL O DI RECTO%
0omo Ejemplo en la +igura =. e 0onsidera una memoria de 4NKJ
Fbytes 54 .A6, que permite hacer un estudio detallado de como el
computador 3(-E00(,*/ !/ .E.,-(/ para que se pueda tener
/00E, a los 3/T, /!./0E*/3,.
!os (ngenieros y programadores deben imaginarse la estructura de
la memoria no en t2rminos de cuanta memoria fOsica hay, sino
cuanta de ella es 3(-E00(,*/A!E.
BLO+UE
DE ,- .
DI&ECCION
/((((
D((((
E((((
C((((
B((((
A((((
0((((
1((((
2((((
,((((
3((((
-((((
4((((
*((((
)((((
(((((
Fig"ra 1% .emoria tipo de 4.A.

7ara nuestro ejemplo cada AETE est' referenciado mediante una
3(-E00(,* *U.E-(0/ de KN A(T de anchura. e tiende a utili)ar
la notacin hexadecimal, m's que la binaria, cuando se quiere
representar las posiciones de memoria% de esta forma se traducen
los KN A(T que forman la 3(-E00(,* a = 3(8(T, hexadecimales,
que son completamente equivalentes.
7ara efectos de administracin de la memoria el computador
asume que:
3(-E00(,*E E* !, A!,CUE D44445 E4445 F4444 on
destinadas para la -,..
3(-E00(,*E E* E! A!,CUE C4444 extensin -,.MA(,
5soft#are manejo de dispositivos de (?,6.
3(-E00(,*E E* E! A!,CUE 34444 para el manejo de las
posiciones del monitor.
3(-E00(,*E E* E! A!,CUE A4444 para el manejo extendido
de pantalla.
$%,%#% DIRECCIONAMIENTO SE6MENTO 7 DES&LA8AMIENTO
El procesador es el que maneja el direccionamiento de memoria
59a: )arios!% 7ara nuestro ejemplo el procesador divide el espacio
de memoria en SE6MENTOS DE 20 ;3<TES 0ada uno.
0ada segmento empie)a en una locali)acin cuya direccin es
divisible por 4I, y se conoce como DIRECCION DE SE6MENTO o
&ARRAFO DE SE6MENTO o 3LO=UE DE MEMORIA%
7ara poder acceder a cualquier posicin de almacenamiento 5AETE6
se debe conocer: E! E8.E*T, 3onde est' el byte 5E86 y su
direccin individual llamada despla)amiento 5,++ET6, que apunta
al byte exactamente, dentro del segmento de IJ BA. / esta &ltimas
tambi2n se les llaman DIRECCIONES RELATI>AS%
!as direcciones se crean y manipulan combinando la direccin del
segmento 5E86 y la relativa 5,++ET6
0ada una en 4I A(T. 7ero la direccin del segmento5E86 se trata
como si estuviera despla)ado J A(T a la i)quierda. 0uando se
aHade la direccin relativa 5,++ET6 se obtiene una direccin
completa de KN bits, $gura I.
$! 3(-E00(,* 3E E8.E*T, 5E86
#! 3(-E00(,* -E!/T(>/ 5,++ET6
,! 3(-E00(,* E8.E*T/3/ 3E KN A(T.
Fig"ra 2% 3ireccin completa de memoria de KN bits.
!a direccin del segmento5E86 es 33A,45 la direccin relativa
5,++ET6 es 3A2? la direccin segmentada da de la suma de la
direccin del segmento m's la direccin relativa y es C?0@?% Aa:
B"e anotar B"e la +irecci/n +el SE6MENTO A&UNTA
SIEM&RE AL &RINCI&IO DE UN SE6MENTO DE 20 ;3%
0uando se nota una direccin partida en E8.E*T,
3E7!/P/.(E*T, 5seg, oQset6 se utili)a la notacin E8: ,++ET
ejemplos NNNN:NNNN, +NNN: /A0K etc.
E:E-0(0(,: Escribir en la notacin E8:,++ET las siguientes
direcciones fOsicas ++EIE, <NN4/, /NNKE, ANN4/, RKGJ4.
/dicionalmente el procesador usa para el manejo de
direccionamiento de memoria los registros:
0: egmento de cdigo. /lmacena la direccin del inicio del
segmento de cdigo.
1 0 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0
(1)
(2)
(3)
3: egmento de datos. /lmacena la direccin del inicio del
segmento de datos.
: egmento de 7ila: almacena el inicio del stacF o pila,
almacenan par'metro y direcciones que usa el programa que
este en ejecucin.
E: egmento extra. /lmacena el inicio del segmento extra para la
pila o stacF.
$%,%,% MODO DE ALMACENAMIENTO SECUNDARIO%
i se queire que los datos e informacin que se procesa en
memoria no se pierda es necesario guardarla en la denominada
memoria secundaria o medios de almacenamiento, los m's
conocidos son:
CINTAS MA6NCTICAS: /lmacenamiento secuencial. !os
cartridges, en la actualidad, son muy utili)ados para copias de
seguridad en muchas empresas en 0olombia
DIS;ETTE5 DISCO DURO5 D>D5 MEMORIA FLASA < CD7
ROM: /lmacenamiento aleatorio
DIS;ETTE% Uno de los medios de almacenamiento m's popular
que ha sido utili)ados apartir de 4<R= y en gran cantidad con la
masi$cacin del uso de los microcomputadores, actualmente
est' perdiendo vigencia y uso por la aparicin de los
quemadores , los 03M-?" y la memoria Sash , los tipso de
disFette m's comunes se muestran en la Tabla 4.
Di!"tt" S"#tor" Pit$ B%t" &or
"#tor
C$r$

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 &ltimo 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 &ltima 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 &ltimo 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 &ltimo 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 &ltimo 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
&ltimo 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 &ltimo 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 &ltimo 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 &ltimo nodo insertado y la
A/E la direccin del &ltimo 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 &ltimo 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 &ltimo
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

Estas listas asO formadas se les denomina listas lineales enla)adas


que a nivel lgico se gr'$ca asO:
Estructura de cada nodo es:
3onde :
In$o(P) Lin.(P)
P

n!ll
ptr
+
A
P E
In$o(P) lin.(P)
&: >ariable apuntador o pointer que indica la posicin en
almacenamiento a partir de la cual se almacena el nodo.
In-o&!: 0onjunto de datos que almacena el nodo 5*&mero, tring,
char, registro6.
LinY&!F sig"iente&!FEnlace&!: >ariable apuntador que
contiene la direccin del siguiente nodo de la lista 5sucesor de 76.
&ED&ESA&
G%$%@% CARACTERISTICAS DE UNA LISTA ENLA8ADA
4. (tr: >ariable apuntador que almacena la direccin de memoria
del primer nodo de la lista, se denomina tambi2n DIRECCION
3ASE, es llamado tambi2n apuntador externo o CA3E8A DE
LISTA%
#% 0ada *,3,576 en la lista contiene por lo menos dos campos:
campo de datos: (*+,576 y un enlace o apuntador: !(*B576. i 7
es el &ltimo nodo de la lista, el valor del !(*B576 no es una
direccin v'lida es un valor especial llamado *U!! o *(!.
G. !a lista es IDENTIFICADA por el (tr direccin del primer nodo
de la lista.
J. 0ada nodo de la lista lo identi$ca su 3(-E00(,* en memoria Ej.:
7, C, ;.
=. En el ejemplo anterior:
= se llama predecesor de &
L se llama sucesor de &
= y &5 L y &: son nodos /3E/0E*TE.
I. e cumple LinY=!F& y LinY&!FL
R. !os nodos en una lista lineal enla)ada no necesariamente tiene
sus nodos almacenados secuencialmente esto signi$ca dos
cosas: 46 dos nodos adyacentes en la lista pueden ocupar
direcciones distantes de memoria. K6 El orden de los nodos en la
lista no necesariamente es el orden fOsico en almacenamiento.
L. El primer nodo de la lista es el de direccin (tr y el &ltimo es
aquel cuyo enlace o !inF en n"ll o nil% En nuestro ejemplo el
&ltimo nodo es L y por tanto LinYL! F n"ll.
<. +uncin de acceso: 7ara acceder un nodo en una !(T/ !(*E/!
E*!/P/3/ 5!!E6 no se puede hacer directamente se debe iniciar
desde la cabe)a 5ptr6 en forma secuencial a trav2s de los enlaces
5!inF6.
4N. Una lista lineal enla)ada se nota: LLE(tr!%
44. 7ara cualquier proceso en una LLE *, E .,>E-/
(*+,-./0(,* solo se cambiar'n /7U*T/3,-E5!inF o enlaces6.
4K. Una LLE est' >ACIA si y solo si &TRFNULL5 por tanto
cuando se de$ne una LLE se coloca 7T- en *U!!.
&ED&ESA&
G%$%$4%O&ERACIONES &RIMITI>AS CON LISTAS LINEALES ENLA8ADAS LLE!%
!as operaciones primitivas o b'sicas con LLE son las siguientes:
CREAR una LLE%
INCLUIR o INSERT de un nuevo *,3, de direccin T en una
LLE%
CANCELAR o REMO>E un *,3, dado de la LLE5 cuya
direccin es L o de informacin INF.
CONSULTAR o >ISITAR un nodo de la LLE conocida su direccin
L o su informacin INF%
CONCATENAR dos o m's LLE%
ROM&ER una LLE en sublistas.
ORDENAR una LLE%
&ED&ESA&
G%$%$$%MANEIO DEL ES&ACIO DIS&ONI3LE
0omo se vio, para !! el espacio disponible 5A>AIL6 se asigna para
toda la lista, por c'lculo del .'ximo n&mero de nodos que
almacenar' la lista% e igualmente se LI3ERA todo el espacio
asignado para la lista.
7ara el caso de LLE la manera de adquirir memoria se hace por
0/3/ *,3, que se vaya a incluir en la lista y en la misma forma
se libera memoria por cada nodo que se retire de la lista.
En forma AL6ORTTMICA estas operaciones se denotan asO:
!,0/!(0E 576 &: >ariable pointer que indica la direccin de
memoria asignada para el nodo
!(AE-/- 576 &: >ariable pointer que indica la direccin de
memoria que libera al retira nodo de la lista.
En 0@@ las dos operaciones ser'n:
/signacin: 7W ne. T(7,%

En donde tipo se re$ere a la clase de informacin a almacenar en
cada nodo 5int, Soat, registro etc.6
!iberar memoria: Delete 7%
0uando nuestros programas tienen muchas adiciones y retiros
5(nsert, -emove6 con frecuencia los procesos de !,0/!(0E E
!(AE-E hace ine$ca) el procedimiento, se usa entonces, seguir la
pista de los nodos eliminados 5removidos6 para reutili)ar el espacio
que ocupaban, para nuevos nodos que se requieran% esto lo
podemos hacer tomando sus direcciones y ligarlas en una !!E la
cual llamamos LISTA DE ES&ACIOS DIS&ONI3LES que se
identi$ca como un conjunto de bloques 5*,3,6 vacOos de
memoria.
!a gr'$ca siguiente muestra la !(T/ 3E E7/0(, 3(7,*(A!E.
i no se ha eliminado ning&n nodo se dice que la lista de espacios
disponibles es vacOa y por tanto
/>/(!W*U!!.
NOTAS MUY IMPORTANTES. NOTAS MUY IMPORTANTES.
En 0@@ en NULL es 0E-,.
/>/(! *ull indica lista de espacios disponible vacia en
algoritmos, y
/>/(!WN% ?? indica lista de espacios disponibles vacOa en 0@@.
0uando se desee crear un nuevo nodo en la !!E debemos
intentar primero extraer del espacio disponible la memoria que
se necesite para el nodo a agregar o insertar. olo hacemos
!,0/!(0E sO />/(!W*U!!.
0uando un nodo se elimine de la lista, su direccin debe ligarse
a la !(T/ 3E E7/0(, 3(7,*(A!E.
/l tiempo de creacin de la lista />/(! *U!!, solo habr' por lo
menos 4 nodo en la !(T/ 3E E7/0(, 3(7,*(A!E si se ha
hecho remove o cancelaciones de nodos de la lista.
e debe entonces crear nuestros propios procedimientos de
!,0/!(P/- *,3, y !(AE-/- *,3,.
&ED&ESA&

n!ll
A<ail
G% #% G% #% STAC; O &I LAS ENLA8ADAS STAC; O &I LAS ENLA8ADAS
7ara que una LLE funcione como una &ILA o STAC; se debe crear
de forma que la 3ASE sea NULL y el TO&E sea la cabe)a de la
lista, como se puede observar en la siguiente representacin
gr'$ca:
/l tacF o 7ila la identi$ca &nicamente la direccin de la cabe)a de
lista que es el TO&E% !a pila se dice >acOa si TO&E F NULL%
!as ,peraciones con 7(!/ E*!/P/3/ son las mismas que para
7(!/ almacenadas secuencialmente, es decir, (*0!U(- 57U96 y
0/*0E!/- 57,76. !as dem's se hacen por combinacin de estas
5T/0BT,76.
7asos algorOtmicos 8enerales para las ,peraciones 7U9 y 7,7.
&USA &O&
!ocalice 576
(nfo 576 (nf
!inF5p6 Tope
Tope 7
(nf (nfo5tope6
7 Tope
Tope !inF5Tope6
!iberar 5p6
7ara de$nir inicialmente un 7ila Enla)ada se hace: To(e N"ll%
Una 7ila llega nuevamente a >acOo cuando Tope sea nuevamente
n"ll%
In$ (Tope) lin.(Tope)

n!ll
.o#e
0ase=n!ll
S(Tope)
&ED&ESA&
G% ,% G% ,% COLAS O =UEUE ENLA8ADAS COLAS O =UEUE ENLA8ADAS
!a cola o queue la identi$can los apuntadores To(e : 3ase5 que
son las direcciones del &ltimo nodo y del nodo cabe)a de la lista
respectivamente.
En una cola o ="e"e !/ Aase tiene informacin, es un nodo de la
lista.
!as operaciones b'sicas son las mismas de$nidas para colas
almacenadas secuenciales:
INSERT < REMO>E.
INSERT (or To(e REMO>E (or 3ase
localice 576
(nfo576 (nf
!inF5tope6 7
Tope 7
!inF5tope6 null
(nf (nfo5Aase6
7 Aase
Aase !inF5base6
libere 576
!a cola se de$ne colocando inicialmente To(eFn"ll : 3aseFn"ll%
!a cola regresa nuevamente a >acOo si y solo si 3ase F n"ll5 en
tal caso se hace simult'neamente To(eFn"ll% Esto signi$ca que la
cola es vacOa sO To(eFn"ll : 3aseFn"ll%
In$ (Base) lin.(Base)

In$o(Tope) n!ll
0ase .o#e
+(Tope9 Base)
El no+o +el To(e es el &ltimo nodo incluido en la lista y el no+o
+e la 3ase es el prximo nodo a remover o cancelar de la lista.
Tambi2n se puede (nsertar por Aase y eliminar por Tope.
i se tienen las cuatro operaciones:
(nsertar por Aase y Tope
cancelar por Aase y Tope
!a Cueue o cola se convierte en U*/ 3,A!E 0,!/ o 3ouble Cueue
y se identi$ca asO: 3C5Tope, Aase6.
G% 0% G% 0% LI STAS ENLA8ADAS CI RCULARES LI STAS ENLA8ADAS CI RCULARES
!as caracterOsticas b'sicas de una !(T/ E*!/P/3/ 0(-0U!/-
5!E06, son:
!a identi$ca el ptr LEC &TR!%
*ing&n nodo de la lista tiene enlaces 5!inF6 nulos 5null6, todos
son direcciones v'lidas.
El apuntador externo o cabe)a de lista (tr es la direccin del
d&ltimo nodo insertadoU en la lista 5nodo a derecha6 lo cual
permite acceder f'cilmente a los dos extremos de la lista.
LinY(tr! es la direccin del primer nodo insertado en la lista.
/ diferencia de las !!E, en una !E0 partiendo de cualquier nodo
;. e puede recorrer 5visitar6 todos los nodos de la lista.

In$o(ptr)
4ink(#tr) #rimer nodo
(tr ltimo nodo
I?8!ierda derecAa
0uando una !E0 es vacOa &trFn"ll5 Es la forma de de$nir o
iniciali)ar una !E0. El &tr solo vuelve a null cuando la !E0 queda
vacOa.
FUNCION DE ACCESO: 7ara recorrer, accesar, consultar o
visitar todos los nodos de una !E0 se parte del (tr y el proceso
de accesar todos los nodos termina cuando se regresa
nuevamente al (tr%
TODO NODO en una !E0 tiene un predecesor y un sucesor
incluido el primer nodo de la lista.
!a !(T/ 3E E7/0(, 3(7,*(A!E puede construirse como una
!!E o como !E0. e aconseja por mayor facilidad la primera.
&ED&ESA&
G%0%,% O&ERACIONES &RIMITI>AS CON LISTAS ENLA8ADAS CIRCULARES LEC!
!as operaciones primitivas o b'sicas con LEC son las siguientes:
CREAR una LEC
INCLUIR o INSERT de un nuevo *,3, de direccin T en una
LEC%
CANCELAR o REMO>E un *,3, dado de la LEC5 cuya
direccin es L o de informacin INF.
CONSULTAR o >ISITAR un nodo de la LEC conocida su direccin
L o su informacin INF%
CONCATENAR dos o m's LEC%
ROM&ER una LEC en sublistas.
ORDENAR una LEC%
&ED&ESA&
G%0%0% FUNCIONAMIENTO DE UNA LISTA ENLA8ADA CIRCULAR COMO &ILA5 COLA5
DCOLA%
Una lista enla)ada circular, la podemos 7,*E- / +U*0(,*/- como:
7ila o stacF enla)ada circula MM sec.
0ola o queue enla)ada circula MMqec.
3oble cola o double queue enla)ada circular k dqec.
&ED&ESA&
G%0%1% ES=UEMA 6RaFICO DE UN LEC &ARA =UE &UEDA FUNCIONAR COMO SEC5 =EC O
D=EC%
/quO se cumple que: Aase W !inF5Tope6
!a lista enla)ada circular de$nida como se muestra en la gr'$ca
anterior, +U*0(,*/ 0,., U*/ 7(!/ , T/0B E*!/P/3/ 0(-0U!/
5E06 sO:
a6 (ncluimos 57ush6 y 0ancelamos 57op6 por Tope.
b6 (ncluimos 57ush6 y 0ancelamos 57op6 por Aase.
!a lista enla)ada circular de$nida como se muestra en la gr'$ca
anterior, +U*0(,*/ 0,., U*/ 0,!/ , CUEUE E*!/P/3/
0(-0U!/ 5CE06 sO:
a6 (ncluimos 5(nsert6 por Tope y 0ancelamos 5remove6 por Aase
b6 (ncluimos 5(nsert6 por Aase y 0ancelamos 5remove6 por Tope
!a lista enla)ada circular de$nida como se muestra en la gr'$ca
anterior, +U*0(,*/ 0,., U*/ 3,A!E 0,!/ , 3,UA!E CUEUE
E*!/P/3/ 0(-0U!/ 53CE06 sO:
In$o(Base)

/-F,(.,())
BASE P&IME& NODO
TOPE GLTIMO NODO
/A;1/)*>A >)*)2@A
a6 (ncluimos 5(nsert6 y cancelamos 5remove6 por Tope e incluimos
5insert6 y 0ancelamos 5remove6 por Aase
b6 !istas con nodo de encabe)amiento 5leer6.
&ED&ESA&
G% 1% G% 1% LI STAS LI NEALES DO3LEMENTE ENLA8ADAS% LLDE! LI STAS LI NEALES DO3LEMENTE ENLA8ADAS% LLDE!
Una de las de$ciencias de las !!E y !E0 es que solo se pueden
consultar sus nodos o recorrer la lista en un solo sentido.
En caso que se requiera la Sexibilidad de recorrer la lista en ambos
sentidos es necesario de$nirla como U*/ !(T/ !(*E/!
3,A!E.E*TE E*!/P/3/ cuya estructura es:
&ED&ESA&
G%1%,% CARACTERISTICAS 3ASICAS DE UNA LISTA LINEAL DO3LEMENTE ENLA8ADA
LLDE!%
&tr: Es una variable pointer que almacena la direccin de
memoria del primer nodo de la lista. Es llamado no 0abe)a de
lista o Encabe)ado.
Una lista lineal doblemente enla)ada es >ACIA sO y solo sO &tr
n"ll% 7ara de$nir la !!3E se pone &tr n"ll%
!as !!3E se identi$can por el 7tr y se nota asO: !!3E 57tr6
!a estructura de todo nodo de en una !!3E debe tener por lo
menos G campos y es de la forma:
4link (() /n&o(() *link (()
(
&: 3ireccin Efectiva en memoria del nodo, todo nodo se identi$ca
por su direccin en memoria, por tanto este serOa el *,3, 7.
INFO&!: Es la informacin o contenido del nodo 7 que puede ser
5Entero, -eal, registro etc.6.
RlinY &!: >ariable pointer o enlace derecho, contiene la direccin
del sucesor de 7 en la !!3E.
LlinY &!: >ariable pointer o enlace i)quierdo, contiene la direccin
del predecesor de 7 en la !!3E.
En la gr'$ca de arriba, C es el predecesor de 7 y ; es el sucesor de
7.
in embargo aquO el predecesor y sucesor no tienen signi$cado ya
que la lista es d(.ET-(0/e, es decir se puede viajar en ambas
direcciones 5/puntadores en ambas direcciones6, luego estos
t2rminos dependen del sentido en que se visiten los nodos.
!as !!3E se puede recorrer en ambas direcciones y un nodo se
puede (ncluir o 0ancelar dando un solo puntero de la lista.
El LlinY &tr! n"ll y RlinY Ultimo No+o! n"ll
En una lista !!3E se cumplen las siguientes propiedades:
!!(*B 576WC y -!(*B5C6W7 e deduce entonces que -!(*B5!!(*B5766W7
-!(*B576W; y !!(*B5;6W7 e deduce entonces que !!(*B5-!(*B5766W7
7ara accesar cualquier nodo de la lista, se debe hacer
secuencialmente iniciando desde el 7tr
*odos consecutivos, por enlaces, en la lista pueden estar en
posiciones distintas en memoria y su orden en la lista es
diferente de su orden en memoria 5almacenamiento6.
7ara hacer operaciones de insercin, eliminacin etc., no se hace
movimiento de informacin, solo se cambian apuntadores.
*o usar listas lineales doblemente enla)adas sO: 46 es necesario
mucho almacenamiento, K6 i el recorrido de la lista en ambos
sentidos no es continuo. G6 i la lista es corta.
El />/(! para un !!3E puede ser construido como una !!E o !!3E
pero los nodos con la misma con$guracin que los de la lista 5con
los mismos campos6.
&ED&ESA&
G%1%0% O&ERACIONES &RIMITI>AS CON LISTAS ENLA8ADAS CIRCULARES LLDE!
!as operaciones primitivas o b'sicas con LLDE son las siguientes:
CREAR una LLDE
INCLUIR o INSERT de un nuevo *,3, de direccin T en una LLDE%
CANCELAR o REMO>E un *,3, dado de la LLDE5 cuya
direccin es L o de informacin INF.
CONSULTAR o >ISITAR un nodo de la LLDE conocida su
direccin L o su informacin INF%
CONCATENAR dos o m's LLDE%
ROM&ER una LLDE en sublistas.
ORDENAR una LLDE%
&ED&ESA&
G%1%1% RESUMEN 6ENERAL DE LAS O&ERACIONES DE INSERT < REMO>E EN UNA LLDE%
O&ERACIN ACCION RESUMEN DE
INSTRUCCIONES
(nsert (ncluir nodo T antes del *odo ; -linF5T6 ;
!linF5T6 !linF5;6
-linF5!linF5;66 T
!linF5;6 T
(nsert (ncluir nodo T despu2s del *odo ; !linF5T6 ;
-linF5T6 -linF5;6
!linF5-linF5;66 T
-linF5;6 T
-emove 0ancelar el *odo ; -linF5!linF5;66 -linF5;6
!linF5-linF5x66 !linF5;6
-emove 0ancelar el *odo a !a i)quierda del
*odo ;
!linF5;6 !linF5!linF5;66
-linF5!linF5!linF5;666 ;
-emove 0ancelar el *odo a la 3erecha del
*odo ;
-linF5;6 -linF5-linF5x66
!linF5-linF5-linF5;666 ;
ANELOS% AL6ORITMOS
O&ERACIONES CON LISTAS LINEALES SECUENCIALES
4. INICIALI8ACIN DE LA LISTA%
3e$nicin de la estructura de cada nodo.
Ejemplo: no+o a
int (nfo%
c%
3e$nicin del espacio disponible 5/>/(!6: se debe tener en cuenta
el m'ximo n&mero de nodos a almacenar simult'neamente en
memoria 5uso de una variable n6.
A8$il lo#$li/$r (1o+o2 1)9
en c@@
/vailW ne. nodo\n]
3eterminar a trav2s del />/(! las direcciones .in y .ax de
almacenamiento 3isponible, para almacenar la lista y la direccin
de !o. 7ara ello se tiene
!o /vail .in !o FWN 5*&mero de nodos de la lista6 !F !o
Llamar rutina que calcule el .ax.
Calc"lo M mcKimo A)ail5 n!
max /vail
para iW4,n
maxmax@l
fpara
retorne max
#% CREACION DE LA LLS% NODO A NODO
CREARbNODObLLS5!F, F, .ax, inf6
!F !F @ l
si 5!F ^ .ax6
escriba dnodo no se puede incluirU
sino
F F@4
(nfo5!F6(nf
fsn
retornar
,% RUTINA DE 3US=UEDA DE UN NODO EN UNA LISTA
3"sB"e+aMno+o Lo5 LY5 in-5 Li5 i!
WW los )alores +e la bRsB"e+a se +e)"el)en en Li e i
!i !o @ l
iW4
.q 5!i` !F an+ (nfo5!i6nW(nf6
!i !i@l
iWi@4
+mq
si 5(nfo5!i6nW(nf6 entonces
!iW!F@l
fsi
retorne
0% INSERTAR UN NUE>O NODO EN UNA LLS DES&UES DE
OTRO CON INFO CONOCIDA
insertarMno+o !o, !F, F, .ax, .in, (nf6
busquedabnodo 5 !o, !F, inf, !i, i6
si 5!i^!F6
Escriba dno (nsertar M nodo no encontradoU
sino
si 5i `FMi6 entonces
si 5!oW.in6 entonces
escriba dno se puede incluirqUnderSo#U
si 5!FW.ax6 entonces
escriba dno se puede incluirq,verSo#U
sino
corrimientobderecho5.ax, !F, !i6
!FW!F@l
!i!i@l
(nfo5!i6(nf
F F@4
fsn
sino
corrimientobi)quierdo5.in, !o, !i6
!oW!oMl
(nfo5!i6 (nf
F F@4
fsn
sino
si 5!FW.ax6 entonces
escriba dno se puede incluirq,verSo#U
si 5!oW.in6 entonces
escriba dno se puede incluirqUnderSo#U
sino
corrimientobi)quierdo5.in, !o, !i6
!oW!oMl
(nfo5!i6(nf
F F@4
fsn
sino
corrimientobderecho5.ax, !F, !i6
!FW!F@l
!i!i@l
(nfo5!i6(nf
F F@4
fsn
fsn
fsn
retorne
corrimientoMiSB"ier+oMin5 Lo5 Li!
!4!o
99 5!KW!i6
!K!4@l
(nfo5!46(nfo5!K6
!4!K
+99
retorne
corrimientoM+erec9oMaK5 LY5 Li!
!4!F@4
!K!4Ml
.q 5!K^!i6
(nfo5!46(nfo5!K6
!4!K
!K!KMl
+mq
retorne
1% CANCELACION DE UN NODO EN UN LLS CON
INFORMACION DADA CONOCIDA!%
CancelacionMNo+oLo5 LY5 Li5 Y5 in-!
busquedabnodo 5 !o, !F, (nf, !i, i6
si 5!i^!F6 entonces
escriba d*odo no encontradoU
sino
si5i`FMi6 entonces
!i!iMl
corrimientobderecho5.ax, !i, !o6
FFM4
!o!o@l
sino
corrimientobi)quierdo5.in, !i, !F6
!F!FMl
FFM4
fsn
fsn
retorne
&ED&ESA&
: . : . ARBOL E S ARBOL E S
!os 'rboles son estructuras de datos no lineales, que son de gran
importancia y uso en el desarrollo de soft#are en procesos
inform'ticos 5por ej. .anejo de Ondices en tablas en bases de datos,
manejo de almacenamiento de memoria etc.6
En general, una ET-U0TU-/ 3E 3/T, E* /-A,! signi$ca una
relacin de rami$cacin entre nodos de informacin, como se ve
en los 'rboles de la naturale)a.
&ED&ESA&
$4% G $4% G DEFI NI CI ON DE AR3OL TREE! DEFI NI CI ON DE AR3OL TREE!
Un 'rbol 5Tree! es un conjunto $nito T de uno o m's nodos de
informacin tales que:
a6 9ay un *odo especial llamado -/(P de T, y
b6 !os nodos restantes 5excluyendo la -aO)6 est'n agrupados en
mN conjuntos disjuntos T4,TK,...,Tm y cada uno de estos
conjuntos es, a su ve), un 'rbol. !os 'rboles T4, TK,...,Tm se
llaman subarboles de la raO). 5de$nicin recursiva6.
&ED&ESA&
@% $% @% $% RE&RESENTACI ON 6RAFI CA DE UN AR3OL RE&RESENTACI ON 6RAFI CA DE UN AR3OL
9ay varias formas de representar un 'rbol gr'$camente, pero las
m's usada por comodidad de lectura e interpretacin es la
mostrada en la +igura 4.
FI6URA $% -epresentacin gr'$ca de un 'rbol.
&ED&ESA&
@% #% @% #% CONSI DERACI ONES 3ASI CAS SO3RE AR3OLES CONSI DERACI ONES 3ASI CAS SO3RE AR3OLES
Todo *,3, en un 'rbol costa de los elementos que se describen
en la +(8U-/ K.
0ada nodo de un 'rbol es la raO) de alg&n sub'rbol contenido en
la totalidad del mismo.
!as diferentes formas de gra$car un 'rbol se muestran en la
+(8U-/ G. 7ero adoptaremos la forma de la +(8U-/ 4.
A
B
C D
E / D
.
.
1
.
2
.
3
.
11
.
12
.
31
*A/A
Nivel (
Nivel )
Nivel *
APUNTADO&ES
IN/O(T)
.
.......
Direcci%n en memoria
del Nodo
FI6URA #. Elementos de un *odo de un 'rbol.
FI6URA ,. 3iferentes formas de gra$car un 'rbol.
A
B
C D
E / D
.
.
1
.
2
.
3
.
11
.
12
.
31
*A/A
A
B
C
D
E
/
D
.
.
1
.
2
.
3
.
11
.
12
.
3
1
*A/A
A
B
C
D
E
/
D
.
.
1
.
2
.
3
.
11
.
12
.
31
*A/A
8-/3, 3E U* *,3, E* U* /-A,! : Es igual al n&mero de
enlaces 5!inF6 que salen del nodo , es decir es el n&mero de
sub'rboles del nodo. El grado de un nodo se denota asO :
6rT!F d +e LinY B"e salen +e T
o
6rIn-oT!!F d +e LinY B"e salen +e T
Ej. : 7ara el 'rbol dado las +iguras 4 o G. 6rT!F , 6rT
$
!F#
6r6!F4
0u'l es el grado de : TK, TG, + m.
En un 'rbol se distinguen dos clases de *,3, : a6 NODOS
RAMAS : Un *odo Tj es una -ama o *odo (nterior si 8r5Tj6 `^ N.
Tambi2n se le denomina nodo no terminal b6 NODO AOIA : Un
*odo Tj es una hoja o nodo Terminal si 8r5Tj6WN. Ejercicio :
0uales son nodos rama y cuales nodos hoja en el 'rbol de la
+igura 4 m.
Ni)el +e "n No+o : El nivel de un *,3, respecto de la raO) T
se de$ne diciendo que la raO) tiene nivel N y los otros nodos
tienen un nivel ./E,- E* 4 , al que tiene la raO) del sub'rbol Tj
que lo contiene. 5>er +igura 46.
NOTACION DE AR3OL < SU3AR3OL : Una de las notaciones
m's comunes usadas es la notacin de conjuntos 5conjuntiva6.
Ej. : Escribir con notacin de conjunto el 'rbol de la $gura 4, y
todos los sub'rboles.
/rbol: -aO) / con sub'rboles aA,E,+c, a0c, a3,8c
ub'rboles: -aO) A con ub'rboles aE,+c
-aO) 3 con sub'rboles a8c
ejercicio : dado el 'rbol cuya raO) es / con sub'rboles aAc,
a0,3,E,+,8c, ub'rboles: raO) 0 con sub'rboles a3,E,+,8c,
-aO) + con sub'rboles a8c
0ada *,3, -/./ o nodo interno es a su ve) raO) de un 'rbol
5sub'rbol6.
i el orden -E!/T(>, de los sub'rboles T4, TK,... Tm en un 'rbol
dado de raO) T es importante , decimos que es un 'rbol
,-3E*/3, o 'rbol de *(>E! puesto que condiciona el orden de
colocar los nodos en su nivel, para m^WK 5m : n&mero de
sub'rboles6 en un 'rbol ordenado entonces tiene sentido decir
que T4 dprimer sub'rbolU de T, TK dsegundo sub'rbolU de T etc.
i dos 'rboles se diferencian solo por la ordenacin respectiva de
los nodos de los sub'rboles ,y no se considera el ,-3E* , se les
llama 'rboles ,-(E*T/3,.

En nuestro estudio consideraremos 'rboles ,-3E*/3,.
&ED&ESA&
@% ,% @% ,% 3OS=UES O AR3OLEDAS 3OS=UES O AR3OLEDAS
Un bosque o arboleda es un conjunto, normalmente ordenados, de
cero o m's 'rboles disyuntos.
7odOamos decir que los nodos de un 'rbol excluyendo la raO) forman
un bosque
7or tanto dado un 'rbol de raO) T con sub'rboles T4, TK, ....Tm, se
puede decir que es un A,CUE de m 'rboles o es un 'rbol de m
raOces.
U* /-A,! si se excluye la -aO) es un A,CUE
U* A,CUE si se le aHade un *,3, es un /-A,!.
0onsiderando la +(8U-/ J.
FI6URA 0. Ejemplo de /rbol
El 'rbol de la $gura J se puede transformar en una /rboleda o
A,CUE quitando la -aO), esto se muestra en la +(8U-/ =.
.
22
.
21
D
.
231
A
B
E
C
E
D
/
.
.
1
.
2
.
11
.
23
*A/A
-aO) / aA, ;c, a0, 3, E, +, 8c
A es padre de 3 : C
3 : C son hijos de A
3 y C son 9ermanos
A no tiene padre
e Utili)an tambi2n las palabras
ANTE&ASADO y DESCENDIENTE
pueden abarcar varios niveles
del 'rbol.
Ej.: 3escendencia de 0: 3, E, +,
8%
/ntepasados de 8: /, 0, +.
FI6URA 1% /rboleda o Aosque
&ED&ESA&
@% 0% @% 0% NOTACI ONES DE AR3OLES NOTACI ONES DE AR3OLES
Existen b'sicamente J formas de notacin para representar un
'rbol, estas son :
/6 NOTACION DE DE'E< : Equivale a la notacin usada para
dividir el contenido de un libro, en capitulo, temas y subtemas
esta notacin es : 4, 4.4, 4.K,4.G, 4.4.4, etc.
E:E.7!,
4. Escribir en notacin de 3E"EE el 'rbol de la +(8U-/ =.
4,/ % 4.4,A %4.4.4 %; %4.K,0 %4.K.4,3 %4.K.K,E %4.K.G,+ %4.K.G.4 %8
B
E
C
E
D
/
.
1
.
22
.
2
.
11
.
21
.
23
D
.
231
Un bosque se denota
como: F T
$5
T
#
!%
En general dado un
bosque formado por T4,
TK,..., Tm arboles se
denota como:
FT
$
5 T
#
5 T
,
5 %%%Tm!%
K. Escribir en notacin de 3E"EE el bosque de la $gura =.
4,A% 4.4% ;% K, 0% K.4, 3% K.K, E% K.G, +% K.G.4,8.
A6 NOTACION &OR CONIUNTOS ANIDADOS : e describe el
'rbol usando los conceptos de subconjunto, en donde se
considera que los sub'rboles son subconjuntos de su raO).
E:E.7!, : Escribir en notacin de 0,*:U*T, /*(3/3, el 'rbol
de la +(8U-/ J.
06 NOTACION &OR &ARENTESIS ANIDADOS: e hace encerrando
los nodos en par2ntesis anidados, considerados estos de
()quierda a 3erecha.
E:E.7!,: Escribir en notacin de 7/-E*TE( /*(3/3, el 'rbol de
la +(8U-/ J.
A3L!!5CD5E5F6!!!!
A
B
E
C
D
E
/
D
36 NOTACION USANDO 3ARRAS o DIA6RAMAS DENTADOS:
La mejor forma de entender y visuali)ar esta notacin es
haciendo el diagrama a trav2s de un ejercicio.
E:E.7!,: Escribir en notacin de A/--/ el 'rbol de la +(8U-/ J.
&ED&ESA&
1 ; . 1 ; . ARBOL E S BI NARI OS ARBOL E S BI NARI OS
$4% @ $4% @ DEFI NI CI ON DE AR3OL 3I NARI O DEFI NI CI ON DE AR3OL 3I NARI O
A
B
E
C
D
E
/
D
Un 'rbol binario se de$ne como un 0,*:U*T, +(*(T, de *,3,
que est' >/0(,, o se compone de una raO) y de dos 'rboles binarios
disyuntos, llamados sub'rboles derecho e i)quierdo de la raO).
!a +(8U-/ I. .uestra varios ejemplos gr'$cos de 'rboles binarios.
FI6URA 2% Ejemplos b'sicos de 'rboles binarios
RE6RESAR RE6RESAR
A
B
C
.
.
1
T
*
S!<=r<ol
I?8!ierdo
S!<=r<ol
DerecAo
A
B
C
.
.
1
T
*
D
T
*)
E
T
**
A
T
A
B
.
.
1
A
B
.
T
)
A
B
.
T
)
No es !n =r<ol
<inario
(a) (<)
(c)
(d)
(e)
($)
$4% $% $4% $% CONSI DERACI ONES < CONCE&TOS DE AR3OLES CONSI DERACI ONES < CONCE&TOS DE AR3OLES
3I NARI OS 3I NARI OS
/rbol y 'rbol binario son dos conceptos diferentes. Es decir un
'rbol binario no es un caso especial de 'rbol, es otro concepto.
Un 'rbol binario se notar' y se identi$car' mediante la forma
siguiente: 3T! T : Es la +irecci/n +e la
rabS%
Un 'rbol binario en (ngles Ainary Tree de ahO la notacin A5T6,
tambi2n se les denomina 'rboles 3 o AMTree.
En un 'rbol binario: el sub'rbol derecho y el sub'rbol i)quierdo o
ambos pueden ser vacOos.
En un 'rbol binario 7ara Todo Tj se cumple que
6rin-oT*!!F45$5# %
En un 'rbol binario T,3, *,3, tiene U*(0/.E*TE :
3E0E*3(E*TE 3E-E09, E 3E0E*3(E*TE (PCU(E-3,.
Un 3T! es vacOo si T N"ll%
!/ (*+,5Tj6 en un A5T6 puede ser de igual o diferente tipo para
cada Tj. !os 'rboles con diferente info5Tj6 se llaman 'rboles
Ainarios 9ETE-,8E*E,.
!os 'rboles binarios se usan en muchos problemas como por
ejemplo: AUCUE3/ 3E (*+,-./0(,*, -E7-EE*T/0(,* 3E
E;7-E(,*E ./TE./T(0/ 0,* ,7E-/3,-E A(*/-(,,
0-(7T,8-/+(/, E>/!U/0(,* 3E E;7-E(,*E ./TE./T(0/
0,* ,7E-/3,-E A(*/-(,, 0!/(+(0/0(,* U ,-3E*/.(E*T,.
(*3E;/.(E*T, E* A/E 3E 3/T,, ET0.
En algunas aplicaciones de 'rboles las hojas se simboli)an con
un rect'ngulo, ver +igura R.
FI6URA ?. Ejemplo de 'rbol Ainario
-E8-E/-
$4% #% $4% #% AR3OLES 3I NARI OS COM&LETOS DE NI >EL N AR3OLES 3I NARI OS COM&LETOS DE NI >EL N
Un A5T6 cuando todas las hojas son de nivel * y cada nodo de nivel
menor a * no tiene sub'rbol derecho o i)quierdo igual a vacOo. !a
$gura L muestra un 'rbol completo de nivel K.
FI6URA G. Ejemplo de Un 'rbol completo de *ivel K.
A
B
C
.
.
1
T
*
D
T
*)
E
T
**
/
D
H
I
T
))
T
*)) T
**)
T
***
.
A
B /
.
1
T
*
E
T
*)
D
T
**
D
T
)*
C
T
))
A
.
.1 T*
FI6URA @% Ejemplos de /rboles Ainarios
-E8-E/-
$4% ,% $4% ,% AR3OL 3I NARI O CASI COM&LETO AR3OL 3I NARI O CASI COM&LETO
B
/
E
T))*
D
T)*
C
T))
A
B
C
.
.1
T*
I
T))*
E
T)*
D
T))
H
T)))
/
T*)
D
T**
I
T*))
J
T*)*
A
B
C
.
.
1
T
*
I
T
))*
E
T
)*
D
T
))
H
T
)))
/
T
*)
D
T
**
Se +ePne "n 3T! casi completo como un 'rbol estrictamente
binario para el cual existe un n&mero entero positivo Y tal que :
* W Ultimo nivel , BW*M4 , B@4W*.
$%0ada hoja en el 'rbol est' a un nivel F o a un nivel F@4
#%i un nodo en el 'rbol tiene un descendiente derecho al nivel
F@4 entonces todos sus descendientes i)quierdos que son hojas
est'n tambi2n al nivel F@4.
El 'rbol de la $gura <.a. no es un 'rbol binario casi completo
porque tiene hoja en los niveles 4,K,G se viola la condicin 4.
El 'rbol de la $gura <.b. cumple con la condicin 4, tiene hojas en
los niveles K 5Y! E G 5Y+$! 5 pero viola la condicin K, ya el nodo /
tiene descendientes derechos 5: y B6 en el nivel G 5Y+$! pero tiene
un descendiente i)quierdo 5E6 que es hoja en el nivel K 5Y! .
El 'rbol de la $gura <.c. si cumple las dos condiciones luego es un
'rbol binario casi completo.
-E8-E/-
$4% 0% $4% 0% RE&RESENTACI ON DE UN AR3OL 3I NARI O EN RE&RESENTACI ON DE UN AR3OL 3I NARI O EN
ALMACENAMI ENTO MEMORI A! ALMACENAMI ENTO MEMORI A!
!a forma m's com&n de almacenar un 'rbol en memoria es en
forma E*!/P/3/.
0ada nodo de un 'rbol binario en memoria contiene por lo menos
G campos 5es el caso m's general6 que son dos E*!/0E 5sub'rbol
()quierdo y 3erecho6 y la informacin del nodo. En la +(8U-/ 4N se
muestra la representacin de cada nodo.
LLINJ(TK) IN/O(TK) &LINJ(TK)
TK
FI6URA $4. -epresentacin en memoria de un nodo de un 'rbol binario.
En donde:
T*: Es la direccin de memoria 5almacenamiento6 de nodo, es una
variable 7,(*TE-.
LLIN;T*! : Es la direccin de memoria del sub'rbol i)quierdo de
T*%
RLIN;T*! : Es la direccin de memoria del sub'rbol derecho de T*%
E*em(lo: En la +(8U-/ 44 e muestra un 'rbol binario y su
representacin en memoria.
0omo se observa en la $gura 44. !os nodos hoja en la
representacin en memoria de un 'rbol binario tienen enlaces
nulos.
FI6URA $$% /rbol Ainario y su representacin en .emoria.
A
B C
.
.
1
T
*
/
T
))*
E
T
)*
D
T
))
A
B C
D E
/ =n!ll
.
i un Xrbol binario es completo se puede almacenar como una lls
5lista lineal secuencial6. 7or ejemplo el 'rbol de la $gura L. e
podrOa almacenar como se muestra en la +(8U-/ 4K.
FI6URA $#% -epresentacin en almacenamiento de un 'rbol
completo como una lls.
3e la $gura 4K. e puede abstraer que :
!a -aO) se almacena en la direccin !
4
:W !o @ l donde l W
longitud en bytes de cada nodo.
!os dem's nodos se almacenan por niveles.
!a lista tendr' n n&mero de nodos que es igual al n&mero de
nodos del 'rbol.
i un *odo est' almacenado en la direccin !
F
5FW4..n6 donde n
W *&mero de nodos del 'rbol , su hijo ()quierdo estar' en la
direccin !
K_F
y su hijo derecho en la posicin !
K_F@4..
7or ejemplo
el nodo 3 ocupa la posicin !FWK, su hijo i)quierdo C esta en la
posicin !K_FW!K_KW!J y su hijo derecho D esta en la posicin
!K_F@4W!K_K@4W!=.
-E8-E/-
$4% 1% $4% 1% RECORRI DO DE UN AR3OL 3I NARI O RECORRI DO DE UN AR3OL 3I NARI O
El recorrido de un 'rbol binario, se re$ere al acceso a todos los
nodos del 'rbol.
El acceso o recorrido a todos los nodos se hace a partir de la raO) .
El recorrido debe hacerse de forma que el acceso o d>((T/U a cada
nodo debe reali)arse U*/ ,!/ >EP, para efectos de e$ciencia.
/ A B C D E D
Lo
9ay tres formas o m2todos para recorrer un 'rbol binario:
&REORDEN INORDEN
&OSTORDEN
T,3, !, G .ET,3, ,* 7-,0E3(.(E*T, -E0U-(>,.
-E8-E/-
$4%1%,%RECORRIDO DE UN AR3OL 3INARIO EN &REORDEN
El algoritmo para recorrer un 'rbol en preorden es:
4. >((T/- !/ -/(P
K. -E0,--E- E! UA/-A,! (PCU(E-3, E* 7-E,-3E* 5hasta
!linF576W*ull 7 :direccin del nodo visitado6
G. -E0,--E- E! UA/-A,! 3E-E09, E* 7-E,-3E* 5hasta
-linF576W*ull 7 :3ireccin del nodo visitado6.
E:E-0(0(,. >isitar en 7reorden los nodos los 'rboles de la +(8U-/<.
-E8-E/-
$4%1%0%RECORRIDO DE UN AR3OL 3INARIO EN INORDEN%
El algoritmo para recorrer un 'rbol en preorden es:
4. -E0,--E- E! UA/-A,! (PCU(E-3, E* (*,-3E* 5hasta
!linF576W*ull 7 :direccin del nodo visitado6
K. >((T/- !/ -/(P
G. -E0,--E- E! UA/-A,! 3E-E09, E* (*,-3E* 5hasta
-linF576W*ull 7 :3ireccin del nodo visitado6.
E:E-0(0(, .. >isitar en inorden los nodos los 'rboles de la +(8U-/
<.
-E8-E/-
$4%1%1%RECORRIDO DE UN AR3OL 3INARIO EN &OSTORDEN
El algoritmo para recorrer un 'rbol en preorden es:
4. -E0,--E- E! UA/-A,! (PCU(E-3, E* 7,T,-3E* 5hasta
!linF576W*ull 7 :direccin del nodo visitado6
K. -E0,--E- E! UA/-A,! 3E-E09, E* 7,T,-3E* 5hasta
-linF576W*ull 7 :3ireccin del nodo visitado6.
G. >((T/- !/ -/(P
E:E-0(0(, .4. >isitar en postorden los nodos los 'rboles de la
+(8U-/ <.
K. 9acer un algoritmo 5traduccin a 0@@6 que cree un 'rbol binario
y lo recorra 5mostrar por pantalla o imprimir6 visitando los nodos
en cualquiera de los tres m2todos.
El 'rbol debe cumplir con las siguientes caracterOsticas:
(*+,5Tj6 debe ser una letra may&scula.
!os valores menores que siempre deben estar a la derecha de la
raO) del 'rbol o sub'rbol donde se va a incluir el nodo
*o se aceptan valores repetidos en el 'rbol.
-E8-E/-
$4%1%2%A&LICACIN DE LOS AR3OLES 3INARIOS EN E>ALUACIN DE O&ERACIONES
AL6E3RAICAS 3INARIAS
-ecordando que toda expresin matem'tica binaria es de la forma :
O&ERANDO O&ERADOR O&ERANDO
A + 3
7ara representar una expresin algebraica que tiene operadores
binarios, la raO) del 'rbol y de los sub'rboles i)quierdo y derecho
se organi)an de tal manera que:
!a raO) contendr' un o(era+or que ser' aplicado a los
resultados de evaluar las expresiones representadas por los
sub'rboles i)quierdo y derecho.
Un nodo que representa un operador es una rama con los dos
sub'rboles no vacOos.
Un nodo que represente un operando es una hoja.
7ara la representacin en un 'rbol de una expresin matem'tica
se debe tener en cuenta la jerarquOa de las operaciones. Ej.

EIERCICIOS: representar como un 'rbol binario las siguientes
expresiones matem'ticas :
46 /@A K6 /@AM0 G6 /@A_0 J6/@5AM
06
7
A B
=6 5/@A6_0 I6 /@A__J M L_0 R6 / M A_0?3 @ E?+
L6 / M A_50?3 @ E?+6 <6 5/ M A_50?36 6@ E?+
!a $gura 4G muestra el 'rbol para el Kdo. Ejercicio propuesto
-E8-E/-
$4%1%?%AR3OL #
/rbolMK es un 'rbol binario donde todos los nodos rama son de
grado K. Es decir que todo nodo Tj en el 'rbol cumple que 6rT*!F4
6rT*!F#% Tambi2n se le denomina 'rbol estrictamente binario.
-E8-E/-
$%@%$ AR3OL 3INARIO ELTENDIDO
3ado un 'rbol binario cualquiera 3T!5 U E;TE*(,* se de$ne
como el 'rbol binario eT! formado a partir de 3T! agregando un
nuevo nodo a cada sub'rbol i)quierdo y derecho vacOo en 3T!%
eT! 'rbol binario extendido es un 'rbol estrictamente binario y
'rbolMK.
88
-
7
C
.
.
1
T
*
B
T
)*
A
T
))
FI6URA $,% -epresentacin de /@AM0 en 'rbol
Ainario.
-E8-E/-
$4%1%G%AR3OL 3INARIO DE 3VS=UEDA
Un 'rbol binario de AUCUE3/ se caracteri)a por :
Estar diseHado de tal forma que para todo no hoja 5rama y raO)6
en el 'rbol cumple : los nodos est'n ordenados
/0E*3E*TE.E*TE con respecto a un campo clave 5(*+,5Tj66 de
manera que el nodo a la i)quierda 5!linF5Tj66 contiene un valor
./ 7ECUEg, que el nodo que le apunta 5Tj6 y el nodo a la
derecha 5-linF5Tj66 contiene un valor ./ 8-/*3E.
En general la (*+,5Tj6 de cada nodo en un 'rbol binario de
AUCUE3/ son !!/>E de registros de alg&n archivo
5(*3E;/.(E*T,6.
E:E.7!,: suponga que se tiene un conjunto de registro de un
archivo de personas , que contiene los campos : 0,3(8,, *,.A-E,
TE!E+,*,. >er la +igura 4J. Cue muestra gr'$camente uno
cuantos registros de este archivo.
CODI6O NOM3RE TELEFONO
4J 7edro K4KNG=
4= 7ablo KGKN=N
J 0laudia 4KGJ=I
K /driana K4KGJ=
= :uli'n KGRN<L
< .anuel KGJ=IR
R -icardo 4KGJ=I
4L !eonis =IGJ=I
KN 0arlos GJ=IRL
FI6URA $0% -egistro de alg&n /rchivo de 7E-,*/!.
0onstruir el 'rbol de b&squeda para la informacin de este archivo
tomando como 0/.7, 0!/>E 50,3(8,6 y suponer que (*+, 5Tj6
del 'rbol E! 0/.7, 0!/>E y la posicin relativa de cada registro
en el archivo.
FI6URA $1% olucin del ejemplo
E:E-0(0(,. 9acer un programa para:
0rear una lista lls cuyos nodos contengan la siguiente
informacin :

C;d!la Nom<re s!eldo
)-L
)
- L 4 )3 L *
.
.
1
T
*
3 L 3
T
)*
* L -
T
))
0 L ,
2 L 2
)1 L 1
*( L 0
T
**
T
)**
T
)**)
T
***
0rearle el 'rbol binario de b&squeda a los registro de la lls,
considerando campo clave la c2dula y la posicin relativa de
cada nodo el la lls 5funcin de acceso en un lls6
0onstruir la b&squeda de cada nodo en la lls, pero usando el
'rbol de b&squeda construido. e debe dar la 02dula, que se
busca en el 'rbol y luego con la posicin se va directamente al
nodo en la lls para accesar la informacin 5c2dula, nombre y
sueldo6.
/dicionalmente considerar: 0E3U!/ 0,., Soat, *,.A-E char
de GN, sueldo Soat.
$4%1%G%#% DePnici/n rec"rsi)a +e crbol +e bRsB"e+a%
Un crbol +e bRsB"e+a binario es aquel que est' vacOo o en el cual
cada nodo contiene (or lo menos una lla)e que satisface las
siguientes condiciones:
Todas las llaves 5si hay6 en el sub'rbol i)quierdo de la raO)
precede a la llave de la raO).
!a llave en la raO) precede a todas las llaves 5si las hay6 que se
hallen en el sub'rbol derecho.
!os 'rboles i)quierdo y derecho de la raO) son tambi2n 'rboles de
b&squeda.
-E8-E/-
$4%1%@%O&ERACIONES 3aSICAS CON AR3OLES 3INARIOS DE 3VS=UEDA
!as operaciones b'sicas en el uso de 'rbol binario de b&squeda
tenemos las siguientes:
(niciali)acin de un 'rbol en almacenamiento
insercin de un nodo en un 'rbol binario de b&squeda
5procedimiento que sirve para crear un 'rbol binario de
b&squeda6
A&squeda de un nodo en un 'rbol binario de b&squeda.
-ecorrido de 'rboles binarios de b&squeda 5pre, i n, post orden6.
upresin de un nodo en un 'rbol binario de b&squeda. >E-
/!8,-(T., E* /*E;, 4.
$4%1%@%#% Conce(tos +e im(ortancia res(ecto +e las o(eraciones bcsicas
con arboles binarios +e bRsB"e+a%
(ncluiremos en este apartado algunos conceptos que se derivan de
las operaciones y uso de los 'rboles binarios de b&squeda.
AL TIEM&O DE INSERCION DE UN NODO : El orden de entrada
o insercin de los nodos determina la forma del 'rbol. i los
elementos a entrar est'n ordenados /0E*3E*TE ,
3E0E*3E*TE.E*TE el 'rbol es SES6ADO% Una entrada
aleatoria producir' un 'rbol m's corto o menos profundo y por
tanto m's d7,A!/3,U .
ALTURA O &ROFUNDIDAD de un 'rbol, que es el nivel m'ximo
de un nodo, determina el n&mero de comparaciones al momento
de la bRsB"e+a5 la forma del 'rbol es muy importante en la
b&squeda % la minimi)acin de la altura del 'rbol maximi)a la
e$ciencia de la b&squeda.
$ 4 % 1 % @ % # % $ % $ 4 % 1 % @ % # % $ % CONCE&TOS RELACIONADOS CON EL RECORRIDO DE AR3OLES
3INARIOS
0onsideraremos ahora algunos conceptos muy importantes sobre
'rboles binarios que est'n relacionados con la forma de
recorrerlos :
AR3OLES 3INARIOS SIMILARES: 3os 'rboles A5T6 y A5Ts6 se
dice que son similares, si tienen la misma estructura%
formalmente esto signi$ca que: a.6 ambos sean vacOos o b.6
ambos son no vacOos y sus sub'rboles i)quierdo y derecho son
respectivamente similares. !a similitud signi$ca informalmente,
que los diagramas de A5T6 y A5Ts 6 tienen la misma
d0,*+(8U-/0(,*U.
AR3OLES 3INARIOS E=UI>ALENTES : 3os 'rboles A5T6 y
A5Ts 6 son equivalentes si son similares y adem's, si los nodos
correspondientes tienen la misma informacin. +ormalmente,
A5T6 y A5Ts6 son equivalentes si y solo si 5a6 ambos son vacOos o
5b6 ambos son no vacOos e (*+,5T6W(*+,5Ts6 y sus sub'rboles
i)quierdo y derecho son respectivamente equivalentes
En la $gura 4I. !os dos primeros 'rboles no son similares, el
segundo, tercero y cuarto son similares y, de hecho, el segundo y el
cuarto son equivalentes.
546 5K6
A
B
.
.
1
D
T
)*
C
T
))
A
B
.
.
2
C
T
*)
D
T
**
M
E
.
.
2
'
T
*)
N
T
**
A
B
.
.
2
C
T
*)
D
T
**
5G6 5J6
FI6URA $2% Ejemplos de 'rboles (.(!/-E y ECU(>/!E*TE.
DEFINICION DE LA ESTRUCTURA DE UN ARBOL BINARIO EN
C<<
WW DEFINICION &ARA EL RE6ISTRO DEL AR3OL
typedef struct cdigosa
cdigos _llinF%
Soat info%
cdigos _-linF%
ccod%
??___________________________________________________________________
_
RUTINAS PARA EL MANEJO DE ARBOLES EN C<<
WWRUTINA &ARA >ALIDAR
void validar56
a
gotoxy5KG,KN6%
printf5e 3(8(TE `E*TE-^ 7/-/ 0,*T(*U/- : e 6%
getch56%
c
void manejobs#56
a
char op%
clrscr56%
printf5e E! /-A,! /U* *, ET/ (*(0(/!(P/3, e6%
validar56%
c
WWOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OO
??-UT(*/ 7/-/ !EE- (*+,-./0(,*.
void leabinfo5Soat _inf6
a
??esta rutina ser' llamada para leer la informacin a insertar
Soat infs, c%
clrscr56%
gotoxy5KN,4=6%
printf 5e 3(8(TE !/ (*+,-./0(,* / (*E-T/- /! *,3, : e6%
scanf5etfe,finfs6%
_infWinfs%
c
void leabinfo45Soat _inf6
a
?_Esta rutina ser' llamada para leer la informacin que se quiere
cancelar_?
Soat infs, c%
clrscr56%
gotoxy5KN,4K6%
printf 5e 3(8(TE !/ (*+,-./0(,* / 0/*0E!/- : e6%
scanf5etfe,finfs6%
_infWinfs%
c
??-UT(*/ 7/-/ >((T/-
void visitar5cod _p6
a
?_Esta subrutina es utili)ada en las rutinas de recorrido en preorden
inorden y postorden e imprime la informacin del nodo_?
char op%
printf5et4.Nf e,pM^info6%
c
WWOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OO
??-UT(*/ 7/-/ 0-E/0(,* 3E! /-A,!.
void crearbarbolbbusqueda5cod __t,Soat inf6
a
??se declaran las variables tipo cod que es la estructura utili)ada
cod _p, _q, _r%
Soat info%
char op%
pWne# cod%
pM^llinFWN% ??establecer el nuevo nodo como una hoja
pM^rlinFWN%
pM^infoWinf%
if5_tWWN6a ??insercin en la raO) del nodo
_tWp%
clrscr56%
gotoxy5KG,4<6%
printf5e E! *,3, (*E-T/3, E !/ -/(Pune6%
validar56%
c
elsea
qW_t%
#hile 5qnWN ff infnWqM^info6a
rWq%
if 5qM^info^inf6a
qWqM^llinF%
c ??validar nodos repetidos
elsea
qWqM^rlinF%
c
c
if5rM^info^inf6a
rM^llinFWp% ??insertar a la i)quierda
celse a
rM^rlinFWp% ??insertar a la derecha
c
c
c
WWOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O
?? -UT(*/ 7/-/ !,0/!(P/- E! E7/0(, 3(7,*(A!E
void locali)ar5cod __7,cod __avail6
a
if5_availWWN6a
_7Wne# cod%
c
elsea
_7W_avail%
_availW5_avail6M^rlinF%
c
c
??-UT(*/ 7/-/ !(AE-/- E! *,3, /! E7/0(, 3(7,*(A!E
void liberar5cod _p, cod __avail6
a
pM^rlinFW_avail%
_availWp%
c
WWOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OO
??-UT(*/ 7/-/ AU0/- *,3, E* E! /-A,!
void buscarbnodobarbol5cod _t, cod __p, cod __q, Soat inf6
a
Soat c%
_qWt%
_pW_q%
#hile5_pnWN ff infnW5_p6M^info6a
_qW_p%
if 5inf`5_p6M^info6a ??recorre el sub'rbol i)quierdo
_pW5_p6M^llinF%
c
elsea
_pW5_p6M^rlinF% ??recorre el sub'rbol derecho
c
c
c
WWOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OO
??-UT(*/ 7/-/ 0/*0E!/- *,3, 9,:/ (PCU(E-3/ E 3E-E09/
void eliminarbhoja5cod _q, cod _p, cod __avail6
a
if5pWWqM^llinF6a
qM^llinFWN%
clrscr56%
gotoxy5KG,4<6%
printf5e 0/*0E!/0(,* 9,:/ (PCU(E-3/une6%
validar56%
c
elsea
clrscr56%
gotoxy5KG,4<6%
printf5e 0/*0E!/0(,* 9,:/ 3E-E09/une6%
validar56%
qM^rlinFWN%
c
liberar5p,f5_avail66%
c
WWOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OO
?? -UT(*/ 3E AUCUE3/ 3E (*+,-./0(,* E* E! /-A,!
void busquedabdebs5cod __p, cod __q, cod __s6
a
_qW_p%
_sW5_p6M^llinF%
#hile55_s6M^rlinF nW N6a
_qW_s%
_sW5_s6M^rlinF%
c
5_p6M^infoW5_s6M^info%
_pW_s%
c
WWOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OO
??-UT(*/ 7/-/ E!(.(*/- *,3, -/./.
void eliminarbnodobhijo 5cod _q, cod _p, cod __avail6
a
cod _F, _", _+%
FWqM^rlinF%
"WqM^llinF%
if5qM^llinFWWN ff qM^rlinFWWF ff FM^llinFWWN ff FM^rlinFWWN6a
qM^infoWFM^info% ??E!(.(*/0(,* 3E U* 9(:, 3E-E09,
pWF%
eliminarbhoja5q, p, f5_avail66%
c
elsea
if5qM^llinFWWN ff qM^rlinFWWF ff FM^llinFWWN ff FM^rlinFnWN6a
qM^infoWFM^info% ??E!(.(*/0(,* 3E -/./ 3E-E09/ 0,* U*
9(:, 3E-E09,
qM^rlinFWFM^rlinF%
pWF%
c
elsea
if5qM^llinFnWN ff qM^llinFWW" ff "M^llinFnWN ff "M^rlinFWWN6
a
qM^infoW"M^info%??E!(.(*/0(,* 3E -/./ (PCU(E-3/ 0,*
9(:, (PC.
qM^llinFW"M^llinF%
pW"%
c
elsea
if5qM^llinFnWN ff qM^llinFWW" ff "M^llinFWWN ff "M^rlinFn
WN6a
+W"M^rlinF%??E!(.(*/0(,* 3E -/./ (PCU(E-3/ 0,* U* 9(:,
3E-E09,
qM^infoW+M^info%
pW+%
eliminarbhoja5", p, f5_avail66%
c
elsea
if5qM^llinFnWN ff qM^llinFWW" ff "M^llinFWWN ff "M
^rlinFWWN6a
qM^infoW"M^info%
pW"% ??E!(.(*/0(,* 3E 9(:, (PCU(E-3,
eliminarbhoja5q, p, f5_avail66%
c
elsea
if5qM^llinFWWN ff qM^rlinFWWF ff FM^llinFnWN ff FM
^rlinFWWN6a
+WFM^llinF%??E!(.(*/0(,* 3E -/./ 3E-E09/ 0,* 9(:,
(PC.
qM^infoW+M^info%
pW+%
eliminarbhoja5F, +, f5_avail66%
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
c
c
c
c
liberar5p,f5_avail66 %?? !(AE-/ E! E7/0(, E* .E.,-(/
c
??-UT(*/ 7/-/ 0/*0E!/- U* *,3, 3E! /-A,!
void cancelarbnodobarbol5cod __t, Soat inf, cod _avail6
a
cod _s, _p, _q%
char op%
if5_tWWN6a ??>/!(3/0(,* 3E /-A,! >/0(,
clrscr56%
gotoxy5GJ.=,4K6%
printf5eE! /-A,! ET/ >/0(,e6%
validar56%
c
elsea
if55_t6M^llinFWWN ff 5_t6M^rlinFWWN ff 5_t6M^infoWWinf6a
pW_t% ??0U/*3, E! *,3, / E!(.(*/- E !/ -/(P
_tWN%
liberar5p, favail6%
c
elsea
buscarbnodobarbol5_t , fp, fq, inf6%??AUCUE3/ 3E! *,3, /
E!(.(*/-
if5pM^infoWWinf6a
if5pM^llinFWWN ff pM^rlinFWWN6a ??E! *,3, E U*/ 9,:/
eliminarbhoja5q, p, favail6%
c
elsea
if5pM^llinFWWN ff pM^rlinFnWN6a??-/./ 0,* 9(:,
3E-E09,
eliminarbnodobhijo 5q, p, favail6%
c
elsea
if 5pM^llinFnWN ff pM^rlinFWWN6a??-/./ 0,* 9(:,
(PC.
eliminarbnodobhijo 5q, p, favail6%
c
elsea
busquedabdebs5fp, fq, fs6%
if 5pM^rlinFWWN ff pM^llinFWWN6a
eliminarbhoja5q, p, favail6%
c
elsea
eliminarbnodobhijo 5q, p, favail6%
c
c
c
c
c
elsea
gotoxy5KJ.=,4G6%
printf5e!/ (*+,-./0(,* *, E !,0/!(P/ E* E! /-A,!e6%
validar56%
c
c
c
c
??-E0,--(3, 3E U* /-A,! E* 7-E (* E 7,T,-3E*
void preorden5cod _t6
a
if5tnWN6a
visitar5t6%
preorden5tM^llinF6%
preorden5tM^rlinF6%
c
c
void inorden5cod _t6
a
if5tnWN6a
inorden5tM^llinF6%
visitar5t6%
inorden5tM^rlinF6%
c
c
void postorden5cod _t6
a
if5tnWN6a
postorden5tM^llinF6%
postorden5tM^rlinF6%
visitar5t6%
c
c
PROGRAMA PRINCIPAL PARA EL MANEJO DE ARBOLES
Yinclude `stdio.h^
Yinclude `conio.h^??./*E:/ !/ +U*0(,*E 3E 7/*T/!!/
Yinclude `+:binario.h^ ??!(A-E-p/ CUE 0,*T(E*E !/ +U*0(,*E
CUE
./*E:/* E! /-A,!
main56
a
cod _t, _q, _p, _avail%
int i%
unsigned int s#WN%
char opcion,opcion4%
Soat inf, info%
s#WN%
doa
textcolor5<6%
clrscr56%
gotoxy 5K=,L6%
printf 5e_______ .E*U 7-(*0(7/! _______e6%
gotoxy5KI.J,4N6%
printf5e``4 (*(0(/!(P/0(,* 3E! /-A,! ^^e6%
gotoxy5KI.J,4K6%
printf5e``K 0-E/0(,* 3E *,3, ^^e6%
gotoxy5KI.J,4J6%
printf5e``G .,T-/- ,-3E*/.(E*T, ^^e6%
gotoxy5KI.J,4I6%
printf5e``J 0/*0E!/0(,* 3E *,3, ^^ e6%
gotoxy5KI.J,4L6%
printf5e``= /!(3/ 3E! 7-,8-/./ ^^e6%
gotoxy5KI.J,KK6%
printf5e3(8(TE !/ ,70(,* 3EE/3/....... e6%
doa
opcionWgetchar56%
c#hile5opcin`oNo ff opcin^oJo6%
s#itch 5opcin6a
case o4o:if 5s#WWN6a
s#W4%
tWN%
clrscr56%
gotoxy5KJ,4<6%
printf5e(*(0(/!(P/0(,* 3E! /-A,!une6%
validar56%
c
elsea
clrscr56%
gotoxy5KG,4<6%
printf5e /-A,! 0-E/3, e6%
validar56%
c
breaF%
case oKo:if 5s#WWN6a
clrscr56%
gotoxy5KG,4<6%
printf5e /-A,! *, (*(0(/!(P/3, e6%
validar56%
c
elsea
clrscr56%
leabinfo5finf6%
crearbarbolbbusqueda5ft, inf6%
c
breaF%
case oGo:if 5s#WWN6a
clrscr56%
gotoxy5KG,4<6%
printf5e /-A,! *, (*(0(/!(P/3, e6%
validar56%
c
elsea
doa
clrscr56%
gotoxy 5KI,=6%
printf 5e___ .E*U 3E ,-3E*/.(E*T, ___e6%
gotoxy5KL,L6%
printf5e4_ -E0,--(3, E* 7-E,-3E*e6%
gotoxy5KL,4N6%
printf5eK_ -E0,--(3, E* (*,-3E*e6%
gotoxy5KL,4K6%
printf5eG_ -E0,--(3, E* 7,T,-3E*e6%
gotoxy5KL,4J6%
printf5eJ_ /!(3/ /! .E*U 7-(*0(7/!e6%
gotoxy5KL,4I6%
printf5e 3(8(TE !/ ,70(,* ..... e6%
gotoxy5=K,4I6%
doa
opcion4Wgetchar56%
c#hile 5opcion4`oNo ff opcion4^oJo6%
s#itch5opcion46a
case o4o:
clrscr56%
gotoxy5K=.=,446%
printf5eE! -E0,--(3, E* 7-E,-3E*
E:une6%
gotoxy5K=,4=6%
preorden5t6%
validar56%
breaF%
case oKo:
clrscr56%
gotoxy5K=.=,446%
printf5eE! -E0,--(3, E* (*,-3E* E:une6%
gotoxy5K=,4=6%
inorden5t6%
validar56%
breaF%
case oGo:
clrscr56%
gotoxy5K=.=,446%
printf5eE! -E0,--(3, E* 7,T,-3E*
E:une6%
gotoxy5K=,4=6%
postorden5t6%
validar56%
breaF%
default:breaF%
c
c#hile5opcion4nWoJo6%
c
breaF%
case oJo:if 5s#WWN6a
clrscr56%
gotoxy5KG,4<6%
printf5e /-A,! *, (*(0(/!(P/3, e6%
validar56%
c
elsea
if5tWWN6a
clrscr56%
gotoxy5KJ,4<6%
printf 5e/-A,! >/0(, M *, 0/*0E!/- e6%
validar56%
getch56%
c
elsea
printf 5e3(8(TE !/ (*+,-./0(,* / 0/*0E!/-e6%
leabinfo45finfo6%
cancelarbnodobarbol5ft, info, avail6%
c
c
breaF%
default:breaF%
c
c#hile5opcin nWo=o6%
clrscr56%
c
-E8-E/-
$4%1%$4% AR3OLES 3INARIOS ENAE3RADOS O ENTRELA8ADOS
!a representacin en memoria de 'rboles binarios vista hasta
ahora es la denominada representacin natural, que se muestra
con el 'rbol de las $guras 44 y 4R.
FI6URA $?% -epresentacin de un 'rbol binario en memoria en
su forma */TU-/!.
0omo se puede observar en la $gura 44. 9ay R direcciones N"ll
contra = direcciones e-ecti)as5 y en la $gura 4R hay 4N
direcciones N"ll contra L direcciones e-ecti)as% Esto es hay m's
A
B C
D E
D
=n!ll
.
/
H I
enlaces nulos que no nulos, En general esto sucede para cualquier
'rbol binario, esto es realmente un despilfarro de memoria.
7ara darle un uso a estos espacios de memoria que son Null $# "
/erlis y C# 0hornton idearon la llamada representacin de AR3OL
ENAE3RADA O ENTRELA8ADAN en este m2todo, los enlaces
terminales 5N"ll! se reempla)an por otros ENLACES llamados
AILOS% !os 9ilos son enlaces que reempla)an los N"ll y apuntan
a otros nodos del 'rbol. !a +igura 4L. .uestra el 'rbol E*9EA-/3,
o E*T-E!/P/3, equivalente al de la $gura 4R.
FI6URA $G. /rbol Enhebrado con Enlaces no *ulos.
En la $gura 4L. !as lOneas punteadas representan estos nuevos
enlaces 5AILOS6, que siempre van hacia un nodo d./ 0E-0/*,U
a la raO) del 'rbol, incluida 2sta, algunos nodos como el 0 tiene dos
enlaces ordinarios a los sub'rboles i)quierdo y derecho% otros
A
B C
.
.
1
T
*
E
T
*)
D
T
))
D H
/
I
T
**
T
*)*
*
T
**)
T
***
nodos, como 9, tiene dos enlaces enhebrados y algunos tienen
5como el A6 un enlace de cada tipo. !os 9(!, dE7E0(/!EU que
salen de 3 y de : ir'n a un nodo +(0T(0(, 59E/36 del 'rbol que ser'
necesario incluir en la (.7!E.E*T/0(,* en el computador.
Estos &ltimos enlaces 59(!, E7E0(/!E6 solo aparecen para el
nodo m's a la derecha y m's a la i)quierda.
7ara poder generali)ar y entender como se de$nen los 9(!, es
conveniente de$nir una nueva notacin 3E U0E,-E E
7-E3E0E,-E 3E 0/3/ *,3,, que dependen del -E0,--(3, ,
>((T/ 3E U* /-A,! 57-E,-3E*, (*,-3E*, 7,T,-3E*6%
hagamos los recorridos para el 'rbol de la $gura 4L.
7-E,-3E*: A3DCE6FAI
(*,-3E*: D3AE6CAFI
7,T,-3E*: D36EAIFCA
por ejemplo : en preorden, el predecesor de C es 3 y el sucesor es
D y en inorden el predecesor de C es 6 y el sucesor es A
$nalmente en postorden el predecesor de C es F : el sucesor es A%
3e esta manera dado un nodo en un 'rbol binario cuya 3(-E00(,*
es & se de$nen las notaciones de &REDECESOR < SUCESOR DE
& como sigue:
O& : Es el predecesor del nodo 7 cuando el 'rbol se recorre en
7-E,-3E*.
&O : Es el sucesor del nodo 7 cuando el 'rbol se recorre en
7-E,-3E*.
e& : Es el predecesor del nodo 7 cuando el 'rbol se recorre en
(*,-3E*.
&e : Es el sucesor del nodo 7 cuando el 'rbol se recorre en
(*,-3E*.
d& :Es el predecesor del nodo 7 cuando el 'rbol se recorre en
7,T,-3E*.
&d :Es el sucesor del nodo 7 cuando el 'rbol se recorre en
7,T,-3E*.
Ejemplo: 7ara los recorridos del 'rbol de la $gura 4L. e tiene si &
es la direccin de 0, entonces: _7WA% 7_W3% v7W8% 7vW9% Y7W+%
7YW/.
!a notacin __7 se lee el predecesor del predecesor de 7 y 7__ se
lee el sucesor del sucesor en preorden 5igual para los dem's
recorridos6, en nuestro ejemplo __7W/ % vv7WE % 7__WE etc.
!os nodos extremos en cada recorrido no tienen predecesor o
sucesor, por de$nicin se dice que su sucesor en un nodo $cticio
cuya direccin se nota como LOCT! de esta manera se tiene que:
si & Es la direccin de / entonces _7WLOC5T6 etc.
por &ltimo se cumple que v57v6W5v76vW7, esto es, que el
predecesor del sucesor o el sucesor del predecesor de un nodo 7 es
el mismo 7 para cualquier recorrido, en nuestro ejemplo tomamos,
en inorden pero igual cumple para los otros dos recorridos. i la
direccin 7 es la de 0 entonces v57v6W5v76vW0.
En la $gura 4L. !os 9(!, o E*!/0E E*9EA-/3, apunta a :
!os LLIN;T*! F eT* es decir el enlace derecho de Tj se hace
igual a su predecesor en (*,-3E*.
los RLIN;T*! F T*e es decir el enlace i)quierdo de Tj se hace
igual a su sucesor en (*,-3E*.
Esta puede ser la norma general y aplicarse a cualquier 'rbol
binario para 9/0E- U -E7-EE*T/0(,* E*9E*A-/3/ . Tambi2n
podrOa usarse los recorridos 7re y 7ostorden usando igualmente los
predecesores y sucesores para cada tipo de recorrido, pero no es
recomendable, porque hace m's complicado el algoritmo.
0omo se ve en la $gura 4L:
!os LLIN; de E, 8, 9 y : apuntan a su predecesores en (norden
que son /, E, 0 y + respectivamente.
!os RLIN; de 3, A, 8 y 9 apuntan a sus sucesores en (norden
que son A, /, 0 y + respectivamente.
El LLIN; de 3 y el RLIN; de : 5nodos del extremo derecho y
extremo i)quierdo respectivamente6 no tienen un 7redecesor y
sucesor por anto apunta a la direccin de memoria de un nodo
+(0T(0(, 59E/36 que se crear' al momento de la implementacin.

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
&ltima.
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.

Potrebbero piacerti anche