Sei sulla pagina 1di 139

Estructuras de Datos en Java Cristian Denis Mamani Torres

xjkwak@gmail.com
I
Version DraIt
9.3
Estructuras de Datos en Java Cristian Denis Mamani Torres
xjkwak@gmail.com
Estructurus de Dutos en Juvu
Estructurus de Dutos en Juvu
ndice de contenido ndice de contenido
Infroduccion o Io Progromocion................................................................................................8
Lo imporfoncio de Io Iogico....................................................................................................8
Lo Imporfoncio de Io Informocion......................................................................................II
Lo Informofico.......................................................................................................................IZ
Lo compufodoro......................................................................................................................I3
EI hordwore........................................................................................................................Ib
Componenfes 8osicos de Ios Compufodoros...........................................................I8
Microprocesodor......................................................................................................I8
Torjefo PrincipoI......................................................................................................I8
Torjefo de video......................................................................................................I8
Memorio PAM...........................................................................................................I8
Disco Duro.................................................................................................................I8
Torre..........................................................................................................................I9
Disposifivos...............................................................................................................I9
Perifericos................................................................................................................I9
EI Soffwore.......................................................................................................................Z0
Los Lenguojes de Progromocion................................................................................ZI
Troducfores de Ienguoje............................................................................................ZZ
Lo progromocion...........................................................................................................Z3
Hisforio de Ios Ienguojes de progromocion............................................................Z4
Porodigmos de Progromocion.....................................................................................Zb
EI Ienguoje de Progromocion Jovo.....................................................................................Zo
Procfico # I - Infroduccion o Io Informofico................................................................Z7
Progromocion Orienfodo o Objefos.......................................................................................Z8
Infroduccion...........................................................................................................................Z8
Pensor en objefos: uno onoIogo.........................................................................................Z9
Objefos y cIoses....................................................................................................................30
Procfico # Z - CIoses y Objefos........................................................................................3Z
Lo obsfroccion........................................................................................................................33
Como se pienso en objefos7..............................................................................................34
Z
Estructuras de Datos en Java Cristian Denis Mamani Torres
xjkwak@gmail.com
Afribufos y Mefodos............................................................................................................3o
Afribufos............................................................................................................................3o
EI dofo............................................................................................................................37
Lo VoriobIe....................................................................................................................37
Tipos de Dofos en Jovo.........................................................................................37
TobIo de fipos de dofos primifivos.....................................................................38
Mefodos..............................................................................................................................40
Creondo nuesfro primero cIose ufiIi;ondo 8IueJ...........................................................4Z
Pero... que dijimos que es un progromo7....................................................................4Z
Que es 8IueJ7.................................................................................................................4Z
I) Creor un proyecfo...................................................................................................44
Z) Creor uno cIose........................................................................................................44
Convenciones sobre eI nombre de Ios cIoses....................................................4o
3) Creor objefos..........................................................................................................47
EI mefodo consfrucfor.....................................................................................................bI
AIgunos convenciones sobre Ios nombres de mefodos...................................b3
Iferocfuondo con objefos en 8IueJ.............................................................................bb
CoIecciones de Objefos.......................................................................................................bo
Lo cIose ArroyLisf............................................................................................................bo
Consfrucfores...................................................................................................................b7
Mefodos..............................................................................................................................b7
DecIorocion de un ArroyLisf de enferos...........................................................b7
Creocion de un ArroyLisf de enferos.................................................................b7
Aodiendo eIemenfos oI ArroyLisf......................................................................b8
Conociendo eI fomoo deI ArroyLisf...................................................................b8
Obfeniendo un eIemenfo deI ArroyLisf.............................................................b8
8orrondo un eIemenfo deI ArroyLisf..................................................................b8
PeIociones enfre objefos....................................................................................................b9
Composicion (fiene un).....................................................................................................b9
Herencio (es un)................................................................................................................o0
Pecursividod................................................................................................................................o3
Definicion................................................................................................................................o3
Tipos de Pecursion................................................................................................................o9
Pecursividod SimpIe.........................................................................................................o9
Pecursividod MIfipIe......................................................................................................o9
Pecursividod Anidodo......................................................................................................o9
3
Estructuras de Datos en Java Cristian Denis Mamani Torres
xjkwak@gmail.com
Pecursividod Cru;odo o Indirecfo................................................................................70
PegIos fundomenfoIes de Io recursividod.........................................................................7I
o) Coso bose: .....................................................................................................................7I
b) Progreso:........................................................................................................................7I
c) PegIo de diseo:............................................................................................................7I
d) PegIo deI inferes compuesfo:....................................................................................7Z
Lo PiIo de Pecursion..............................................................................................................73
LIomodo o uno funcion......................................................................................................73
LIomodo o uno funcion recursivo...................................................................................73
AnoIisis de AIgorifmos..............................................................................................................74
Definicion................................................................................................................................74
Focfores que infIuyen en Io eficiencio de un oIgorifmo................................................7b
EI Hordwore ......................................................................................................................7b
EI Soffwore.......................................................................................................................7b
Lo Iongifud de enfrodo....................................................................................................7b
AnoIisis de AIgorifmos.........................................................................................................7o
EIemenfos de un oIgorifmo.............................................................................................7o
Enunciodos simpIes (senfencios)..............................................................................77
Enunciodos compuesfos (esfrucfuros de confroI)................................................78
SeIecfivos......................................................................................................................78
IF................................................................................................................................78
IF-ELSE....................................................................................................................80
Pepefifivos....................................................................................................................8Z
FOP............................................................................................................................8Z
WHILE......................................................................................................................84
DO - WHILE............................................................................................................8b
Orden de Mognifud (Mofocion O gronde)........................................................................8o
Definicion concepfuoI deI Orden de Mognifud..........................................................8o
Propiedodes deI Orden de Mognifud............................................................................87
Esfrucfuros de Dofos...............................................................................................................88
Definicion................................................................................................................................88
Operociones.......................................................................................................................88
Movegor por Io esfrucfuro.........................................................................................88
8squedo........................................................................................................................88
ConsuIfo de Io informocion.........................................................................................88
Copio porcioI o fofoI....................................................................................................88
4
Estructuras de Datos en Java Cristian Denis Mamani Torres
xjkwak@gmail.com
Pruebo.............................................................................................................................89
Modificocion..................................................................................................................89
Insercion........................................................................................................................89
EIiminocion.....................................................................................................................89
Verificor si es voco....................................................................................................89
CIosificocion...........................................................................................................................90
Esfrucfuros de Dofos Inferno y Exferno...................................................................90
Esfrucfuros de Dofos Esfoficos...................................................................................90
Esfrucfuros de Dofos Dinomicos..................................................................................90
Esfrucfuros de Dofos LineoIes y Mo LineoIes.............................................................9I
Objefivos.................................................................................................................................9I
Esfrucfuros de Dofos LineoIes...............................................................................................9Z
Lisfos........................................................................................................................................9Z
Operociones.......................................................................................................................9Z
Definicion recursivo.........................................................................................................93
Lo cIose Lisfo.jovo.......................................................................................................9b
Consfrucfores .........................................................................................................9b
Mefodos....................................................................................................................9b
Verificor si es voco...........................................................................................9b
Inserfor un dofo oI finoI...................................................................................9o
Inserfor un dofo oI inicio..................................................................................9o
Inserfor un dofo en Io k-esimo posicion de Io Iisfo....................................9o
EIiminor un dofo de Io Iisfo..............................................................................97
Obfener eI fomoo de Io Iisfo..........................................................................97
8uscor un dofo sobre Io Iisfo...........................................................................97
Obfener un eIemenfo de cuoIquier posicion de Io Iisfo..............................98
Obfener en formofo codeno o Io Iisfo...........................................................98
Modificor eI eIemenfo de uno posicion dodo................................................99
EIiminor eI eIemenfo de uno posicion dodo...................................................99
0enericidod o Poromefri;ocion de fipos...............................................................I0I
Definicion de Lisfo en bose o Modos..........................................................................I03
Lisfo de SimpIe EnIoce..............................................................................................I03
Lo cIose LisfoSE.jovo................................................................................................I0o
Consfrucfor............................................................................................................I0o
Mefodos...................................................................................................................I0o
Verificor si es voco.........................................................................................I0o
b
Estructuras de Datos en Java Cristian Denis Mamani Torres
xjkwak@gmail.com
Inserfor un dofo oI inicio................................................................................I0o
Inserfor un dofo oI finoI.................................................................................I07
Obfener eI fomoo de Io Iisfo........................................................................I07
Obfener eI eIemenfo de uno posicion dodo.................................................I08
EIiminor eI eIemenfo de uno posicion dodo.................................................I08
8uscor un eIemenfo en Io Iisfo.......................................................................I09
Lisfo de DobIe EnIoce...............................................................................................I09
Lo cIose LisfoDE.jovo..................................................................................................III
Consfrucfor ............................................................................................................III
Mefodos....................................................................................................................III
Inserfor un eIemenfo oI inicio.........................................................................III
Inserfor un eIemenfo oI finoI.........................................................................IIZ
Obfener Ios eIemenfos de Io Iisfo en formofo codeno.............................IIZ
EIiminor y obfener eI primer eIemenfo de Io Iisfo.....................................II3
EIiminor y obfener eI Ifimo eIemenfo de Io Iisfo......................................II3
8uscor un eIemenfo en Io Iisfo........................................................................II4
8uscor un eIemenfo en Io Iisfo........................................................................II4
Lisfo CircuIor de SimpIe EnIoce..............................................................................IIb
Lo cIose LisfoSEC.jovo...............................................................................................IIo
Consfrucfor.............................................................................................................IIo
Mefodos...................................................................................................................IIo
Verificor si es voco..........................................................................................IIo
Inserfor un dofo oI inicio................................................................................IIo
Inserfor un dofo oI finoI..................................................................................II7
Obfener en formofo codeno...........................................................................II7
Lisfo CircuIor de DobIe EnIoce................................................................................II8
Lo cIose LisfoDEC.jovo..............................................................................................II8
Consfrucfor.............................................................................................................II8
Mefodos...................................................................................................................II9
Verificor si es voco..........................................................................................II9
Inserfor un dofo oI inicio................................................................................II9
Inserfor un dofo oI finoI.................................................................................IZ0
Obfener Io Iisfo en formofo codeno.............................................................IZ0
PiIos.........................................................................................................................................IZI
Operociones......................................................................................................................IZI
ApIicociones de Ios PiIos ...............................................................................................IZ4
o
Estructuras de Datos en Java Cristian Denis Mamani Torres
xjkwak@gmail.com
CoIos.......................................................................................................................................IZb
Operociones.....................................................................................................................IZo
ApIicociones de Ios CoIos .............................................................................................IZ7
Esfrucfuros de Dofos Mo LineoIes.......................................................................................IZ8
Infroduccion.........................................................................................................................IZ8
ArboIes..................................................................................................................................IZ8
AIgunos Concepfos..........................................................................................................IZ9
ArboIes 8inorios ..................................................................................................................I3I
Operociones......................................................................................................................I3I
Definicion recursivo........................................................................................................I3I
Lo cIose ArboI8.jovo..................................................................................................I3Z
Consfrucfor ...........................................................................................................I33
Mefodos...................................................................................................................I33
Verificor si eI orboI esfo voco......................................................................I33
Inserfor un eIemenfo en eI orboI en uno ubicocion oIeoforio.................I33
Obfener eI peso deI orboI binorio.................................................................I34
Obfener eI fomoo deI orboI binorio............................................................I34
8uscor un eIemenfo en eI orboI binorio.......................................................I34
CoIcuIor Io oIfuro deI orboI binorio...............................................................I3b
Pecorrido de un orboI binorio......................................................................................I3b
Pecorrido preorden...................................................................................................I3b
Pecorrido enorden.....................................................................................................I3o
Pecorrido posforden.................................................................................................I3o
ArboIes 8inorios de 8squedo..........................................................................................I37
ArboIes 8inorios de Expresion.........................................................................................I38
8ibIiogrofo................................................................................................................................I39
7
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Introduccin u Iu Progrumucin
Introduccin u Iu Progrumucin
Lu importunciu de Iu Igicu
Cuondo ero nio, oIguno ve; me coIoque moI Ios ;opofos, en un insfonfe en que
fodo mi fomiIio esfobo en un ofon de soIir ropido. Uno fo vio que feno puesfos Ios
;opofos oI reves y me regoo fuerfemenfe diciendome que porque me hobo puesfo
Ios ;opofos os, que no feno un poquifo de Iogico.
Luego de ponerme odecuodomenfe Ios ;opofos, es decir, coIocondo eI ;opofo
donde debero ser, ;opofo i;quierdo poro eI pie i;quierdo, ;opofo derecho poro eI
pie derecho, comence o pensor que reoImenfe ero posibIe que no fuviero Iogico
porque me poreco increbIe que yo no hubiero defecfodo que poro coIocorse
correcfomenfe Ios ;opofos, soIo hobo un comino (y que odemos ero muy senciIIo).
Ademos de esfo concIusion (fon obvio) fombien IIegue o ofro (no fon obvio) y ero eI
hecho de que es mos difciI ponerse moI Ios ;opofos que ponerseIos bien o, dicho en
ofros poIobros, es muy muy muy fociI coIocorse correcfomenfe Ios ;opofos.
En Io medido en que Ios oos fueron posondo y fui creciendo, me d cuenfo que
son muchos pero muchos Ios cosos obvios que por un exfroo error no hocemos y
vueIve o mi menfe eI recuerdo de mi fo diciendome: - Es que no fienes Iogico o que.lll
Dedique mi correro universiforio oI esfudio de Ios Ciencios de Io Compufocion,
precisomenfe porque oII enconfre porque ero fon imporfonfe oqueIIo de Io Iogico. Sin
emborgo y Iuego de buscor muchos definiciones de Logico IIegue o uno que en mi
concepfo refIejo reoImenfe eI senfido de eso poIobro. Pregunfe o uno omigo: - Que
8
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
es poro fi Io Iogico7 Me respondio en un Ienguoje muy popuIor: - Pues, ehh.. Io Iogico
es... es... es... como oIgo muy Iogico. De hecho su respuesfo no me sofisfi;o. Esfobo
incIuyendo en Io definicion eI fermino o definir o seo que no me hobo dicho nodo.
Pero cuondo Ie pregunfe: - Por que fe es difciI definirIo..7 Me respondio: - Es que
no es fociI definir oIgo fon Iogico. O seo que eIIo feno cIoro Io concepcion deI
fermino, senciIIomenfe no sobo como definirIo.
Pregunfe o Don Jose, un viejo ;opofero que duronfe vorios oos Io hobo visfo
IIegor fodos Ios moonos o ormor su "combuche" desde donde ofendo, poro
desormorIo en Ios horos de Io noche. EI me respondio: - Pues hombre, Io nico que Ie
puedo decir es que Iogico es fodo oqueIIo que no es iIogico. Su definicion me poreco
muy rocionoI pero de hecho seguo siendo disfonfe de Io que yo esfobo esperondo.
Sin emborgo yo veo que eI proceso de ormor su "combuche" que consfobo de unos
nueve soporfes y dos pIosficos (desde donde eI ofendo o su cIienfeIo) Ie fomobo o eI
soIomenfe unos die; minufos. Un do Ie dije que me dejoro ormorseIo y oI cobo de
medio horo me dijo un poco moIesfo: - Quieres ormorIo ropido..7 . Yo Ie respond
que s, enfonces me dijo: - Pues pongoIe Iogico o esos poIos y vero Io senciIIo que es.
Luego de un buen rofo y de hober coImodo Io pociencio de Don Jose pude ormorIo,
pero Io que si nofe fue que eI feno muy cIoro Io definicion de Logico porque Iuego de
ormodo vi que reoImenfe ero muy senciIIo y que fodo Io que necesifobo ero ponerIe
Iogico. Mi inquiefud siguio sin resoIverse porque yo quero fener uno definicion
concrefo y exocfo de ese fermino.
Pregunfe o mi profesoro de Lenguoje y me enfrego uno exceIenfe definicion
de diccionorio: - Logico es Io romo deI conocimienfo que nos permife deferminor que
oIgo esfo oprobodo por Io ro;on como bien deducido o bien pensodo. Poro m ero uno
definicion exocfo y ero suficienfe con que oporeciero en eI Pequeo Lorousse poro
que yo no Io discufiero. Sin emborgo me exigo mos ro;onomienfos de Ios necesorios
poro enfender foI definicion (oI menos en esos dos), pues me poreco inoudifo que Io
definicion de Logico fuero muy compIejo, es decir no fuero fon Iogico. Eso mismo
ro;on ero Io que no me hobo onimodo o buscor uno definicion de diccionorio sino
buscor uno expresion fon senciIIo y fon Iogico que no me exigiero muchos
ro;onomienfos.
En eso bsquedo por uno definicion que dejoro sofisfechos mis expecfofivos
co en Ios fouces de un buen mofemofico. De hecho, sobo que feno que conocer y
9
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
poder definir que ero Io Logico. Cuondo Ie pregunfe oI respecfo me respondio
diciendo: - Logico es Io Ciencio que esfudio Io esfrucfuro, fundomenfos y uso de Ios
expresiones deI conocimienfo humono. PeoImenfe ero Io definicion mos exocfo que
yo hobo recibido hosfo ese momenfo, pero oI iguoI que Io definicion deI Pequeo
Lorousse, me exigo demosiodos ro;onomienfos como poro poder digerirIo. Mo puedo
discufir que considero que es Io definicion mos exocfo y preciso ocerco de Io que es
Logico pero mi niveI de conocimienfo no me permifo procesor odecuodomenfe, en
esos fiempos, esfo definicion.
Le pregunfe o oIguien, un fronsenfe, un desconocido que ero Io Logico y su
respuesfo desprevenido y siIvesfre me gusfo porque pude enfenderIo muy
fociImenfe: - Yo considero Io Iogico como uno serie coherenfe de ideos y
ro;onomienfos. Comporf con eI dicho definicion y me porecio ocerfodo. Ademos que
en fodo mi enforno pude descubrir que fodos Ios personos o quienes Ies pregunfobo
fenon, por Io menos, muy cIoro eI concepfo de Io que ero Io Logico os en oIgunos
cosos no Io pudieron definir de uno monero cIoro.
FinoImenfe y Iuego de fonfos definiciones, busque o mi podre. Un hombre deI
compo poro quien Ios ovonces fecnoIogicos Ie corron por Io espoIdo porque no eron
su ofon. Me mirobo sin porpodeor codo que yo iniciobo oIgunos de mis diserfociones
sobre Io fecnoIogo y su reIocion con eI mundo moderno. Poro eI eI mundo moderno no
ero sino un cmuIo de probIemos en ve; de soIuciones. Yo pensobo Io confrorio. Sin
emborgo me orriesgue o pregunforIe: - Popo, poro usfed que es Io Iogico...7 y eI
mirondome con Io exfroe;o de Io pregunfo me dijo: - Pues es Io formo mos O8VIA
y mos FACIL de hocer oIgo. Y v que fodos Ios definiciones que hosfo eI momenfo
hobo recibido, unos provenienfes de Io vido cofidiono y ofros exfrocfodos de Iibros
especioIi;odos en eI femo, se resumon en esfo Ifimo. Eso es Io L0ICA. AIgunos
Iibros cifon que Io bose poro Io soIucion de probIemos o froves de Io compufodoro es
fener muy bueno Iogico. Yo iro mos oIIo. Considero que Io bose poro eIIo es,
senciIIomenfe, ser muy Iogicos o seo poder visIumbror eI comino mos obvio y mos
fociI poro Iogror un objefivo.
I0
La logica es la forma mas OBJIA v mas FACIL de hacer algo.
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Lu Importunciu de Iu Informucin
En senfido generoI, Io informocion es un conjunfo orgoni;odo de dofos, que
consfifuyen un mensoje sobre un deferminodo enfe o fenomeno. De esfo monero, si
por ejempIo orgoni;omos dofos sobre un pos, foIes como: nmero de hobifonfes,
densidod de pobIocion, nombre deI presidenfe, efc. y escribimos por ejempIo, eI
copfuIo de un Iibro, podemos decir que ese copfuIo consfifuye informocion sobre
ese pos. Cuondo fenemos que resoIver un deferminodo probIemo o fenemos que
fomor uno decision, empIeomos diversos fuenfes de informocion (como podro ser eI
copfuIo mencionodo de esfe Iibro imoginorio), y consfruimos Io que en generoI se
denomino conocimienfo o informocion orgoni;odo que permife Io resoIucion de
probIemos o Io fomo de decisiones.
En muy disfinfos epocos eI progreso de Io humonidod ho sido posibIe grocios o:
eI fuego, Io ruedo, Io ogricuIfuro, Io indusfrio y Io fecnoIogo. Pues bien, ohoro
enfromos en Io Eru de Iu Informucin porque es o froves de Io informocion como
IIegon o nuesfros vidos Ios grondes soIuciones... poro Ios grondes probIemos.
Muesfros vidos giron en forno o Io informocion que podemos percibir de
nuesfro enforno. Lo vido es uno consfonfe decision, debemos eIegir en codo momenfo
de nuesfros vidos, y Ios decisiones cIoromenfe deben esfor bosodos en informocion.
Lo informocion se produce cuondo, de oIguno monero, Iogromos inferprefor dofos, es
decir, seoIes de nuesfro enforno. Por ofro porfe, Io informocion debe fener uno
serie de corocfersficos impIcifos poro que podemos ufiIi;orIo, debe ser fidedigno,
o fiempo, efc.
Hoy en do Io ciencio que se encorgo deI esfudio de Io informocion es Io
Informofico.
II
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Lu Informticu
Lo informofico es Io Ciencio que esfudio, opIico y opfimi;o eI frofomienfo
eficienfe de Io informocion.
Sobes Io que significo eI frofomienfo eficienfe de Io informocion..7
SenciIIomenfe que es Io ciencio que se ocupo de que Io informocion, cuoIquiero que
seo su procedencio o su desfino, cumpIo con dos objefivos:
Verucidud : "Todo informocion debe ser verdod (es decir vero;)". De nodo fe
sirve que voyos oI 8onco y soIicifes fu soIdo e inmediofomenfe y sin ninguno
demoro fe den un soIdo que no corresponde o Io reoIidod.
Oportunidud : "Todo informocion debe IIegor en eI momenfo indicodo (o seo
oporfunomenfe)". De nodo fe sirve que en eI 8onco fe digon que fu verdodero
soIdo fe Io enfregon en I0 meses.
Porque codo que se hobIo de Informofico se reIociono inmediofomenfe eI
concepfo con compufodoros..7 Pues senciIIomenfe porque en Io ocfuoIidod Ios
compufodores son Ios disposifivos que mejor pueden cumpIir con eI objefivo de Io
Oporfunidod yo que frobojon o veIocidodes impresiononfemenfe oIfos (miIIonesimos
de segundo). Y quien es eI encorgodo de cumpIir con Io verocidod...7 Pues eI ser
humono que es quien pIoneo, orgoni;o, progrumu fodo Io que Io compufodoro vo o
enfregor como informocion.
IZ
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Lu computudoru
Los compufodoros u ordenodores, son herromienfos esencioIes en muchos
oreos: indusfrio, gobierno, ciencio, educocion...., en reoIidod en cosi fodos Ios compos
de nuesfros vidos. EI popeI de Ios progromos es esencioI, sin uno Iisfo de
insfrucciones o seguir, Io compufodoro es virfuoImenfe infiI. Los Ienguojes de
progromocion nos permifen escribir esos progromos y, por consiguienfe,
comunicornos con Ios compufodoros.
Desde un punfo de visfo simpIe, uno compufodoro proceso dofos y Ios
convierfe en informocion significofivo.
EI progromo es Io fuer;o conducforo de cuoIquier foreo que hoce uno
compufodoro. Un progromo es uno Iisfo de insfrucciones defoIIodos que indicon o Io
compufodoro Io que ho de hocer. Lo compufodoro no puede hocer nodo sin un
progromo.
Los progromos modernos producen informocion en muchos formofos. Esfos
progromos reproducen msico, se comunicon con ofros compufodoros en diferenfes
formos. Lo soIido se envo o Io ponfoIIo y/o o Io impresoro que consfifuyen Ios
disposifivos mos usuoIes poro occeso o Io compufodoro: es decir, Ios dofos de
I3
Computadora
Datos InIormacion
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
enfrodo y Ios dofos de soIido pueden ser, reoImenfe, cuoIquier coso, fexfo, dibujos,
sonidos...
Uno compufodoro consfo de dos porfes bien diferenciodos, hordwore y
soffwore. EI hurdwure consfo de Ios porfes fsicos, fongibIes de Io compufodoro. EI
softwure consfo de progromos, fombien IIomodos opIicociones, que confienen
insfrucciones que Io compufodoro "ejecufo" o "corre".
Uno compufodoro necesifo fonfo deI hordwore como deI soffwore poro poder
ser usodo reoI y procficomenfe. EI hordwore de Io compufodoro sin eI soffwore que
Ie ocompoo es como si fuvieromos un Iibro con poginos en bIonco. Lo porfodo,
confroporfodo y Ios poginos inferiores consfifuyen eI hordwore deI Iibro, pero eI
Iibro no es fiI sin ningn fexfo, eI soffwore.
I4
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
EI hurdwure
Los compufodoros esfon compuesfos en su moyoro por fronsisfores, en donde
Ios fronsisfores en su niveI mos bosico hocen Io mismo que un inferrupfor, dejon o no
posor energo.
NomencIuturu:
Tronsisfor encendido Tronsisfor opogodo
ON = 1 = bit OFF = 0 = bit
bit ~ es Io mnimo confidod de informocion posibIe de ser monipuIodo.
Yo que eI bif es muy pequeo se vio Io necesidod de ogruporIos, poro su
mencion, en confidodes mos grondes.
8 bits = 1 byte
Debido o que Ios necesidodes informoficos son codo ve; mos grondes se uson
ogrupociones mos y mos grondes, por ejempIo:
1 bit (b) = 1 cero o 1 uno
1 Byte (B) = 8 bits (b)
1 Kilo Byte (Kb) = 1024 bytes
1 Mega Byte (Mb) = 1024 Kb
1 Giga Byte (Gb) = 1024 Mb
1 Tera Byte (Tb) = 1024 Gb
1 Peta Byte (Pb) = 1024 Tb
etc..
Ofro coso que infereso o Io horo de hobIor de compufodoros es Io veIocidud
deI procesudor, Todos somos impocienfes y queremos que nuesfro compufodoro
Ib
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
funcione Io mos ropidomenfe posibIe.
Exisfen diferenfes focfores que deferminon con que ropide; Io compufodoro
ejecufo Ios frobojos. Lo VeIocidod deI Procesodor es un focfor. Pero que es Io que
defermino Io veIocidod deI procesodor7
Lu VeIocidud deI Procesudor es ufectudu por:
ReIog ReIog deI Sistemu = Un puIso eIecfronico que es usodo poro sincroni;or eI
procesomienfo. (Enfre puIso y puIso soIomenfe puede fener Iugor uno soIo occion).
Medido en megoherf; (MH;) donde I MH;~ I miIIon de cicIos por segundo o
gigoherf; (0H;) donde I 0H; ~ I cicIos de miI miIIones por segundo.
De esfo es Io que esfon hobIondo cuondo dicen que uno compufodoro es uno moquino
de Z.8 0h;. Lo veIocidod de su reIoj es de Z.8 miI miIIones de cicIos por segundo.
Cuonfo mos gronde eI nmero ~ mos ropido eI procesomienfo
Ancho deI us = Es Io confidod de dofos que Io CPU puede fronsmifir en codo
momenfo hocio IIo memorio principoI y o Ios disposifivos de enfrodos y soIidos. (fodo
comino poro conducir bifs es un bus).
Un bus de 8 bifs mueve en codo insfonfe 8 bifs de dofos.
EI oncho deI 8us puede ser de 8, Io, 3Z, o4, o IZ8 bifs, hosfo ohoro.
Piense en eIIo como "cuonfos posojeros (bifs) puede cober en deferminodo momenfo,
denfro deI oufobs o fin de frosIodorse de uno porfe de Io compufodoro o ofro."
Cuonfo mos gronde seo eI nmero ~ mos ropido sero Io fronsferencio de dofos.
Tumuo de Iu puIubru = Uno poIobro es Io confidod de dofos que Io CPU puede
procesor en un cicIo de reIoj.
Un procesodor de 8 bifs puede monejor 8 bifs codo ve;. Los procesodores pueden
Io
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
ser, hosfo ohoro, de 8, Io, 3Z, o o4 bifs.
Cuonfo mos gronde seo eI nmero ~ mos ropido sero eI procesomienfo
Es necesorio Io pIeno coincidencio enfre eI fomoo de Io poIobro, fomoo deI
bus y eI reIoj. Mo serviro de nodo fener un bus que enfregue IZ8 bifs codo ve;, si Io
CPU soIo puede, ufiIi;or 8 bifs y fiene un reIoj de bojo veIocidod. Se formoro uno
enorme fiIo de dofos esperondo poder soIir deI busl Cuondo Ios compufodoros se
sofuron como en ese coso, pueden suceder cosos indeseobIes con sus dofos.
Es como si Ios especfodores esperoron en uno Iorgo coIo poro enfror oI cine,
oIgunos podron irsell
I7
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Componentes sicos de Ius Computudorus
Microprocesudor Microprocesudor
Es eI eIemenfo mos imporfonfe denfro deI compufodor, normoImenfe Ios
personos conocen oI equipo por eI nombre deI procesodor y se define: Io veIocidod
deI proceso, coIidod, coIenfomienfo y rendimienfo en generoI.
Turgetu PrincipuI Turgetu PrincipuI
Es eI Iugor donde se coIoco eI microprocesodor, generoImenfe es Io forjefo
mos gronde denfro deI equipo, defermino Io coIidod, esfobiIidod deI sisfemo y
compofibiIidod deI hordwore.
Turgetu de video Turgetu de video
Debido oI desorroIIo de juegos y progromos codo ve; mos compIejos Ios
necesidodes groficos crecen en formo obrumodoro, foI es Io necesidod que Ios
fobriconfes se ven obIigodos o desorroIIor Torjefos y Ponuros poro videos
especioIes poro dor mos veIocidod o Ios groficos ofecfondo en especioI o Io
esfrucfuro de Io forjefo principoI.
Memoriu RAM Memoriu RAM
Lo memorio principoI o PAM (Pondom Access Memory, Memorio de Acceso
AIeoforio) es uno memorio femporoI, donde se guordon Ios dofos que se esfon
ufiIi;ondo en eI momenfo presenfe (fodo Io que se ve en ponfoIIo), mienfros mos
memorio mejor. Lo diferencio enfre Io PAM y ofros fipos de memorio de
oImocenomienfo, como Ios disquefes o Ios discos duros, es que Io PAM es mucho mos
ropido y que se borro oI opogor eI equipo.
Disco Duro Disco Duro
Sirven como unidod de oImocenomienfo mosivo, es donde se guordo fodo Io
informocion, incIuyendo eI sisfemo operofivo y no se borro oI opogor eI equipo.
I8
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Torre Torre
LIomodo fombien Cose o Cojo o 0obinefe. Anfiguomenfe eI cose no ero
imporfonfe, ohoro no soIo sirve poro que eI equipo se veo bien sino que se convirfio
en un eIemenfo bosico poro eI buen funcionomienfo de Io compufodoro.
Dispositivos Dispositivos
Pueden o no necesiforse, dependiendo deI uso, esfos son: FIoppy Drive
(disquefero), CD-POM (Iecfor), CD-PW (quemodor), DVD (Iecfor de DVD), DVD-PW
(quemodor DVD), ZIP Drive, LS IZ0, Iecfores de forjefos mIfipIes (SD, MS,
PCMCIA, efc.)
Perifricos Perifricos
SueIen ser Ios disposifivos que se conecfon exfernomenfe oI equipo como:
Monifor, TecIodo, Mouse, Impresoro, Sconner, Joysfick / gomepod, comoros, efc.
A confinuocion uno compufodoro y sus porfes expIicodos:
I9
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
EI Softwure
Los operociones que debe reoIi;or eI hordwore son especificodos por uno Iisfo
de insfrucciones, IIomodos progromos o soffwore. EI soffwore se divide en dos
grondes grupos: soffwore deI sisfemo y soffwore de opIicociones.
EI softwure deI sistemu es eI conjunfo de progromos indispensobIes poro que
Io moquino funcione. Esfos progromos son, bosicomenfe, eI sisfemo operofivo, Ios
edifores de fexfo, Ios compiIodores/inferprefes (Ienguojes de progromocion) y Ios
progromos de ufiIidod.
Uno de Ios progromos mos imporfonfes es eI sistemu operutivo, que sirve,
esencioImenfe poro fociIifor Io exisfencio, ejecucion y produccion progromos. EI
sisfemo operofivo dirige Ios operociones gIoboIes de Io compufodoro, insfruye o Io
compufodoro poro ejecufor ofros progromos y confroIo eI oImocenomienfo y
recuperocion de orchivos (progromos y dofos) de disposifivos de oImocenomienfo.
Z0
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Un progromo es un conjunfo de insfrucciones que confroIon (dirigen) o uno
compufodoro, mos formoImenfe, un progromo de compufodoro es un conjunfo de
infroducciones infernos ufiIi;odos poro ejecuforse en uno compufodoro y que
produ;co un resuIfodo concrefo. Ofro fermino poro un progromo o conjunfo de
progromos es soffwore, ombos ferminos se ufiIi;on indisfinfomenfe. EI proceso de
escribir un progromo, o soffwore, se denomino progrumucin y eI conjunfo de
insfrucciones que se pueden ufiIi;or poro consfruir un progromo se denomino
Ienguuge de progrumucin. As pues, Ios Ienguojes ufiIi;odos poro escribir
progromos de compufodoros son Ios Ienguojes de progromocion y progromodores son
Ios escrifores y diseodores de progromos.
Los Lenguuges de Progrumucin
Los Ienguojes de progromocion sirven poro escribir progromos que permifen Io
comunicocion persono/moquino.
EI proposifo de un Ienguoje de progromocion es permifir o Ios personos
comunicorse con uno compufodoro. Los Ienguojes de Ios personos y Ios Ienguojes de
Io moquino son muy diferenfes, yo que Ios corocfersficos y posibiIidodes de Ios
personos y de Ios moquinos son muy diferenfes. Los Ienguojes de progromocion
permifen o Ios personos escribir en un Ienguoje que seo mos opropiodo o Ios
corocfersficos humonos y se puedon froducir oI Ienguoje moquino de diferenfes
fipos de moquinos.
Los principoIes fipos de Ienguojes ufiIi;odos:
Ienguojes moquino
insfrucciones binorios (ceros y unos)
soIo Io moquino puede enfenderIo
Ienguojes de bojo niveI (ossembIer)
insfrucciones nemofecnicos o Ios binorios
pueden enfenderIo Ios personos
Ienguojes de oIfo niveI
insfrucciones en Ienguoje fociI de Ieer por Ios personos
es fociI escribir y enfender poro Ios personos
ZI
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Los Ienguojes de progromocion de oIfo niveI exisfenfes hoy en do
I
son muy
numerosos, ounque Io procfico demuesfro que Ios mos usodos se reducen o:
- C - PYTHOM - JAVASCPIPT
- C# - C++ - PU8Y
- JAVA - PHP
Unos progromos especioIes IIomodos froducfores (compiIodores o inferprefes)
convierfen Ios insfrucciones escrifos en un deferminodo Ienguoje de progromocion
en insfrucciones escrifos en eI Ienguoje que Io moquino se sobe y enfiende muy bien
(0 y I, bifs).
EI proposifo de un Ienguoje informofico (Ienguoje de compufodoro) es
permifir o Ios personos comunicorse con uno compufodoro. Los Ienguojes de Ios
humonos y Ios Ienguojes de Io moquino son muy diferenfes, yo que Ios corocfersficos
y posibiIidodes de Ios personos y de Ios moquinos son muy diferenfes.
Truductores de Ienguuge
Los froducfores de Ienguoje son progromos que froducen Ios progromos
fuenfe escrifos en un Ienguoje enfendibIe por personos o un Ienguoje que Io moquino
enfiendo.
Los froducfores se dividen en:
Intrpretes: que son froducfores que fomon un progromo fuenfe, Io froducen y o
confinuocion Io ejecufon.
CompiIudores: generon un progromo equivoIenfe que Io moquino sero copo; de
inferprefor.
I Diciembre de Z007
ZZ
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Lu progrumucin
Despues que se ho diseodo y pensodo como resoIver eI probIemo en popeI, se
debe comen;or eI proceso de infroducir eI progromo en un orchivo en eI disco duro
de Io compufodoro. Lo infroduccion y modificocion de su progromo en un orchivo se
hoce ufiIi;ondo un simpIe edifor de fexfo o un edifor especioIi;odo que hoce Io foreo
de escribir un progromo uno foreo muy fociI.
EI progromo que se infrodu;co en eI edifor, esforo escrifo en Jovo o C++ o
cuoIquier ofro, pero ni C++ ni Jovo son Ienguojes moquino, muy oI confrorio, como yo
se menciono, son Ienguojes de oIfo niveI diseodos poro hocer mos fociI Io
progromocion que ufiIi;ondo eI Ienguoje moquino. Pero o Io ve;, uno compufodoro no
enfiende Ios Ienguojes de oIfo niveI. En consecuencio, un progromo escrifo en un
Ienguoje de oIfo niveI debe ser froducido o un Ienguoj que Io moquino puedo
comprender. Los Ienguojes que Io compufodoro puede comprender (mos o menos
direcfomenfe) son Ios Ienguojes de bojo niveI. Lo froduccion de un progromo escrifo
en un Ienguoje de oIfo niveI, como C++ o Jovo, o un Ienguoje que puedo enfender Io
compufodoro se hoce medionfe ofro progromo conocido como compiIudor.
Los Ienguojes de bojo niveI que Io compufodoro puede enfender direcfomenfe
se conocen como Ienguojes ensombIodor o Ienguojes moquino. En reoIidod, ounque son
muy simiIores y en ocosiones se Ies considero sinonimos, fienen oIgunos pequeos
diferencios. EI Ienguoje que Io compufodoro puede comprender direcfomenfe es eI
Ienguoje moquino. EI Ienguoje ensombIodor es cosi Io mismo coso, pero necesifo un
poso odicionoI poro que Io froduccion puedo ser enfendido por Io moquino. Si un
compiIodor froduce su progromo de oIfo niveI o oIgn Ienguoje de bojo niveI, no es
exocfomenfe Ienguoje de moquino, se necesifo uno pequeo froduccion odicionoI
onfes de ser ejecufodo, pero normoImenfe esfe proceso sueIe ser oufomofico y no
es probIemo.
Z3
Hacer un programa en un lenguafe de programacion es escribir
el programa, compilarlo v luego efecutarlo.
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Historiu de Ios Ienguuges de progrumucin
Lo hisforio de Io informofico y de Io compufocion se ho corocferi;odo
fundomenfoImenfe en Io exisfencio de cenfenores de Ienguojes de progromocion,
exisfen muchos reoImenfe, de ohi que se sueIe hobIor de "Lo 8obeI de Ios Ienguojes
de progromocion", ounque de esfos cenfenores de Ienguojes, son pocos Ios Ienguojes
que hon pisodo fuerfe, que hon fenido un impocfo significofivo.
Muchos de Ios Ienguojes de progromocion ocfuoIes fienen sus roces en Ios
Ienguojes que nocieron o finoIes de Ios cincuenfo y primeros oos de Ios sesenfo,
foIes como: CO8OL, FOPTPAM, 8ASIC, LO0O. Esfos Ienguojes represenforon Io
primero oIfernofivo o Ios Ienguojes ensombIodores. En Io decodo de Ios sefenfo y
primeros oos de Ios ochenfo emergieron nuevos Ienguojes como: AL0OL, 8ASIC,
SIMULA, SMALLTAI. A mediodos de Ios ochenfo y principios de Ios novenfo se
presenforon C, C++, JAVA. Y uno de Ios Ifimos Ienguojes que se vino en eI oo Z000
es C#.
Z4
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Purudigmus de Progrumucin
Lo progromocion como cuoIquier ofro orfe, por ejempIo Los Arfes MorcioIes,
posee diferenfes esfiIos, fecnicos o modos de pensor diferenfes poro progromor:
Progrumucin Estructurudu ProceduruI o Imperutivu, en eI que Ios progromos
se dividen en procedimienfos independienfes con occeso fofoI o dofos comunes.
EjempIos de esfos fipos de progromos son: C, FOPTPAM, 8ASIC.
Progrumucin FuncionuI, en eI que eI resuIfodo de un coIcuIo es Io enfrodo deI
siguienfe, os hosfo que se produce eI voIor deseodo. HASIELL es un ejempIo
moderno.
Progrumucin Orientudu u Obgetos, en eI que Ios dofos se consideron Io porfe
mos imporfonfe deI progromo, de modo que se ogrupon en objefos. Los objefos
modeIon Ios corocfersficos de Ios probIemos deI mundo reoI, su comporfomienfo
onfe esfos corocfersficos y su formo de inferocfuor con ofros eIemenfos.
SMALLTALI, JAVA son oIgunos de Ios Ienguojes que soporfon esfe porodigmo.
Zb
Algoritmos + Estructuras de Datos = Programas
Objetos + Mensajes = Programas
Funciones + Estructuras de Datos = Programas
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
EI Ienguuge de Progrumucin Juvu
Jovo surgio en I99I cuondo un grupo de ingenieros de Sun Microsysfems
froforon de diseor un nuevo Ienguoje de progromocion desfinodo o
eIecfrodomesficos.
Lo hisforio vo mos o menos os: En I99I, Sun Microsysfems finoncio un
proyecfo de invesfigocion corporofivo inferno. Un resuIfodo deI proyecfo fue Io
creocion de un Ienguoje bosodo en C y C++ que su creodor, Jomes 0osIing, IIomo Ook,
inspirodo por un robIe (ook, en ingIes) que creco ofuero de su venfono en Sun. Mos
forde se descubrio que yo exisfo un Ienguoje de progromocion IIomodo Ook. Un do
cuondo un grupo de empIeodos de Sun visifo uno cofefero cerco, oIguien sugirio eI
nombre Jovo (como se conoce fombien en ingIes oI cofe), y eI nombre gusfo mucho.
Sun onuncio formoImenfe o Jovo en uno conferencio imporfonfe en moyo de I99b.
Trece oos despues de su Ion;omienfo oficioI, Jovo se ho converfido en un
esfondor de Io indusfrio, en un Ienguoje de progromocion poro desorroIIo de
opIicociones fonfo de proposifo generoI como de Infernef y fombien en un Ienguoje
poro comen;or Io formocion en progromocion, oI fener corocfersficos odecuodos
poro eI oprendi;oje.
Ofros cosos mos sobre jovo:
Creodor de Jovo Logo de Jovo Moscofo de Jovo
Zo
Jomes 0osIing
To;o de cofe
Duke
Estructuras de Datos en Java Cristian Denis Mamani Torres
ntroduccin a la Programacin xjkwak@gmail.com
Prcticu 1 - Introduccin u Iu Informticu
I. Define Ios siguienfes ferminos:
o) progromo de compufodoro
b) progromocion
c) Ienguoje de progromocion
d) Ienguoje de oIfo niveI
e) Ienguoje moquino
f) Ienguoje ensombIodor
g) compiIodor
h) inferprefe
Z. Averiguo y enumero Ios diferenfes fipos de Ienguojes de progromocion
ufiIi;odos o Io Iorgo de Ios diferenfes generociones de compufodoros.
3. Averiguo y describe Ios corocfersficos mos sobresoIienfes de Jovo.
4. Crees que infIuye eI conocimienfo deI hordwore en Io formocion deI
oprendi;oje de Io progromocion7
b. Ho; uno Iisfo de sisfemos operofivos que cono;cos.
Z7
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Progrumucin Orientudu u Obgetos
Progrumucin Orientudu u Obgetos
Introduccin
Lo progromocion orienfodo o objefos (POO), es uno de Ios mos grondes ideos
en eI compo de Io progromocion duronfe Ios oos recienfes. Todo se reduce o
orgoni;or Ios progromos en formos que von o pIosmor eI mundo reoI poro
represenforIo en un mundo de compufodoro.
Lo cIove en esfo formo de progromor son Ios objefos que nos rodeon. Esfos
objefos pueden ser cosos fsicos como personos, cosos, siIIos, efc. o cosos Iogicos
como eI cIimo, Io horo, Io fecho, efc.
Lo POO nos permifiro resoIver probIemos de Io vido reoI usondo objefos de Io
vido reoI.
Z8
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Pensur en obgetos: unu unuIogu
Vomos o hobIor de Ios rosfis. Los rosfis o Iegos, si es que no posos mucho
fiempo con nios, son pequeos bIoques de consfruccion de pIosfico en vorios coIores
y fomoos. Esfos fienen pequeos porfes circuIores en un Iodo, que encojo en
pequeos orificios circuIores en ofros rosfis poro unirse, de monero ojusfodo, o fin
de creor formos mos grondes. Con diferenfes porfes de rosfis (ruedos, moquinos,
bisogros y poIeos), Ios nios pueden consfruir cosfiIIos, oufomoviIes, robofs o
cuoIquier ofro figuro que puedos imoginorfe.
Aqu esfo ofro ejempIo: puedes enfror o uno fiendo donde venden porfes de
compufodoros y con un poco de conocimienfo bosico (y con frecuencio oIgo de oyudo
de fu cuofe), ensombIor uno PC compIefo con vorios componenfes: uno forjefo
modre, un chip CPU, uno forjefo de video, un disco duro, un fecIodo, efc. Lo ideoI
sero que, cuondo fermines de ensombIor fodos Ios diferenfes unidodes individuoIes,
fengos un sisfemo en donde fodos Ios unidodes creon un sisfemo mos gronde, con eI
cuoI puedes soIucionor Ios probIemos por Ios que comprosfe en un principio Io
compufodoro.
En su esfrucfuro inferno (su impIemenfocion), codo uno de esfos componenfes
puede ser muy compIicodo y ser de disfinfos fobriconfes que ufiIi;on disfinfos
mefodos de diseo. Pero no necesifomos sober como funcionon Ios componenfes, que
hoce codo chip en Io forjefo, o como, cuondo presiono Io fecIo A, se envo uno "A" o Io
compufodoro. Codo componenfe que se ufiIi;o es uno unidod individuoI, y fodo Io que
infereso es como inferocfon Ios unidodes enfre s. Encojoro esfo forjefo de video
en Ios ronuros de Io forjefo modre y funcionoro esfe monifor con esfo forjefo de
video7 Se comunicoro codo componenfe en porficuIor con Ios comondos correcfos o
Ios demos con quienes inferocfon, poro que codo porfe de Io compufodoro se
enfiendo con fodos Ios demos7 Uno ve; que conocemos Ios inferocciones que hoy
enfre Ios componenfes y Io formo en que coinciden con oqueIIos, es senciIIo ormor
uno compufodoro.
Que fiene que ver esfo con Io progromocion7 Todo. Lo POO funciono de esfo
monero. AI ufiIi;orIo, eI progromo generoI esfo formodo por componenfes
individuoIes (objefos) numerosos y diferenfes, codo uno de Ios cuoIes reoIi;oro su
popeI en eI progromo y fodos se comunicoron en formos predefinidos.
Z9
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Obgetos y cIuses
Lo progromocion orienfodo o objefos esfo modeIodo sobre como, oI iguoI que
en eI mundo reoI, Ios objefos con frecuencio esfon formodos por vorios fipos de
objefos mos pequeos. Esfo copocidod de combinor objefos, sin emborgo, soIo es un
ospecfo muy generoI de Io progromocion orienfodo o objefos. Esfo proporciono ofros
concepfos y corocfersficos poro hocer mos fociI y mos fIexibIe Io creocion y
ufiIi;ocion de objefos, donde Io mos imporfonfe de esfos corocfersficos son Ios
cIoses.
Uno cIose es uno pIonfiIIo poro mIfipIes objefos con corocfersficos simiIores.
Los cIoses comprenden fodos Ios corocfersficos de uno serie porficuIor de objefos.
Vomos o ver cuoI es Io diferencio bosico enfre cIoses y objefos. Por ejempIo,
si nos ponemos o hobIor de poImeros, eucoIipfos, pinos... de que esfomos hobIondo
reoImenfe7 Pues de orboIes. Enfonces podromos confor con uno cIose ArboI que
describo Ios corocfersficos de fodos Ios orboIes (fienen hojos y roces, crecen,
creon cIorofiIo, efc). Lo cIose ArboI sirve como un modeIo obsfrocfo poro eI
concepfo de un orboI, poro oIcon;or y sujefor, o inferocfuor con eI, o corforIo
fendro que poseer uno insfoncio concrefo deI mismo. Por supuesfo, en cuonfo fengo
uno cIose orboI, puede creor muchos insfoncios deI mismo, y codo diferenfe insfoncio
puede fener diversos corocfersficos (bojo, oIfo, frondoso, combio de hojos en eI
ofoo), mienfros fodovo se compone y se recono;co como orboI.
30
Una clase es un molde o plantilla de obfetos...
Un obfeto es una instancia particular de una clase..
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
As que, cuoI es Io diferencio exocfo enfre uno insfoncio y un objefo7 En
reoIidod ninguno. Objefo es eI fermino mos generoI, pero fonfo Ios insfoncios como
Ios objefos son Io represenfocion concrefo de uno cIose. De hecho, Ios ferminos
insfoncio y objefo con frecuencio se ufiIi;on en formo indisfinfo en eI Ienguoje
POO. Uno insfoncio de un orboI y un objefo orboI son Io mismo.
3I
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Prcticu Z - CIuses y Obgetos
I. CompIefo Io siguienfe fobIo coIocondo eI fipo de objefos o ejempIos de
objefos (mnimomenfe 3) y eI nombre de cIose segn Io nomencIofuro Jovo
(Mombre propio, empe;ondo con moyscuIo y singuIor). Despues poro codo
cIose, reoIi;or un diogromo de cIose indicondo mnimomenfe Z ofribufos.
Tipo de Obgetos CIuse Juvu Obgetos
Puntos Punto {Z} - {1-3} - {01}
Poses
Jovo, C#, C++
Docenfes
I0:30 - Ib:4b - 8:00
PIonefos
I4/09/Z007, Zb/IZ/Z00o, I4/08/Z003
Sisfemos
Operofivos
13X
2
, -7X
3
, 3XY
5
CeIuIores
b 8s, I0 $us, I 8s
Universidodes
Hifochi de 80 0b
Moxfor de IZ0 0b
Somsumg de Io0 0b
AIgebro I, CoIcuIo II, Fsico III
I4/7, I/Z, 3/4
3Z
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Anfes de confinuor veomos un concepfo que es muy imporfonfe en progromocion y
sobre fodo en progromocion orienfodo o objefos.
Lu ubstruccin
Lo obsfroccion visfo desde eI punfo de visfo de Io progromocion orienfodo o
objefos expreso Ios corocfersficos esencioIes de un objefo denfro un confexfo en
porficuIor, Ios cuoIes disfinguen oI objefo de Ios demos. Ademos de disfinguir enfre
Ios objefos provee Imifes concepfuoIes. Enfonces se puede decir que Io
encopsuIocion seporo Ios corocfersficos esencioIes de Ios no esencioIes denfro de un
objefo. Si un objefo fiene mos corocfersficos de Ios necesorios Ios mismos
resuIforon difciIes de usor, modificor, consfruir y comprender.
Lo mismo genero uno iIusion de simpIicidod dodo o que minimi;o Io confidod de
corocfersficos que definen o un objefo.
EI confexfo en eI que se onoIi;o oI objefo es imporfonfe, yo que de eIIo
dependero Io obsfroccion que reoIicemos. Por ejempIo, Io imporfoncio que fiene Io
cobe;o poro un psicoIogo es muy diferenfe o Io imporfoncio que fiene Io cobe;o poro
un peIuquero.
Vs,
EJERCICIO.- Indico Io formo de IIegor o fu coso. Poro esfe ejercicio puedes ufiIi;or
cuoIquier formo de represenfocion.
33
La abstraccion es centrarse en lo mas importante v defar a un
lado lo irrelevante dentro un contexto en particular...
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Duronfe oos, Ios progromodores se hon dedicodo o consfruir opIicociones
muy porecidos que resoIvon uno y ofro ve; Ios mismos probIemos. Poro conseguir que
Ios esfuer;os de Ios progromodores puedon ser ufiIi;odos por ofros personos se
creo Io POO, que es uno formo de progromor que enfofi;o descubrir Ios objefos deI
mundo reoI en un confexfo porficuIor, simuIondoIos en objefos compufocionoIes.
Lo POO no es difciI, pero es uno monero especioI de pensor, o veces subjefivo
de quien Io progromo, de monero que Io formo de hocer Ios cosos puede ser
diferenfe segn eI progromodor. Aunque podomos hocer Ios progromos de formos
disfinfos, no fodos eIIos son correcfos, Io difciI no es progromor orienfodo o
objefos sino progromor bien. Progromor bien es imporfonfe porque os podemos
oprovechor fodos Ios venfojos de Io POO.
Cmo se piensu en obgetos?
Pensor en ferminos de objefos es muy porecido o como Io horomos en Io vido
reoI. Por ejempIo vomos o pensor en un coche poro frofor de modeIi;orIo en un
esquemo de POO. Diromos que eI coche es eI eIemenfo principoI que fiene uno serie
de corocfersficos (ofribufos), como podron ser eI coIor, eI modeIo o Io morco.
Ademos fiene uno serie de funcionoIidodes osociodos (mefodos), como pueden ser
ponerse en morcho, poror o esfocionorse.
34
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Pues en un esquemo POO eI coche sero eI nombre generoI (cIose) que
ufiIi;omos poro referirnos o un conjunfo de objefos con Ios mismos corocfersficos y
Ios mismos funcionoIidodes, Ios ofribufos seron Ios corocfersficos como eI coIor o
eI modeIo y Ios mefodos seron Ios funcionoIidodes osociodos como ponerse en
morcho o poror.
Por poner ofro ejempIo vomos o ver como modeIoriomos en un esquemo POO o
Ios frocciones ([, , efc.). un objefo froccion, es eso esfrucfuro mofemofico que
fiene un numerodor y un denominodor que divide oI numerodor, por ejempIo 3/Z.
Froccion sero eI nombre que Ie demos o esfo cIose de objefos y fendro dos
ofribufos, eI numerodor y eI denominodor. Luego podro fener vorios mefodos como
simpIificorse, sumorse, resforse, muIfipIicorse, dividirse con ofro froccion o nmero,
efc.
Esfos objefos se podron ufiIi;or en Ios progromos, por ejempIo en un
progromo de mofemoficos horos uso de objefos froccion y en un progromo que
gesfione un foIIer de coches ufiIi;oros objefos coche.
3b
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Atributos y Mtodos
Ahoro bien, codo cIose esfo, por Io generoI, compuesfo de dos componenfes:
utributos, indicon corocfersficos comunes de Ios objefos
mtodos, indicon comporfomienfo simiIor de Ios objefos
Atributos
Los ofribufos son Ios corocfersficos individuoIes que diferencion o un objefo
de ofro, y deferminon Io oporiencio, esfodo u ofros cuoIidodes de ese objefo.
Por ejempIo, suponiendo que queremos modeIor o Ios personos, creomos uno
cIose IIomodo Persona, y poro ver cuoIes seron sus ofribufos pensemos en uno
persono, uno individuo en porficuIor y seguro muy conocido poro fi: Homero
Simpson... Vomos o decir que Homero esfo viejo, seguromenfe fe imoginoros o
Homero muy oduIfo, coIvo, de unos b0 oos. Es decir, openos yo digo Homero esfo
viejo, y yo enfros en uno serie de ro;onomienfos Iogicos y concIuyenfes poro copfor
cIoromenfe Io que yo quise decir. Que fue Io que describ de Homero7 Muy senciIIo,
describ un ofribufo.
A veces Ios ofribufos pueden IIegor o describirse de uno formo muy reIofivo.
Yo que si Homero fuviero unos 30 oos no sero fon viejo poro personos deI Io mismo
edod, poro personos mos jovenes si sero oIgo viejo y poro Ios nios si sero muy
viejo. Cuondo se describe de eso formo un ofribufo depende mucho de quien do eI
concepfo. IguoI como cuondo un hombre dice que uno deferminodo mujer es
hermoso, pues Io que poro eI es hermoso puede que poro ofros no Io seo fonfo. Por
esfo ro;on es mejor expresor Ios ofribufos de monero que seon fosodos o froves de
uno escoIo yo que esfos Ios hoce monejobIes y no reIofivos. Esfo doro Iugor o Io
presencio de un concepfo muy imporfonfe en Informofico: EI Duto, En Iugor de
decir Homero esfo viejo podromos decir Homero fiene 40 oos. En esfe coso, o
pesor de que Ios ro;onomienfos y concIusiones seon Ios mismos, podemos dejor oI
Iibre concepfo de quien seo.
3o
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
EI duto
EI dofo es un ofribufo codificodo en ferminos enfendibIes o un sisfemo
compufori;odo, en condiciones que seon monejobIes y comporobIes de monero cosi
obsoIufo.
Sin emborgo un dofo, soIo, no significo nodo o menos que se fengo cIoridod de
cuoI es eI ofribufo que eI esfo describiendo. Por ejempIo, si yo dijero que eI dofo es
7. Que pensoros que significo esfe dofo7 Lo confidod de compufodoros que fengo o
Io confidod de novios que fengo o Io confidod de oufos que fengo o Io edod que fengo
o ... reoImenfe no fendros ideo deI significodo de dicho dofo. Poro eIIo, vendro sobre
nosofros un concepfo que ocIororo Ios cosos: Iu vuriubIe.
Lu VuriubIe
Uno voriobIe se represenfo con un nombre significofivo oI ofribufo que
represenfo, un idenfificodor que hoce referencio o un Iugor de Io memorio principoI
y oImoceno un dofo.
Pero es necesorio especificor que fipos de dofo se puede oImocenor en uno
voriobIe, poro eso exisfen Ios fipos de dofos que se encorgon de resfringir eI dofo
que puede oImocenorse en uno voriobIe.
Tipos de Dutos en Juvu Tipos de Dutos en Juvu
En Jovo se definen Z fipos de dofos:
fipos primifivos
fipos referencio
Los tipos primitivos son 8 ogrupodos en cuofro cofegoros:
e Iogico: booIeon, oImoceno voIores o dofos Iogicos como frue o foIse.
e fexfo: chor, oImoceno voIores o dofos corocferes como o
e enfero: byfe, shorf, inf, Iong, oImoceno voIores numericos enferos.
e reoI: fIoof, doubIe, oImoceno voIores numericos reoIes.
37
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
TubIu de tipos de dutos primitivos TubIu de tipos de dutos primitivos
Rango de Valores
Tipo Contiene Defecto Tamao Min Max
boolean True o false False 8 bits - -
char Caracter Unicode \u0000 16 bits \u0000 \uFFFF
byte Entero con signo 0 8 bits -128 127
short Entero con signo 0 16 bits -32768 32768
int Entero con signo 0 32 bits -2147483648 2147483647
long Entero con signo 0 64 bits -9223372036854775808 9223372036854775808
float EEE 754 estndar
punto flotante
0.0 32 bits 3.40282347E+38 1.40239846E-45
double EEE 754 estndar
punto flotante
0.0 64 bits 1.79769313486231570E+308 4.94065645841246544E-324
Los tipos referenciu son soIo referencios o ofros objefos. En reoIidod Io que
hocemos cuondo creomos uno cIose poro modeIor objefos, es creor un nuevo fipo de
dofo objefo, mos conocido como fipos referencio.
AIgunos fipos referencio de ejempIo:
Tipo Referencia Tamao
String Literales o cadenas de texto 32 bits
nteger Un entero con signo 32 bits
Long Un entero grande con signo 32 bits
Short Un entero corto con signo 32 bits
Double Un nmero real 32 bits
Float Un nmero real 32 bits
Character Un caracter Unicode 32 bits
Persona Un objeto persona 32 bits
Coche Un objeto coche 32 bits
Fraccion Un objeto fraccion 32 bits
VoIviendo oI ejempIo, nuesfro frose inicioI Homero esfo viejo, que Iuego se
convirfio en Homero fiene 40 oos. podromos ohoro enunciorIo como Lo edod de
Homero es 40. En esfe insfonfe, o pesor de que podemos obfener Ios mismos
concIusiones que en Ios froses posodos, yo fenemos idenfificodo de monero cIoro y
38
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
con un nombre eI ofribufo que se esfo describiendo. Esfe es eI concepfo de VuriubIe
o Cumpo que no es mos que eI nombre que se Ie coIoco o un dofo poro idenfificor eI
ofribufo que esfo describiendo. Ademos podemos especificor eI fipo de dofo que
fendro esfo voriobIe que sero inf puesfo que Io edod es un voIor enfero.
As en nuesfro frose Lo edod de Homero es 40, fenemos fres ofribufos
cIoromenfe idenfificodos (fres...777) S, fres ofribufos, fres compos, fres voriobIes:
eI primero de eIIos es Io edod, ofribufo con eI cuoI hemos esfodo reoIi;ondo fodo Io
expIicocion, eI segundo es eI nombre de Io persono de quien esfomos hobIondo y yo
sobemos que es Homero y eI fercero es eI sexo pues podemos oseguror que Homero
es de sexo moscuIino.
De foI formo que si orgoni;oromos Io informocion de Io que hemos hobIodo
hosfo eI momenfo podromos hocer un pequeo esquemo como eI que se presenfo o
confinuocion:
Los ofribufos de Io persono:
nombre de fipo LiferoI (Sfring)
edod de fipo enfero o (Inf)
sexo de fipo LiferoI (Sfring)
Nombre Edud Seo
Homero 40 oos. MoscuIino
IncIuso podromos fener informocion de ofros objefos deI mismo fipo:
Nombre Edud Seo
Homero 40 oos MoscuIino
8orf I0 oos MoscuIino
Liso 8 oos Femenino
Morge 3b oos Femenino
39
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Mtodos
Los mefodos refIejon eI comporfomienfo de Ios objefos. EI comporfomienfo
de cIose defermino que insfoncios de eso cIose requieren combior su esfodo inferno
o cuondo eso insfoncio es IIomodo poro reoIi;or oIgo por ofro cIose u objefo. EI
comporfomienfo es Io nico monero en que Ios objefos pueden hocerse oIgo o s
mismos o fener que hocerIes oIgo.
AIgunos comporfomienfos poro nuesfro cIose de ejempIo:
suIudur como hoIo soy Homero
dumeTuEdud como 40 o Ib
40
Homero Bart
Marge Lisa
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Los mefodos son Io inferfo; de comunicocion deI objefo con eI mundo
exferior, permifen mondor mensojes o Ios objefos poro que reoIicen cosos.
Por ejempIo: Si oIguno ve; jugosfe Morio 8ross o un video juego porecido,
recordoros que poro hocer que Morio soIfe o bofe fuego hobo que oprefor oIgunos
bofones deI mondo, pues os es Io ufiIi;ocion de Ios mefodos de un objefo, en esfe
coso poro hocer que eI objefo Morio soIfe, pues Ie mondomos un mensoje desde eI
mondo poro esfo, oprenfondo un bofon, si quisieromos que bofe fuego, pues
oprefomos ofro bofon.
Los mefodos no siempre ofecfon o un soIo objefo, Ios objefos fombien se
comunicon enfre s medionfe eI uso de mefodos. Un objefo puede IIomor o mefodos
en ofro objefo poro ovisor sobre Ios combios en eI ombienfe o poro soIiciforIe o ese
objefo que combie su esfodo.
4I
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Creundo nuestru primeru cIuse utiIizundo IueJ
Hosfo eI momenfo hemos reposodo oIgunos concepfos que son imporfonfes,
pero dejemos o un Iodo Io porfe feorico y voyomonos o Io procfico. En esfo seccion
oprenderemos o creor nuesfro cIose de ejempIo IIomodo Persono, o fin de que se
observe como se definen Ios ofribufos y mefodos. Cuondo escribomos nuesfro
primero cIose, esforemos hociendo nuesfro primer progromo orienfodo o objefos.
Pero,,, qu digimos que es un progrumu?
En eI senfido informofico se dice que un progromo es uno secuencio de
insfrucciones que se escriben y que Io compufodoro puede inferprefor y ejecufor
I
.
EI escribir un progromo (edifor) normoImenfe se Io hoce en un edifor de
fexfos como eI 8Ioc de Mofos de Windows. Lo inferprefocion que hoce Io moquino de
Io que escribimos no es direcfo (en oIgunos cosos), sino que se Io froducimos o un
Ienguoje que puedo comprender. EI proceso de froducir es mos conocido como
compiIor y es Io que fenemos que hocer siempre onfes de ejecufor nuesfros
progromos Jovo.
Qu es IueJ?
8IueJ es un IDE (Enforno de DesorroIIo Infegrodo), que fociIifo mucho eI
proceso de creor un progromo (edifor, compiIor y ejecufor) y eI proceso de
enfender un progromo (ver groficomenfe o Ios objefos, Ios cIoses y sus reIociones).
Sifio oficioI: www.bIuej.org
I Segn Io Wikipedio hffp://wikipedio.org/
4Z
Logo de 8IueJ
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Lo siguienfe figuro muesfro y expIico Io venfono principoI de 8IueJ y sus
principoIes oreos de frobojo:
I. Sobre eI ttuIo no es mucho Io que se puede decir, cuondo frobojos con 8IueJ
creos un nuevo proyecfo poro frobojor, o ese fienes que dorIe un nombre, eI
cuoI se muesfro en esfo porfe.
Z. En eI men fenemos b secciones, Projecf (proyecfo), Edif (edicion), TooIs
(herromienfos), View (ver) y HeIp (oyudo), vomos o describir soIo Io que vomos
o ufiIi;or mos.
I. En proyect podemos creor, guordor y obrir proyecfos, creor ejecufobIes y
fombien soIir deI progromo principoImenfe.
Z. En edit podemos creor cIoses, fIechos de uso o de herencio (yo vomos o
ver que son).
3. En TooIs podemos ver Ios preferencios de 8IueJ y compiIor principoImenfe.
4. View sirve poro mosfror diferenfes cosos que fiene 8IueJ como debbuger,
ferminoI y code pod.
43
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
b. HeIp creo que fodos sobron poro que es... si quieres enconfror informocion
sobre 8IueJ o cIoses jovo.
Ahoro s, empecemos o creor nuesfro primero cIose con Io oyudo deI buen
8IueJ. Esfomos Iisfos7 Lo primero sero creor un proyecfo, creor uno cIose y creor
Ios objefos.
1} Creur un proyecto
Un proyecfo poro 8IueJ es uno corpefo donde se coIocoron fodos Ios orchivos
de nuesfro progromo. Poro creor un proyecfo nos vomos oI men Projecf, Iuego
seIeccionomos Io opcion Mew Projecf, eI mismo nos obriro un cuodro de dioIogo poro
creor nuesfro proyecfo donde querromos. EI nombre de proyecfo puede ser
cuoIquier coso.
Z} Creur unu cIuse
Exisfen vorios formos de creor uno cIose en 8IueJ, Io mos senciIIo es hocer
cIick en eI bofon Mew CIoss y oporecero un cuodro de dioIogo donde debemos coIocor
eI nombre de Io cIose y eIegir que fipo de cIose sero. Esfo creoro un orchivo con eI
mismo nombre que Io cIose y de exfension .java. Poro nuesfros primeros ejercicios
podemos obvior Io porfe de eIegir eI fipo de cIose.
44
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
4b
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Convenciones sobre eI nombre de Ius cIuses Convenciones sobre eI nombre de Ius cIuses
e Debe ser significofivo
e Empe;or con moyscuIo (como un nombre propio)
e Esfor escrifo en singuIor
Uno ve; coIocodo eI nombre en eI cuodro de dioIogo, oporecero uno cojifo en eI
oreo de Ios cIoses, esfo represenforo o Io cIose en cuesfion.
Debemos de edifor eI codigo por defecfo que fiene esfo cIose, poro Io cuoI
horemos dobIe cIick sobre Io cojifo, oporecero eI edifor de esfo cIose mosfrondo
codigo que foI ve;, de momenfo, no enfendomos ni j, os que borroremos fodo Io que
esfe escrifo en eI edifor poro hocer nuesfro propio codigo.
Uno ve; borrodo fodo, escribimos Io siguienfe:
Y pues bien, hemos creodo uno cIose. CIoro que no hoce mucho en esfe
momenfo, pero esfo es uno cIose en Jovo en su formo mos senciIIo.
Esfo es Io sinfoxis generoI poro definir o uno cIose.
4o
class Persona
{
}
class <NombreClase>
{
// Declaracin de atributos
<tipo> <variable> ;
// Declaracin de mtodos
<tipo> <nombreMtodo> ( <parmetros> )
{ ... }
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
3} Creur obgetos
Uno ve; hecho Io cIose yo es posibIe creor objefos. En 8IueJ esfo es uno
foreo fociI. SoIo fenemos que hocer cIick derecho sobre Io cIose y eIegir Io opcion
new Persono (poro nuesfro ejempIo).
Hociendo Io mismo pero con codigo:
Siguiendo con Io creocion de nuesfro cIose Persono, ohoro veomos oIgunos
ofribufos (voriobIes de insfoncio) poro esfo cIose.
Qu tiene fodo persono7
nombre
edod
Uno ve; idenfificodo Ios ofribufos poro uno cIose, es necesorio indicor eI fipo
de dofo que guordoron sus objefos.
47
EI nombre deI orchivo Jovo debe coincidir con eI de Io cIose definido en eI
<NombreClase>.java
[...]
Persona per;
per = new Persona( );
[...]
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
...VoIviendo oI ejempIo:
nombre, como Homero, 8orf, Liso, Morge. EI fipo de dofo mos odecuodo sero
String,
edud, como 40, I0, 8, 38. EI fipo de dofo mos odecuodo sero int,
Y de eso monero coIocomos Ios ofribufos en nuesfro cIose.
Ahoro nos foco ver oIgunos mefodos.
Qu huce fodo persono7
soIudor
decir si es moyor de edod o no
decir su nombre
decir su edod
modificor edod
Como Ios mefodos son Ios cosos que soben hocer Ios objefos, y poro invocor o
ese mefodo se Io hoce o froves de mensojes, veomos que fipo de mensojes exisfen
poro ver como debero esfor esfrucfurodo un mefodo.
Los mensojes pueden ser:
con respuesfo. EjempIo: dime fu nombre.
sin respuesfo. EjempIo: Ievonfofe. (Mo esperomos que nos de uno respuesfo,
simpIemenfe reoIi;o uno occion)
con informocion odicionoI (poromefros). EjempIo: Te gusfo eI coIor .... 7 (EI
poromefro sero eI coIor)
sin informocion odicionoI (sin poromefros). EjempIo: Eres moyor de edod7 (Mo
48
class Persona
{
String nombre;
int edad;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
se necesifo ningn poromefro poro reoIi;or ese mensoje)
A un mefodo podro verseIo de Io siguienfe formo (como si fuese uno cojo):
Donde Io enfrodo, sero Io informocion odicionoI deI mensoje (poromefros) y Io
soIido sero eI reforno deI mensoje (reforno deI mefodo).
Lo sinfoxis generoI de un mefodo es:
Donde:
Tipo de duto deI retorno: Si eI mefodo devueIve oIgo, esfe fiene un fipo de
dofo, que es un fipo de dofo voIido en Jovo (primifivo
o cIose).
Nombre deI mtodo: es eI nombre, o froves deI cuoI se invocoro oI mefodo.
Purmetros: Io informocion odicionoI oI mefodo.
Instrucciones: oqu indicomos como eI objefo hoce Io operocion. Si
eI mefodo fiene respuesfo, enfonces debero exisfir
uno insfruccion:
return <expresion>;
49
[public]<tipo de dato del retorno> <nombre del mtodo> ([parmetros])
{
<instrucciones>
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
VoIviendo o nuesfro ejempIo, veomos como son Ios mefodos de Io cIose Persono:
soIudor: fiene respuesfo (Sfring) y no necesifo informocion odicionoI.
decir si es moyor de edod o no: fiene respuesfo (booIeon) y no necesifo
informocion odicionoI.
decir su nombre: fiene respuesfo (Sfring) y no necesifo poromefros.
decir su edod: fiene respuesfo (inf) y no necesifo poromefros.
b0
public String saludar()
{
return "Hola soy "+nombre+" y tengo "+edad+" aos ";
}
public boolean esMayorDeEdad()
{
return edad >= 18;
}
public String decirNombre()
{
return nombre;
}
public int decirEdad()
{
return edad;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
modificor su edod: no fiene respuesfo (void) y necesifo sober Io nuevo edod (inf)
EI mtodo constructor
Es un mefodo especioI que sirve poro inicioIi;or Ios ofribufos.
Tiene eI mismo nombre que Io cIose.
Mo fiene fipo de reforno (ni siquiero void)
Se invoco oufomoficomenfe cuondo se creo un objefo.
bI
class Persona
{
String nombre;
int edad;
public Persona(String n, int e)
{
nombre = n;
edad = e;
}
}
Persona p = new Persona(Pepito,10);
Tiene el mismo nombre que la clase y no
deIinen tipo de retorno.
public void modificarEdad(int nuevaEdad)
{
edad = nuevaEdad;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Lo impIemenfocion compIefo de Io cIose Persono sero:
bZ
class Persona
{
String nombre;
int edad;
public Persona(String n, int e)
{
nombre = n;
edad = e;
}
public String saludar()
{
return "Hola me llamo "+nombre+" y tengo "+edad+" aos";
}

public boolean esMayorDeEdad()
{
return edad >= 18;
}
public String decirNombre()
{
return nombre;
}
public int decirEdad()
{
return edad;
}
public void modificarEdad(int nuevaEdad)
{
edad = nuevaEdad;
}
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
AIgunus convenciones sobre Ios nombres de mtodos AIgunus convenciones sobre Ios nombres de mtodos
se escriben con minscuIo. Ej: soIudor
si su nombre invoIucro vorios poIobros, Io primero Iefro de codo Iefro (menos Io
primero), con moyscuIo. Ej: decirMombre
Poro fodos oqueIIos mefodos que se encorgon de obfener voIores de ofribufos,
coIoco eI prefijo get seguido deI nombre deI ofribufo. Ej: En nuesfro ejempIo, en
Iugor de escribir decirNombre, deberomos coIocor getNombre.
Poro fodos oqueIIos mefodos que se encorgon de modificor voIores de Ios
ofribufos, coIoco eI prefijo set seguido deI nombre deI ofribufo. Ej: En nuesfro
ejempIo, en Iugor de escribir modificarEdad deberomos coIocor setEdad.
Si eI mefodo vo o devoIver un voIor Iogico, eI nombre deI mefodo debero
escribirse como si fuese uno pregunfo oI objefo. Ej: esMayorDeEdad 7
b3
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Lo impIemenfocion siguiendo Ios convenciones de mefodos:
b4
class Persona
{
String nombre;
int edad;
public Persona(String n, int e)
{
nombre = n;
edad = e;
}
public String saludar()
{
return "Hola me llamo "+nombre+" y tengo "+edad+" aos";
}

public boolean esMayorDeEdad()
{
return edad >= 18;
}
public String getNombre()
{
return nombre;
}
public int getEdad()
{
return edad;
}
public void setEdad(int nuevaEdad)
{
edad = nuevaEdad;
}
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Iteructuundo con obgetos en IueJ
Poro inferocfuor con Ios objefos que voyomos creondo con 8IueJ, soIo
fenemos que hocer cIick derecho sobre eI objefo creodo y ver en eI men confexfuoI
Io Iisfo de mefodos (mensojes), que Ie podemos hocer o Io insfoncio.
En codigo esfo se hoce o froves deI operodor punto (,)
EjempIo:
bb
<objeto>.<algunMtodo>();
String s = per.saludar();
per.setEdad(13);
String nom = per.getNombre();
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
CoIecciones de Obgetos
Uno coIeccion de objefos es senciIIomenfe un conjunfo de cosos deI mismo
fipo. Esfo ideo de ogrupor cosos no es nuevo poro fi. Yo conoces eI significodo de
esfos expresiones: "un juego de Iibros", "uno coIeccion de seIIos", "uno codeno de
fiendos", "un conjunfo de ejercicios". AIgunos veces ufiIi;omos ofros poIobros foIes
como reboo, monodo, cuodriIIo, equipo, compoo, grupo, cIub, cIose o fomiIio poro
referirnos o coIecciones y conjunfos. T mismo eres un eIemenfo de grupo o
conjunfo foIes como esfos: fu fomiIio o fu cIose.
En Jovo, exisfen coIecciones de objefos que fombien son considerodos ofros
objefos, esfon modeIodos por cIoses o por esfrucfuros primifivos. ArroyLisf es uno
cIose que modeIo o un grupo especioI de coIecciones.
Lu cIuse ArrayList
Lo cIose ArroyLisf oImoceno un conjunfo de objefos deI mismo fipo o monero
de Iisfo. Jovo fiene uno suife compIefo de objefos "CoIIecfion" que oImocenon
objefos de vorios moneros. ArroyLisf es eI fipo de coIeccion mos fomoso y
comnmenfe usodo.
bo
Figuro I: Jerorquo de Io cIose ArroyLisf
13
0
7
1
11
2
23
3
19
4
2
5
add(x)
isEmpty()
size()
get(pos)
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
A confinuocion presenforemos Ios consfrucfores y mefodos mos imporfonfes
de esfo cIose, poro un defoIIe mos exocfo y compIefo revisor Ios JAVADOCS.
Constructores
Constructor Descripcin
ArrayList() Construye una lista vaca con una capacidad
inicial de 10.
ArrayList(int) Construye una lista vaca con una capacidad
inicial especificada.
Mtodos
Tipo de
retorno
Nombre deI
Mtodo
Descripcin
boolean add(E) Aade el elemento dado al final de la
lista.
void add(int,E) Aade el elemento dado en la posicin
especificada.
E get(int) Retorna el elemento de la posicin dada
void set(int,E) Establece un nuevo elemento E en la
posicin especificada.
boolean isEmpty() Verifica si la lista est vacia.
E remove(int) Remueve el elemento de la posicin dada.
int size() Retorna el nmero de elementos de la
lista.
EjempIo de operociones mos ufiIi;odos:
DecIurucin de un ArruyList de enteros DecIurucin de un ArruyList de enteros
Creucin de un ArruyList de enteros Creucin de un ArruyList de enteros
b7
ArrayList<Integer> numeros;
numeros = new ArrayList<Integer>();
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Audiendo eIementos uI ArruyList Audiendo eIementos uI ArruyList
Logicomenfe eI ArroyLisf se vero os:
Conociendo eI tumuo deI ArruyList Conociendo eI tumuo deI ArruyList
Obteniendo un eIemento deI ArruyList Obteniendo un eIemento deI ArruyList
orrundo un eIemento deI ArruyList orrundo un eIemento deI ArruyList
Logicomenfe eI ArroyLisf quedoro os:
Exisfen ofros cIoses que modeIon coIecciones de objefos como HoshMop,
HoshSef, Vecfor, efc. fodos eIIos propios de Jovo. Tombien exisfen esfrucfuros
primifivos poro monejor conjunfos de eIemenfos conocidos como orregIos.
b8
numeros.add(13);
numeros.add(7);
numeros.add(11);
int tamao = numeros.size(); // 3
13
0
7
1
11
2
Cada elemento ocupa una posicion en el
ArrayList que es accedida mediante un
indice que empieza en 0.
Integer x = numeros.get(0); // 13
Integer x = numeros.remove(0); //13
7
0
11
1
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
ReIuciones entre obgetos
Los Z fipos de reIociones mos imporfonfes enfre objefos son:
Lo Composicion
Lo Herencio
Composicin {tiene un}
Un objefo puede esfor formodo o porfir de ofros objefos. Por ejempIo un
pos, esfo formodo de muchos personos, un confinenfe esfo formodo de muchos
poses, eI mundo esfo formodo de muchos confinenfes, efc.
Esfe fipo de reIocion responde ofirmofivomenfe o Io pregunfo:
Confenedor tiene un Confenido7
Un Coche fiene un Mofor7 -- SI
Un Coche fiene un Chosis7 -- SI
Confenedor tiene muchos Confenido7
b9
class Motor
{
[...]
}
class Chasis
{
[...]
}
class Coche
{
Motor m;
Chasis c;
[...]
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Un Curso fiene muchos Esfudionfes7 -- SI
Herenciu {es un}
Lo herencio es uno meconismo, por medio deI cuoI uno cIose, IIomodo subcIose,
se derivo de ofro, IIomodo enfonces supercIose, de monero que exfiende su
funcionoIidod. Lo ideo es Io de porfir de Ios sifuociones mos generoIes e ir derivondo
hocio Ios mos porficuIores, creondo cofegoros, de Io mismo formo en que pienso eI
ser humono.
o0
class Estudiante
{
[...]
}
class Curso
{
ArrayList<Estudiante> estudiantes;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Los subcIoses "heredon" corocfersficos y mefodos de Ios supercIoses
(excepfo Ios consfrucfores).
Supongomos, por ejempIo, que fenemos Io cIose AuIo y Io cIose Loboroforio
definidos como sigue:
Los porfes comunes se pueden ogrupor en uno mismo cIose, monfeniendo Ios
ofros dos cIoses con Ios porfes no comunes y heredondo de esfo nuevo cIose con Io
poIobro reservodo exfends.
oI
class Aula
{
String nombre;
int capacidadMaxima;

int numAsientos;
[...]
}
class Laboratorio
{
String nombre;
int capacidadMaxima;
int numComputadoras;
[...]
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Programacin Orientada a Objetos xjkwak@gmail.com
Un AuIo es un Ambienfe7 -- SI
Un Loboroforio es un Ambienfe7 -- SI
oZ
class Ambiente
{
String nombre;
int capacidadMaxima;
[...]
}
class Aula extends Ambiente
{
int numAsientos;
[...]
}
class Laboratorio extends Ambiente
{
int numComputadoras;
[...]
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
Recursividud
Recursividud
Definicin
Pecursion es uno fecnico de progromocion en eI cuoI un mefodo puede IIomorse
o s mismo. Esfo seguromenfe sueno como oIgo roro de hocer o un grove error deI
que escribio esfo. Sin emborgo, Io recursion uno de Ios mos inferesonfes y uno de Ios
fecnicos sorprendenfemenfe efecfivos en progromocion.
AIgo es recursivo si se define en ferminos de s mismo (cuondo poro definirse
hoce mencion o s mismo). Poro que uno definicion recursivo seo voIido, Io referencio
o s mismo debe ser reIofivomenfe mos senciIIo que eI coso considerodo.
EgempIo: definicion de un nmero nofuroI.
e EI M" 0 es nofuroI.
e EI M" n es nofuroI si n-I Io es.
En un oIgorifmo recursivo disfinguimos como mnimo Z porfes:
u} Cuso triviuI buse o de fin de recursin:
Es Io respuesfo mos senciIo o un probIemo. Es un coso donde eI probIemo
puede resoIverse sin fener que hocer uso de uno nuevo IIomodo o s mismo. Evifo Io
confinuocion indefinido de Ios porfes recursivos.
b} Purte purumente recursivu:
PeIociono eI resuIfodo deI probIemo con resuIfodos de cosos mos simpIes. Se
hocen nuevos IIomodos o Io funcion, pero esfon mos proximos oI coso bose.
o3
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
EgempIo:
Un probIemo cIosico: EI focforioI de un nmero.
Todos conocemos que Io definicion mofemofico deI focforioI de un nmero n es Io
siguienfe:
n! = 1*2*3*.......*n n! = n*(n-1)*(n-2)*.....1
Por definicion mofemofico, fombien sobemos que:
0! = 1
Con Io que fendromos Ios siguienfe Io siguienfe definicion de focforioI:
Un probIemo que puede resoIverse de monero recursivo, debe fener por Io menos I
coso bose y I porfe recursivo, sino no hoy recursion.
o4
n!
1 Si n = 0
n*(n-1)! Otros casos
Coso bose
Porfe recursivo
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
Poro ver mos o menos como funciono Io recursividod, vomos o ver uno onoIogo de
como funciono Io recursividod con eI siguienfe ejempIo:
ob
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
oo
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
Como en eI ejempIo, Ios IIumudus recursivus siempre fienden hocio eI coso
bose, hosfo Io formo de soIucionor mos fociI y uno ve; ohi, se von devoIviendo Ios
resuIfodos de Ios IIomodos hosfo IIegor o Io IIomodo inicioI.
Ahoro, poro impIemenforIo en un Ienguoje de progromocion como Jovo, soIo
fenemos que froducir nuesfros cosos boses y porfes recursivos:
o7
n!
1 Si n = 0
n*(n-1)! Otros casos
Coso bose
Porfe recursivo
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
En Jovo fendromos un mefodo que recibe como poromefro un nmero y
devueIve como resuIfodo ofro nmero:
Pruebu de Escritorio
Veomos como podemos ver eI funcionomienfo de nuesfro mefodo recursivo
hociendo uno pequeo pruebo de escriforio. Probemos infenfondo coIcuIor eI
focforioI de 4.
n fuctoriuI{4} A Iu IDA A Iu VUELTA
4 4 * Iactorial(3) Se ejecuta la parte recursiva Se devuelve el resultado de evaluar 4*6 24
3 3 * Iactorial(2) Se ejecuta la parte recursiva Se devuelve el resultado de evaluar 3*2 6
2 2 * Iactorial(1) Se ejecuta la parte recursiva Se devuelve el resultado de evaluar 2*1 2
1 1 * Iactorial(0) Se ejecuta la parte recursiva Se devuelve el resultado de evaluar 1*1 1
0 1 Se ejecuta el caso base Se devuelve 1
o8
public int factorial(int n)
{
if(n==0)
return 1;
else
return n*factorial(n-1);
}
Coso bose
Porfe recursivo
class Factorial
{
public int factorial(int n)
{
if(n==0)
return 1;
else
return n*factorial(n-1);
}
}
class Principal
{
public static void main(String[] args)
{
Factorial f = new Factorial();
int res = f.factorial(4);
System.out.println(res); //24
}
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
Tipos de Recursin
Recursividud SimpIe
AqueIIo en cuyo funcion soIo oporece uno IIomodo recursivo. Se puede
fronsformor con fociIidod en oIgorifmos iferofivos. Ej: focforioI
Recursividud MItipIe
Se do cuondo hoy mos de uno IIomodo o s mismo denfro deI cuerpo de Io
funcion, resuIfondo mos difciI de hocer de formo iferofivo. Ej: Fibonocci.
Recursividud Anidudu
En oIgunos de Ios orgumenfos de Io IIomodo hoy uno nuevo IIomodo o s mismo.
Ej: Lo funcion de Ackermon:
o9
public int factorial(int n)
{
if(n==0)
return 1;
else
return n*factorial(n-1);
}
public int factorial(int n)
{
int f=1;
for (int i = 1; i <= n; i++)
f=f*i;
return f;
}
public int fibonacci(int n)
{
if(n==1)
return 0;
if(n==2)
return 1;
else
return fibonacci(n-1)+fibonacci(n-2);
}
public int ackerman (int m, int n)
{
if (m == 0)
return n+1;
if (n == 0)
return ackerman(n-1, 1);
else
return ackerman( m-1, ackerman(m, n-1) );
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
Recursividud Cruzudu o Indirectu
Son oIgorifmos donde uno funcion provoco uno IIomodo o s mismo de formo
indirecfo, o froves de ofros funciones. Ej: Por o Impor:
70
public boolean par(int n)
{
if (n == 0)
return true;
else
return impar(n - 1);
}
public boolean impar(int n)
{
if (n == 0)
return false;
else
return par(n - 1);
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
RegIus fundumentuIes de Iu recursividud
u} Cuso buse:
Siempre se deben fener oIgunos cosos bose, que se puedon resoIver sin recursion.
Esfo regIo nos goronfi;o que un progromo recursivo vo o ferminor siempre.
Cuondo un progromo recursivo se ejecufo, muchos funciones quedon pendienfes
producfo de recursion mismo. Pero fodos Ios IIomodos recursivos se reoIi;oron hosfo
que se oIconce un coso bose, o porfir deI cuoI se reforne en eI ofro senfido con
resuIfodos concrefos de codo IIomodo hosfo Io primero IIomodo recursivo.
b} Progreso:
Poro Ios cosos que deben resoIverse recursivomenfe,
Io IIomodo recursivo siempre debe fender hocio un coso bose.
Esfo regIo nos oseguro que Ios IIomodos recursivos no se oIejen deI coso bose, mos oI
confrorio se dirijon hocio eI.
c} RegIu de diseo:
Todos Ios IIomodos recursivos funcionon correcfomenfe.
Esfo regIo es imporfonfe porque significo que cuondo se diseon progromos
recursivos, generoImenfe no es necesorio conocer Ios defoIIes deI funcionomienfo
inferno si se fiene que rosfreor Io gron confidod de IIomodos recursivos. Con
frecuencio, es en exfremo difciI seguir Io secuencio reoI de IIomodos recursivos. Por
supuesfo, en muchos cosos esfo indico eI buen uso de Io recursion, yo que Io
compufodoro se uso poro encorgorse de Ios defoIIes compIicodos.
7I
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
d} RegIu deI inters compuesto:
EI frobojo nunco se debe dupIicor resoIviendo eI mismo ejempIor
de un probIemo en IIomodos recursivos seporodos.
Esfo regIo nos prohibe repefir eI frobojo de Io recursion inufiImenfe, hociendo uno
IIomodo recursivo con eI mismo ejempIor mos de uno ve;.
Un cIoro ejempIo de un probIemo resueIfo recursivomenfe que no cumpIe con esfo
regIo es fibonnoci:
EI onferior progromo hoIIo eI enesimo nmero de Io serie de fibonocci:
0, 1, 1, 2, 3, 5, 8, etc.
1 2 3 4 5 6 7 ...
Poro uno IIomodo: fibonacci(4) = fibonacci(3) + fibonacci(2)
fibonacci(3) = fibonacci(2) + fibonacci(1)
Y como vemos poro esfe coso senciIIo, exisfe dobIe IIomodo recursivo poro hoIIor eI
fibonacci(2).
7Z
public int fibonacci(int n)
{
if(n==1)
return 0;
if(n==2)
return 1;
else
return fibonacci(n-1)+fibonacci(n-2);
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Recursividad xjkwak@gmail.com
Lu PiIu de Recursin
Lo memorio deI ordenodor se divide (de monero Iogico, no fsico) en vorios
segmenfos:
e Segmento de cdigo: Porfe de Io memorio donde se guordon Ios insfrucciones
deI progromo en codigo moquino.
e Segmento de dutos: Porfe de Io memorio desfinodo o oImocenor Ios voriobIes
esfoficos.
e MontcuIo: Porfe de Io memorio desfinodo o Ios voriobIes dinomicos.
e PiIu deI progrumu: Porfe desfinodo o Ios voriobIes IocoIes y poromefros de Io
funcion que esfo siendo ejecufodo.
LIumudu u unu funcin
I) Se reservo espocio en Io piIo poro Ios poromefros de Io funcion y sus voriobIes
IocoIes.
Z) Se guordo en Io piIo Io direccion de Io Ineo de codigo desde donde se ho
IIomodo o Io funcion.
3) Se oImocenon Ios poromefros de Io funcion y sus voIores en Io piIo.
4) AI ferminor Io funcion, se Iibero Io memorio osignodo en Io piIo y se vueIve o Io
insfruccion ocfuoI.
LIumudu u unu funcin recursivu
En eI coso recursivo, codo IIomodo genero un nuevo ejempIor de Io funcion con sus
correspondienfes objefos IocoIes:
I) Lo funcion ejecuforo normoImenfe hosfo Io IIomodo o s mismo. En ese
momenfo se creon en Io piIo nuevos poromefros y voriobIes IocoIes.
Z) EI nuevo ejempIor de funcion comien;o o ejecuforse.
3) Se creon mos copios hosfo IIegor o Ios cosos boses, donde se resueIve
direcfomenfe eI voIor, y se vo soIiendo Iiberondo Io memorio hosfo IIegor o Io
primero IIomodo (Ifimo en cerrorse).
73
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
AnIisis de AIgoritmos
AnIisis de AIgoritmos
Definicin
AIgorifmo es sinonimo de procedimienfo compufocionoI y es fundomenfoI poro
Ios ciencios de Io compufocion
I
.
Un oIgorifmo es uno secuencio finifo de insfrucciones, codo cuoI con un
significodo concrefo y cuyo ejecucion genero un fiempo finifo. Un oIgorifmo debe
ferminor en un fiempo finifo.
AIgorifmo es fodo recefo, proceso, rufino, mefodo, efc. que odemos de ser un
conjunfo de insfrucciones que resueIven un deferminodo probIemo, cumpIe Ios
siguienfes condiciones:
I. Ser finito, Lo ejecucion de un oIgorifmo ocobo en un fiempo finifo, un
procedimienfo que foIIe en Io propiedod de Io finifud es simpIemenfe un
procedimienfo de coIcuIo.
Z. Ser preciso, Codo insfruccion de un oIgorifmo debe ser preciso, debero
fenerse en cuenfo un rigor y no Io ombiguedod, esfo condicion es Io
definibiIidod: codo frose fiene un significodo concrefo.
3. Posee entrudus, Los enfrodos se fomon como un conjunfo especfico de
voIores que inicioIi;on eI oIgorifmo.
4. Posee suIidu, Todo oIgorifmo posee uno o mos soIidos, Io soIido es Io
fronsformocion de Io enfrodo.
b. Ser eficuz, Un oIgorifmo es efico; cuondo resueIve eI probIemo.
o. Ser eficiente, Un oIgorifmo es eficienfe cuondo resueIve eI probIemo de Io
mejor monero posibIe, o seo ufiIi;ondo Io mnimo confidod de recursos.
I DeI Iibro: AIgorifmos AnoIisis & Diseo - P. Lecco
74
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
Uno ve; que fenemos un oIgorifmo que resueIve un probIemo y podemos decir
que es de oIguno monero correcfo, un poso imporfonfe es fener ideo de Io confidod
de recursos, como fiempo de procesodor o espocio en Io memorio principoI que
requeriro.
EI objefivo de esfe copfuIo es:
Conocer Ios focfores que infIuyen en Io eficiencio de un oIgorifmo.
Aprender o coIcuIor eI fiempo que empIeo un oIgorifmo.
Aprender o reducir eI fiempo de ejecucion de un progromo de dos o oos o
frocciones de segundo.
Fuctores que infIuyen en Iu eficienciu de un uIgoritmo
Podemos fomor encuenfo muchos focfores que seon exfernos oI oIgorifmo
como Io compufodoro donde se ejecufo (hordwore y soffwore) o focfores infernos
como Io Iongifud de enfrodo deI oIgorifmo. Veomos oIgunos de esfos focfores.
EI Hurdwure
Por ejempIo: procesodor, frecuencio de frobojo, memorio, discos, efc.
EI Softwure
Por ejempIo: sisfemo operofivo, Ienguoje de progromocion, compiIodor, efc.
Lu Iongitud de entrudu
EI enfoque mofemofico considero eI fiempo deI oIgorifmo como uno funcion deI
fomoo de enfrodo. MormoImenfe, se idenfifico Io Iongifud de enfrodo (fomoo de
enfrodo), con eI nmero de eIemenfos Iogicos confenidos en un ejempIor de enfrodo,
por ejempIo: en un oIgorifmo que coIcuIo eI focforioI de un nmero, Io Iongifud de
enfrodo sero eI mismo nmero, porque no es Io mismo coIcuIor eI focforioI de 4 que
coIcuIor eI focforioI de I000, Ios iferociones que fengo que hocer eI oIgorifmo
dependero de Io enfrodo. De iguoI monero se puede consideror como Iongifud de
7b
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
enfrodo: oI fomoo de un orregIo, eI nmero de nodos de uno Iisfo enIo;odo, eI
nmero de regisfros de un orchivo o eI nmero de eIemenfos de uno Iisfo ordenodo).
A medido que crece eI fomoo de un ejempIor deI progromo, generoImenfe, crece eI
fiempo de ejecucion. Observondo como voro eI fiempo de ejecucion con eI fomoo
de Io enfrodo, se puede deferminor Io foso de crecimienfo deI oIgorifmo, expresodo
normoImenfe en ferminos de n, donde n es uno medido deI fomoo de Io enfrodo.
Lo foso de crecimienfo de un probIemo es uno medido imporfonfe de Io
eficiencio yo que predice cuonfo fiempo se requeriro poro enfrodos muy grondes de
un deferminodo probIemo.
Poro que un oIgorifmo seo eficienfe, se debe opfimi;or eI fiempo de ejecucion
y eI espocio en Io memorio, ounque se produciro Io opfimi;ocion de uno o cosfo deI
ofro.
AnIisis de AIgoritmos
EI onoIisis de oIgorifmo que hocemos en esfe copfuIo foco nicomenfe eI
punfo de visfo femporoI ( fiempo de ejecucion de un oIgorifmo) y ufiIi;omos como
herromienfo eI Ienguoje de progromocion Jovo.
Es difciI reoIi;or un onoIisis simpIe de un oIgorifmo que defermine Io
confidod exocfo de fiempo requerido poro ejecuforIo. Lo primero compIicocion es
que Io confidod exocfo de fiempo dependero de Io impIemenfocion deI oIgorifmo y de
Io moquino reoI en que se ejecufo. EI onoIisis normoImenfe debe ser independienfe
de Io compufodoro (hordwore y soffwore) y deI Ienguoje o moquino que se ufiIice
poro impIemenfor eI oIgorifmo. Lo foreo de coIcuIor eI fiempo exocfo requerido sueIe
ser bosfonfe pesodo.
EIementos de un uIgoritmo
Un oIgorifmo es un congunto de instrucciones ordenodos de monero Iogico que
resueIven un probIemo. Esfos insfrucciones o su ve; pueden ser: enunciodos simpIes
(senfencios) o enunciodos compuesfos (esfrucfuros de confroI). EI fiempo de
ejecucion dependero de como esfe orgoni;odo ese conjunfo de insfrucciones, pero
7o
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
nunco sero consfonfe.
Es convenienfe ufiIi;or uno funcion T(n) poro represenfor eI nmero de
unidodes de fiempo fomodos por un oIgorifmo de cuoIquier enfrodo de fomoo n.
Ahoro bien, poro coIcuIor eI T(n) de un oIgorifmo, vomos o ver como coIcuIor
eI fiempo de ejecucion de Ios insfrucciones que podro fener un oIgorifmo.
Enunciudos simpIes {sentencius}
Poro Ios enunciodos simpIes como:
Lo osignocion de un voIor o uno voriobIe.
Lo invococion o ofro mefodo.
Podromos coIcuIor minuciosomenfe eI fiempo de ejecucion, pero es uno foreo
que se Io dejomos o Ios grondes mofemoficos que hocen coIcuIos precisos, pero poro
nosofros fodo enunciodo simpIe se ejecuforo en I (uno unidod de fiempo que podro
ser I segundo o I nonosegundo...) y Iisfo :).
EjempIo:
T(n) = 4 Se Iee: EI fiempo de ejecucion es 4
77
//Algoritmo para mostrar el mayor de 2 # enteros positivos.
//Sin utilizar estructuras de control :)
a = in.nextInt();
b = in.nextInt();
m = (Math.abs(a+b)+Math.abs(a-b))/2;
System.out.println("El mayor es: "+m);
1
1
2
3
4
5
6
7
8
9
10
1
1
1
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
Enunciudos compuestos {estructurus de controI}
Todos Ios esfrucfuros de confroI fienen Z porfes: uno cobecero que puede ser
evoIuodo como uno senfencio simpIe y un cuerpo que puede fener un conjunfo de
insfrucciones y sero evoIuodo de ocuerdo oI fipo de insfrucciones que fengo.
Poro Ios esfrucfuros de confroI:
seIecfivos (if, if-eIse, swifch)
repefifivos (for, whiIe, do-whiIe)
Horemos un reposo de Io sinfoxis y semonfico operocionoI que seo generoI
poro ofros Ienguojes de progromocion.
SeIectivus
IF IF
Sintuis:
Semnticu:
Si eI resuIfodo de evoIuor Io expresion Iogico de Io cobecero es verdod enfonces se
ejecufon Ios insfrucciones deI cuerpo.
Ahoro bien, como coIcuIomos su fiempo de ejecucion7 Pues como en eI coso de Ios
senfencios simpIes diremos que Io cobecero se ejecufo en I unidod de fiempo y Iuego
coIcuIomos eI fiempo de ejecucion deI cuerpo.
78
if(<expresin lgica>)
{
//instrucciones
}
Cabecera:
Cuerpo:
if(<expresin lgica>)
{
//instrucciones
}
Cabecera:
Cuerpo:
1
1
c
(n)
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
EjempIo:
AnIisis en buse uI promedio o en buse uI peor cuso
Un oIgorifmo puede ejecuforse mos ropido onfe cierfos dofos de enfrodo y
Ienfo onfe ofros. En dichos cosos nos hocemos Io siguienfe pregunfo: UfiIi;or un
onoIisis bosodo en eI promedio o en eI peor coso7. En eI primer coso, requerimos
definir uno disfribucion de probobiIidodes de fodo eI conjunfo de dofos de enfrodo,
eI cuoI fpicomenfe es uno foreo difciI. En combio, en eI segundo coso, no se
requieren esos herromienfos. Por Io fonfo, en eI resfo deI copfuIo, vomos o
corocferi;or fiempos de ejecucion eI ferminos deI peor coso.
Tomondo encuenfo eI oIgorifmo onferior, si eI nmero fuese posifivo soIo se
ejecuforon Ios Ineos 3, b y I0, en combio su fuese negofivo se ejecuforon Ios Ineos
3, b, 7 y I0. Enfonces podemos ver que eI fiempo de ejecucion puede fomor Z cosos:
eI mejor de Ios cosos (cuondo se ejecufo Io menor confidod de insfrucciones)
y eI peor de Ios cosos (cuondo se ejecufo Io moyor confidod de insfrucciones)
Poro nuesfro ejempIo onferior eI fiempo de ejecucion sero:
MEJOP DE LOS CASOS: T(n) = 3
PEOP DE LOS CASOS: T(n) = 4
MormoImenfe sueIe hocerse eI onoIisis deI fiempo de ejecucion fomondo en
cuenfo eI peor de Ios cosos yo que esforomos subesfimondo oI oIgorifmo si nos
bosoremos en eI mejor de Ios cosos.
79
//Algoritmo para mostrar el valor absoluto de un # leido del teclado
x = LeerTeclado.readInt();
if(x<0)
{
x = -x;
}
System.out.println("El valor absoluto es: "+x);
1
1
1
1
1
2
3
4
5
6
7
8
9
10
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
A porfir de ohoro fodo nuesfro onoIisis ser horo en bose oI peor de Ios cosos.
IF-ELSE IF-ELSE
Sintuis:
Semnticu:
Si eI resuIfodo de evoIuor Io expresion Iogico de Io cobecero es verdod
enfonces se ejecufon Ios insfrucciones deI cuerpo if en coso confrorio se hocen Ios
insfrucciones deI cuerpo eIse.
Como coIcuIor eI fiempo de ejecucion de uno esfrucfuro if-eIse7 Pues como
nuesfro onoIisis es en eI peor de Ios cosos, fomomos en cuenfo eI moyor de Ios
fiempos de ejecucion deI cuerpo if y deI cuerpo eIse.
80
if(<expresin lgica>)
{
//instrucciones
}
Cabecera:
Cuerpo:
1
1
c
(n)
1
if
(n) 1 + 1
c
(n)
if(<expresin lgica>)
{
//instrucciones
}
else
{
//instrucciones
}
Cabecera:
Cuerpo del if:
Cuerpo del else:
if(<expresin lgica>)
{
//instrucciones
}
else
{
//instrucciones
}
1
1
cIf
(n)
Cabecera:
Cuerpo del if:
Cuerpo del else:
1
cElse
(n)
1
if-else
(n) 1 + MAX(1
cIf
(n),1
cElse
(n))
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
EjempIo:
8I
1
2
1
//Algoritmo que muestra ordenado de forma descendente 2 nmeros.
if(x>y)
{
System.out.println(x+,+y);
}
else
{
System.out.println(Los nmeros son);
System.out.println(y+,+x);
}
1
2
3
4
5
6
7
8
9
10
11
1
1
1
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
Repetitivus
FOR FOR
Sintuis:
Semnticu:
Se reoIi;o Io insfruccion de inicioIi;ocion, Iuego se evoIo Io expresion Iogico,
si esfo es verdodero enfonces se reoIi;on Ios insfrucciones deI cuerpo, despues se
poso o Io ocfuoIi;ocion de voriobIe y vueIve o evoIuorse Io expresion Iogico.
Como coIcuIor eI fiempo de ejecucion de uno esfrucfuro de confroI for7 Poro
reoIi;or nuesfro onoIisis, consideroremos que un for fiene bosicomenfe Z porfes: uno
cobecero y un cuerpo. EsfobIeceremos uno formuIo que nos diro cuonfos veces se
ejecufo Io cobecero porque conociendo cuonfos veces Io hoce podemos sober
cuonfos veces enfro hocer Ios insfrucciones de su cuerpo.
Si decimos que Io cobecero se ejecufo un nmero x de veces enfonces se
enfroron o hocer Ios insfrucciones deI cuerpo x-I veces.
x=
distancia
(valor que actuali:a)
+2
Donde disfoncio es Io que recorre Io voriobIe poro IIegor desde Io inicioIi;ocion
hosfo yo no cumpIir Io expresion Iogico.
8Z
for(<inicializacin>; <expresin lgica>; <actualizacin>)
{
//instrucciones
}
Cabecera:
Cuerpo:
1
for
(n) x + 1
c
(n)(x-1)
x
for(<inicializacin>; <expresin lgica>; <actualizacin>)
{
//instrucciones
}
Cabecera:
Cuerpo: 1
c
(n) (x-1)
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
EjempIo:
EI probIemo se reduce o conocer cuonfos veces se ejecufo Io cobecero deI
for. Veomos oIgunos posos poro sober esfe voIor:
I. Conocer Io disfoncio que recorre Io voriobIe i.
Como i se mueve desde 1 hosfo n, enfonces Io disfoncio sero n-1.
Z. Conocer eI voIor que ocfuoIi;o.
Lo voriobIe i se incremenfo de I en I, enfonces eI voIor que ocfuoIi;o es I.
3. PeempIo;or en Io formuIo eI voIor de Io disfoncio y eI voIor que ocfuoIi;o:
x=
distancia
(valor que actuali:a)
+2
==>
x=
(n-1)
1
+2
==>
x=n+1
83
//programa que muestra los nmeros naturales de 1 hasta n
for (int i = 1; i <= n; i++)
{
System.out.println(i);
}
1
2
3
4
5
6
7
8
x
1
for
(n) x + 1
c
(n)(x-1)
1
for
(n) (n-1) + 1( (n-1) - 1 )
1
for
(n) 2n-3
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
WHILE WHILE
Sintuis:
Semnticu:
Se evoIo Io expresion Iogico, si esfo es verdod se ejecufon Ios insfrucciones
de su cuerpo y Iuego se regreso o evoIuor Io cobecero nuevomenfe. Esfo se repife
mienfros Io expresion Iogico seo verdodero.
Poro coIcuIor eI fiempo de ejecucion de un whiIe, fombien es imporfonfe
conocer Ios veces que se ejecufo su cobecero y Ios veces que enfroro o reoIi;or su
cuerpo sero uno ve; menos.
84
while(<expresin lgica>)
{
//instrucciones
}
Cabecera:
Cuerpo:
x
while(<expresin lgica>)
{
//instrucciones
}
Cabecera:
Cuerpo:
1
c
(n)
(x-1)
1
while
(n) x + 1
c
(n)(x-1)
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
DO - WHILE DO - WHILE
Sintuis:
Semnticu:
Se ejecufon Ios insfrucciones deI cuerpo y Iuego recien se evoI Io expresion
Iogico de Io cobecero, si esfo es verdod se ejecufon Ios insfrucciones de su cuerpo
nuevomenfe. Esfo se repife mienfros Io expresion Iogico seo verdodero.
Uno esfrucfuro de confroI do-whiIe se diferencio de un whiIe en que Ios veces
que enfro o su cuerpo y Ios veces que evoIo su cobecero siempre von o ser Io mismo.
8b
do
{
//instrucciones
}while(<expresin lgica>);
Cuerpo:
Cabecera:
x
do
{
//instrucciones
}while(<expresin lgica>); Cabecera:
Cuerpo:
1
c
(n) x
1
do-while
(n) x + 1
c
(n)x
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
Orden de Mugnitud {Notucin O grunde}
Cuondo se frofon de oIgorifmos, eI coIcuIo defoIIodo deI fiempo de ejecucion
de fodos Ios operociones primifivos IIevoro mucho fiempo. Ademos, que imporfoncio
fendro eI nmero de insfrucciones primifivos ejecufodos por un oIgorifmo7
Es mos fiI en eI onoIisis de oIgorifmos, ver Io veIocidod de crecimienfo deI
fiempo de ejecucion como uno funcion deI fomoo de Io enfrodo n, en Iugor de
reoIi;or coIcuIos defoIIodos. Es mos significofivo sober que un oIgorifmo crece, por
ejempIo, proporcionoImenfe o n, o ro;on de un focfor consfonfe pequeo que
depende deI hordwore o soffwore y puede vorior en un cierfo rongo, dependiendo de
uno enfrodo n especfico. Esfo Io que se conoce como orden de mognifud "O(g(n))" o
nofocion osinfofico o nofocion "O gronde".
EI orden de mognifud se ufiIi;o poro comporor Io eficiencio de Ios oIgorifmos.
Lo nofocion "O gronde", se cenfro en eI trmino dominunte (es decir, en oqueI que
mos crece cuondo n oumenfo), e ignoro eI resfo de ferminos. Por Io fonfo, desprecio
fombien Ios coeficienfes de Ios ferminos.
Por ejempIo poro un oIgorifmo de fiempo de ejecucion ~ on
Z
+ bn + c
Su orden de mognifud sero:
O(on
Z
+ bn + c) ~ O(on
Z
) ~ O(n
Z
)
Definicin conceptuuI deI Orden de Mugnitud
Seon f(n) y g(n) funciones definidos sobre enferos no negofivos. Diremos que
f(n) es O(g(n)) si exisfe un nmero reoI consfonfe c0 y un enfero consfonfe n
0
~I,
foI que f(n)c^g(n) poro fodo enfero n~n
0
.
Por consiguienfe, g(n) es un Imife superior poro f(n), como se iIusfro en Io
siguienfe figuro.
8o
Estructuras de Datos en Java Cristian Denis Mamani Torres
Anlisis de Algoritmos xjkwak@gmail.com
EI orden de mognifud es ompIiomenfe ufiIi;odo poro corocferi;or Ios fiempos
de ejecucion en ferminos de Io Iongifud de enfrodo n, eI cuoI voro de probIemo en
probIemo, pero es usuoImenfe uno nocion infuifivo deI "fomoo" deI probIemo.
Asimismo, eI orden de mognifud nos permife ignoror focfores consfonfes y ferminos
de orden menor y opunfor o Ios componenfes principoIes de uno funcion que infIuyen
en su crecimienfo.
Cuondo se dice que f(n) es deI O(g(n)), se esfo goronfi;ondo que Io funcion
f(n) crece o uno veIocidod no moyor que g(n), os g(n) es uno cofo superior de f(n).
Propiedudes deI Orden de Mugnitud
1. O( I(x) ) k O( I(x) )
2. O( k I(x) ) O( I(x) )
3. O( I(x) ) * O( g(x) ) O( I(x) * g(x) )
4. O( I(x) ) O( g(x) ) max ( O( I(x) ), O( g(x) ) )
87
n
T(n)
I(n)
c*g(n)
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos xjkwak@gmail.com
Estructurus de Dutos
Estructurus de Dutos
Definicin
Uno esfrucfuro de dofos es un conjunfo de eIemenfos, deI mismo fipo, que se
reIocionon enfre s y que se pueden operor como un fodo.
EI componenfe bosico de Io esfrucfuro de dofos es Io ceIdo, Ios esfrucfuros
de dofos se impIemenfon o froves de Ios Ienguojes (en nuesfro coso, Io horemos con
Jovo), y son un modeIo que corocferi;o y permife oImocenor y ufiIi;or uno
deferminodo orgoni;ocion de dofos.
Operuciones
Sobre uno esfrucfuro de dofos se puede efecfuor diferenfes fipos de
operociones, enfre Ios mos imporfonfes esfon:
Nuvegur por Iu estructuru
Esfo es uno operocion bosico que goronfi;o que se puede recuperor
informocion oImocenodo.
squedu,
Permife deferminor si un eIemenfo se encuenfro o no en Io esfrucfuro.
ConsuItu de Iu informucin,
Permife obfener informocion de uno o mos eIemenfos de Io esfrucfuro.
Copiu purciuI o totuI,
Medionfe esfo operocion se puede obfener fofoI o porcioImenfe uno
esfrucfuro con corocfersficos simiIores o Io originoI.
88
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos xjkwak@gmail.com
Pruebu,
Permife deferminor si uno o vorios eIemenfos cumpIen deferminodos
condiciones.
Modificucin,
Permife vorior porcioI o fofoImenfe eI confenido de Io informocion de Ios
eIemenfos de Io esfrucfuro.
Insercin,
Es oqueIIo medionfe Io cuoI se incIuye un nuevo eIemenfo en Io esfrucfuro.
EIiminucin,
Como su nombre Io indico, es Io que permife suprimir eIemenfos de Io
esfrucfuro.
Verificur si es vucu
Permife deferminor si exisfen o no eIemenfos sobre Io esfrucfuro.
89
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos xjkwak@gmail.com
CIusificucin
Estructurus de Dutos Internu y Eternu
Si uno esfrucfuro de dofos reside en Io memorio cenfroI de Io compufodoro se
denomino estructuru de dutos internu. Pecprocomenfe, si reside en un soporfe
exferno, se denomino estructuru de dutos eternu,
Los esfrucfuros de dofos infernos pueden ser de dos fipos:
e Esfrucfuros de Dofos Esfoficos.
e Esfrucfuros de Dofos Dinomicos.
Estructurus de Dutos Estticus
Tienen un nmero fijo de eIemenfos que quedo deferminodo desde Io
decIorocion de Io esfrucfuro en eI comien;o deI progromo. EjempIo Ios orregIos.
Los esfrucfuros de dofos esfoficos, presenfon dos inconvenienfes:
x Lo reorgoni;ocion de sus eIemenfos, si esfo impIico mucho movimienfo
puede ser muy cosfoso. EjempIo: inserfor un dofo en un orregIo ordenodo.
x Son esfrucfuros de dofos esfoficos, es decir, eI fomoo ocupodo en
memorio es fijo, eI orregIo podro IIenorse y si se creo un orregIo de
fomoo gronde se esforo desperdiciendo memorio.
Estructurus de Dutos Dinmicus
Los esfrucfuros de dofos dinomicos nos permifen Iogror un imporfonfe
objefivo de Io progromocion orienfodo o objefos: Io reufiIi;ocion de objefos.
AI confrorio de un orregIo, que confiene espocio poro oImocenor un nmero
fijo de eIemenfos, uno esfrucfuro dinomico de dofos se ompIo y confroe duronfe Io
ejecucion deI progromo.
90
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos xjkwak@gmail.com
A su ve;, esfe fipo de esfrucfuros se pueden dividir en dos grondes grupos
segn Io formo en Io cuoI se ordenon sus eIemenfos.
LineoIes
Mo IineoIes
Estructurus de Dutos LineuIes y No LineuIes
Enfre Ios IineoIes: Iisfos, piIos y coIos. Los no IineoIes: orboIes y grofos.
LIMEALES MO LIMEALES
Obgetivos
EI objefivo deI presenfe copfuIo es hocer enfosis en fres ospecfos:
e Presenfor Ios diferenfes esfrucfuros de dofos.
e DesorroIIor hobiIidodes necesorios en fi, poro consfruir Ios oIgorifmos que
monipuIon de monero eficienfe esfos esfrucfuros.
e Y por Ifimo, que seos copo; de seguir uno mefodoIogo poro diseor (definir y
jusfificor) Ios esfrucfuros de dofos mos odecuodos poro resoIver un
probIemo.
9I
Lisfos
PiIos
CoIos
ArboIes
0rofos
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Estructurus de Dutos LineuIes
Estructurus de Dutos LineuIes
En esfe fipo de esfrucfuros Ios eIemenfos se encuenfron ubicodos
secuencioImenfe. AI ser dinomico, su composicion voro o Io Iorgo de Io ejecucion deI
progromo que Io ufiIi;o o froves de operociones de insercion y eIiminocion.
Dependiendo deI fipo de occeso o Io secuencio, horemos Io siguienfe
disfincion:
Listus: podemos occeder (inserfor y eIiminor) por cuoIquier Iodo.
PiIus: soIo fiene un nico punfo de occeso fijo o froves deI cuoI se ooden, se
eIiminon o se consuIfon eIemenfos.
CoIus: fiene dos punfos de occeso, uno poro oodir y eI ofro poro consuIfor o
eIiminor eIemenfos.
Listus
Uno Iisfo en su senfido ompIio, es un conjunfo de eIemenfos deI mismo fipo
donde codo eIemenfo fiene un nico predecesor (excepfo eI primero) y un nico
sucesor (excepfo eI Ifimo) y cuyo nmero de eIemenfos es voriobIe.
S ~ {o, b, c, d,. . . ;}
EjempIo: Uno Iisfo de Iefros
Operuciones
Enfre Ios operociones permifidos esfon:
Verificor si es voco.
Inserfor, eIiminor o IocoIi;or un eIemenfo.
Deferminor eI fomoo de Io Iisfo.
Efc.
En fin, uno Iisfo podro fener fodo fipo de operociones que Ie permifon ser
monipuIodo como un orregIo por ejempIo.
9Z
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Veomos dos moneros de definir e impIemenfor o uno Iisfo. Lo primero, frofo
de uno definicion recursivo de Io Iisfo y Io segundo, se boso en eI concepfo de ceIdo o
nodo
I
.
Definicin recursivu,
En esfo formo de impIemenfocion, uno Iisfo puede definirse como un dofo
seguido de ofro Iisfo o como voco.
EgempIo: Lo Iisfo [I, Z, 3] de monero recursivo puede verse os:
[I, Z, 3] ~ I - [Z,3] : I seguido de Io Iisfo [Z, 3]
[Z, 3] ~ Z - [3] : Z seguido de Io Iisfo [3]
[3] ~ 3 - [ ] : 3 seguido de uno Iisfo vocio
De monero grofico:
u} Listu vucu b} Listu no vucu
Enfonces uno Iisfo fiene como ofribufos o un dofo
Z
y Io referencio o Io
siguienfe Iisfo.
Listu vucu: Cuondo eI dofo y Io referencio siguienfe no exisfen (son nuII).
Listu no vucu: Cuondo exisfe eI dofo y Io siguienfe Iisfo por Io menos es voco.
I AIgo que expIicoremos mos odeIonfe.
Z Que puede ser de cuoIquier fipo, dependiendo de que fipos de dofos querromos oImocenor en
nuesfro Iisfo (nmeros, corocferes, efc)
93
dato Lista siguiente
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Ahoro pensemos en Io impIemenfocion, si quisieromos uno Iisfo de nmeros
enferos, enfonces eI fipo de dofo deI dofo de Io Iisfo sero inf o Infeger. De iguoI
monero si quisieromos que Io Iisfo oImocene codenos, enfonces eI fipo sero Sfring, y
si quisieromos objefos personos, pues sero Persono y os sucesivomenfe. Mos
conviene coIocor eI fipo de dofo como Objecf
I
yo que de eso monero permifimos que
puedo oImocenorse fodo fipo de eIemenfos (nmeros, corocferes, objefos en
generoI).
EI modeIo UML sero eI siguienfe:
Y su impIemenfocion:
I Esfo se debe o que Objecf es Io supercIose de fodos Ios cIoses en Jovo.
94
public class Lista
{
private Object dato;
private Lista sig;
public Lista()
{
dato = null;
sig = null;
}
public boolean vacia()
{
return sig == null;
}
public void insertarFinal(Object x)
{
if (vacia())
{
dato = x;
sig = new Lista();
} else
sig.insertarFinal(x);
}
[...]
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Lu cIuse Lista.java
Constructores Constructores
Mtodos Mtodos
Verificur si es vucu Verificur si es vucu
9b
/**
* Constructor por defecto, crea una lista vacia.
*/
public Lista()
{
dato = null;
sig = null;
}
/**
* Crea una lista con un slo dato.
* @param d es el nico dato de la lista.
*/
public Lista(Object d)
{
dato = d;
sig = new Lista();
}
/**
* Crea una lista a partir de otra
* @param otra
*/
public Lista(Lista otra)
{
dato = otra.dato;
sig = otra.sig;
}
/**
* Verifica si la lista est vaca.
* Una lista est vaca, cuando el dato
* y la referencia a la siguiente lista son null.
*/
public boolean vacia()
{
return dato==null&&sig == null;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Insertur un duto uI finuI Insertur un duto uI finuI
Insertur un duto uI inicio Insertur un duto uI inicio
Insertur un duto en Iu k-simu posicin de Iu Iistu Insertur un duto en Iu k-simu posicin de Iu Iistu
9o
/**
* Aade un nuevo elemento al final de la lista.
* @param x es el nuevo elemento a ser insertado
*/
public void insertarFinal(Object x)
{
if (vacia())
{
dato = x;
sig = new Lista();
}
else
sig.insertarFinal(x);
}
/**
* Aade un nuevo elemento al principio de la lista.
* @param x es el nuevo elemento a ser insertado
*/
public void insertarInicio(Object x)
{
sig = new Lista(this);
dato = x;
}
/**
* Inserta un nuevo dato sobre la lista en la posicin especificada
* La primera posicin es 0. Si la posicin destino no existe,
* entonces el nuevo dato se inserta al final
* @param x es el dato a insertar
* @param k es la posicin donde debe insertarse
*/
public void insertar(Object x, int k)
{
if(vacia()||k==0)
insertarInicio(x);
else
sig.insertar(x, k-1);
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
EIiminur un duto de Iu Iistu EIiminur un duto de Iu Iistu
Obtener eI tumuo de Iu Iistu Obtener eI tumuo de Iu Iistu
uscur un duto sobre Iu Iistu uscur un duto sobre Iu Iistu
97
/**
* Elimina el dato que sea igual al especificado
* @param x es el dato a buscar
* @return el dato eliminado
*/
public Object eliminar(Object x)
{
Object res = null;
if(!vacia())
{
if(dato.equals(x))
{
res = dato;
dato = sig.dato;
sig = sig.sig;
}
else
res = sig.eliminar(x);
}
return res;
}
/**
* Obtiene el tamao de la lista
* @return la cantidad de elementos de la lista
*/
public int tamao()
{
if (vacia()) return 0;
return 1 + sig.tamao();
}
/**
* Busca un elemento en la lista
* @param x es el elemento a ser buscado
* @return el resultado de comprobar si el dato est en la lista.
*/
public boolean buscar(Object x) {
if (vacia()) return false;
if (dato.equals(x)) return true;
return sig.buscar(x);
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Obtener un eIemento de cuuIquier posicin de Iu Iistu Obtener un eIemento de cuuIquier posicin de Iu Iistu
Obtener en formuto cudenu u Iu Iistu Obtener en formuto cudenu u Iu Iistu
98
/**
* Permite obtener un elemento de la lista
* de una posicin especificada
* @param pos es la posicin del objeto
* @return el elemento de esa posicin
*/
public Object obtener(int pos)
{
if(vacia())return null;
if(pos==0)return dato;
return sig.obtener(pos-1);
}
/**
* Devuelve en cadena a la lista [a,b,c....z]
* @return todos los elementos en formato cadena
*/
public String toString()
{
String res = "[" + resto() + "]";
return res;
}
//mtodo recursivo que obtiene todos los elementos de la lista
private String resto()
{
String res = "";
if (!vacia())
{
res = dato.toString();
if (!sig.vacia())
res = res + ", " + sig.resto();
}
return res;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Modificur eI eIemento de unu posicin dudu Modificur eI eIemento de unu posicin dudu
EIiminur eI eIemento de unu posicin dudu EIiminur eI eIemento de unu posicin dudu
99
/**
*
* @param pos La posicin que debe modificarse
* @param x El nuevo elemento
*/
public void modificar(int pos, Object x)
{
if(vacia()||pos<0)return;
if(pos==0)
{
dato = x;
}
else
{
sig.modificar(pos-1, x);
}
}
/**
*
* @param pos la posicin del elemento
* @return el elemento de la posicin
*/
public Object eliminar(int pos)
{
if( vacia() ) return null;
if(pos==0)
{
Object res = dato;
dato = sig.dato;
sig = sig.sig;
return res;
}
else
return sig.eliminar(pos-1);
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Podromos poror ohi Io impIemenfocion de mefodos y ver un ejempIo de
ufiIi;ocion de Io Iisfo. Por ejempIo, creor uno Iisfo y IIenorIo. con que7, pues con Io
que seo, recuerdo que es uno Iisfo de objefos.
Y con esfo fendromos uno Iisfo, porecido o esfo:
[ "Hola Nena", 13, true]
0 1 2
Como ves, podemos inserfor cuoIquier fipo de objefo sobre esfo Iisfo, y
vemos que codo eIemenfo, ocupo uno posicion denfro de Io Iisfo siguiendo eI esfondor
de Jovo poro Ios ndices, eI primer eIemenfo esfo en Io posicion 0, eI segundo en Io
posicion I y os sucesivomenfe.
Pero que foI si quisieromos obfener un eIemenfo de Io Iisfo, por ejempIo eI
primero. Enfonces nuesfro codigo inocenfe sero oIgo como esfo:
Tendromos un error, pues recordemos que Io que devueIve eI mefodo
obfener, es un Object y no un String como pensobomos, bueno, pero eso se puede
orregIor os:
Lo orregIomos hociendo uno simpIe conversion de fipos (cosfing).
Lo venfojo de fener uno Iisfo de objefos, es fener uno Iisfo que puede
I00
[...]
Lista lista = new Lista();
lista.insertarFinal("Hola Nena");
lista.insertarFinal(13);
lista.insertarFinal(true);
System.out.println(lista);
[...]
[...]
String x = lista.obtener(0); -> Error, un object no es un String
[...]
[...]
String x = (String)lista.obtener(0);
[...]
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
oImocenor fodo fipo de dofos, nmeros, corocferes, efc. Lo desvenfojo es o Io horo
de occeder o esos dofos, no sober exocfomenfe o que fipo de dofo esfomos
occediendo. Lo siguienfe Ineo muesfro un ejempIo cIoro de esfo:
Esfe codigo compiIo correcfomenfe, infenfomos obfener eI segundo eIemenfo
de Io Iisfo, pero oI ejecufor eI codigo nos oporece eI siguienfe error:
Que significo que eI cosfing que infenfobomos hocer no es voIido. Esfo es
debido o que si nos fijomos que eIemenfo reoImenfe esfo en Io posicion I, vemos que
no es uno codeno sino un enfero y Io esfomos obIigondo o que seo codeno, esfo no Io
permife Jovo.
Uno soIucion no muy bueno (pesimo) poro eI onferior probIemo, sero fener uno
impIemenfocion especfico poro codo fipo de dofo. Si quisieromos uno Iisfo de
nmeros enferos, enfonces en nuesfro onferior impIemenfocion modificor eI fipo de
dofo de Object o int y frobojor fodos Ios operociones poro esfe fipo de dofo, eI
probIemo de hocerIo de esfo monero es que fendromos uno impIemenfocion de Iisfo
poro codo diferenfe fipo de dofo. Uno soIucion mejor, y ohoro posibIe de hocerIo en
Jovo desde Io version I.b es poromefri;or eI fipo de dofo de nuesfro esfrucfuro.
Senericidud o Purumetrizucin de tipos
Consisfe en infroducir un poromefro en Io definicion deI fipo poro poder
usorIo con disfinfos fipos, esfo quiere decir que en Iugor de escribir
especificociones, represenfociones e impIemenfociones independienfes poro codo
fipo, se escribe uno soIo, donde eI fipo se reempIo;o por un poromefro.
I0I
[...]
String x = (String)lista.obtener(1);
[...]
java.lang.ClassCastException: java.lang.Integer
[...]
EI fipo de dofo fombien es voriobIe
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Horemos ofro impIemenfocion de Iisfo con poromefri;ocion de fipo. O seo uno
Lista<E> donde E
1
es eI poromefro generico formoI de "cuoIquier fipo".
Ahoro, si necesifomos fener uno Iisfo poro monejor enferos y que fodos sus
operociones seon poro enferos, escribimos Io siguienfe:
I Podro hober sido cuoIquier Iefro o poIobro, es uno voriobIe.
I0Z
public class Lista<E>
{
private E dato;
private Lista<E> sig;
public Lista()
{
dato=null;
sig=null;
}
public boolean vacia(){
return sig==null;
}
public void insertarFinal(E x)
{
if(vacia())
{
dato = x;
sig = new Lista<E>();
}
else
sig.insertarFinal(x);
}
public int tamao()
{
if(vacia())return 0;
return 1 + sig.tamao();
}
public E obtener(int pos)
{
if(vacia())return null;
if(pos==0)return dato;
return sig.obtener(pos-1);
}
[...]
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Definicin de Listu en buse u Nodos
Ofro formo de ver o uno Iisfo es como un conjunfo de ceIdos o nodos que se
encuenfron enIo;odos enfre si.
Y dependiendo de Ios enIoces y como se Ios fengo, podemos fener uno Iisfo de
simpIe enIoce, Iisfo de dobIe enIoce, Iisfo de simpIe enIoce circuIor o Iisfo de dobIe
enIoce circuIor.
Listu de SimpIe EnIuce
Codo nodo de Io Iisfo fiene Z compos: un compo que fiene eI dofo y ofro que
fiene Io referencio deI siguienfe nodo.
Los nodos de Io Iisfo son enIo;odos por medio de Ios compos enIoces. EI Ifimo
nodo de uno Iisfo de simpIe enIoce, por definicion no fiene siguienfe o no exisfe o en
ferminos de progromocion es MULL.
I03
[...]
Lista<Integer> lista = new Lista<Integer>();
lista.insertarFinal(13);
lista.insertarFinal("Hola"); -> Error de compilacin, el mtodo insertarFinal
[...] de Lista<nteger> slo acepta nmeros enteros
1 7 13 4 3 21 5
13 17 23 7
inicio
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
A confinuocion se muesfro Io impIemenfocion de un Modo de simpIe enIoce
generico, esfo poro poder poromefri;or eI tipo de duto de dofo.
I04
class Nodo<E>
{
private E dato;
private Nodo<E> sig;
public Nodo(E n)
{
dato = n;
sig = null;
}
public E getDato()
{
return dato;
}
public Nodo<E> getSig()
{
return sig;
}
public void setDato(E x)
{
dato=x;
}
public void setSig(Nodo<E> x)
{
sig=x;
}
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Poro fener uno Iisfo enIo;odo con esfos nodos, bosfo con fener Io referencio
soIomenfe deI primero, oI iguoI que poro sosfener un conjunfo de peIofifos enIo;odos
soIo fenemos que ogorrornos de Io primero peIofifo.
I0b
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Lu cIuse ListaSE.java
Constructor Constructor
Mtodos Mtodos
Verificur si es vucu Verificur si es vucu
Insertur un duto uI inicio Insertur un duto uI inicio
I0o
class ListaSE<E>
{
private Nodo<E> inicio;
[...]
}
/**
* Crea una lista vacia
*
*/
public ListaSE()
{
inicio = null;
}
/**
* Verifica si la lista est vacia
* @return el resultado de ver si la lista est vaca
*/
public boolean vacia(){
return inicio==null;
}
/**
* Inserta un dato al inicio de toda la lista
* @param x es el nuevo dato para la lista
*/
public void insertarInicio(E x){
Nodo<E> nuevo = new Nodo<E>(x);
if(!vacia())
nuevo.setSig(inicio);
inicio = nuevo;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Insertur un duto uI finuI Insertur un duto uI finuI
Obtener eI tumuo de Iu Iistu Obtener eI tumuo de Iu Iistu
I07
/**
* Inserta un nuevo dato al final de toda la lista
* @param x es el dato a insertar al Final
*/
public void insertarFinal(E x)
{
Nodo<E> nuevo = new Nodo<E>(x);
if(vacia())
{
inicio = nuevo;
}
else
{
Nodo<E> actual = inicio;
while(actual.getSig()!=null)
{
actual = actual.getSig();
}
actual.setSig(nuevo);
}
}
/**
* Cuenta la cantidad de elementos de la lista
* @return el nmero de elementos de la lista
*/
public int tamao()
{
int contador=0;
for(Nodo<E> x=inicio; x!=null; x=x.getSig())
{
contador++;
}
return contador;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Obtener eI eIemento de unu posicin dudu Obtener eI eIemento de unu posicin dudu
EIiminur eI eIemento de unu posicin dudu EIiminur eI eIemento de unu posicin dudu
I08
/**
* @param pos La posicin del elemento
* @return el elemento de la posicin pos
*/
public E obtener(int pos)
{
int i=0;
Nodo<E> x = inicio;
while(x!=null && i!=pos)
{
x = x.getSig();
i++;
}
return x==null? null : x.getDato();
}
/**
* @param pos La posicin del elemento
* @return el elemento de la posicin pos
*/
public E eliminar(int pos)
{
int i=0;
Nodo<E> an = null;
Nodo<E> ac = inicio;

while(ac!=null && i!=pos)
{
an = ac;
ac = ac.getSig();
i++;
}
E res = null;
if(ac!=null)
{
res = ac.getDato();
if(an==null)
inicio = inicio.getSig();
else
an.setSig(ac.getSig());
}
return res;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
uscur un eIemento en Iu Iistu uscur un eIemento en Iu Iistu
AIgo que cobe resoIfor en esfo nuevo impIemenfocion es eI hecho de que no
usomos recursividod poro reoIi;or Ios mefodos yo que no es necesorio, oIgo que no se
puede evifor en Io definicion recursivo de Lisfo.
Listu de DobIe EnIuce
En Ios Iisfos IineoIes esfudiodos onferiormenfe eI recorrido de eIIos soIo podo
hocerse en un nico senfido: de i;quierdo o derecho. Sin emborgo en muchos
ocosiones es necesorio recorrer Io Iisfo en ombos direcciones. Esfe fipo de Iisfos se
denomino Lisfos de DobIe EnIoce o Lisfos DobIemenfo EnIo;odos. En esfe fipo de
Iisfos codo nodo ho de fener 3 compos: un compo que fiene eI dofo, ofro que fiene Io
referencio deI siguienfe nodo y ofro que fiene Io referencio deI nodo onferior.
Los nodos de Io Iisfo son enIo;odos por medio de Ios compos enIoces. EI Ifimo
nodo de uno Iisfo de dobIe enIoce, no fiene siguienfe y eI primer nodo de Io Iisfo no
fiene onferior. Veomos uno impIemenfocion de nodo de dobIe enIoce:
I09
inicio
13 23 17 33
Iin
/**
*
* @param d el elemento a buscar
* @return el resultado de ver si elemento est o no
*/
public boolean buscar(E d)
{
Nodo<E> x = inicio;

while(x!=null&&!x.getDato().equals(d))
{
x = x.getSig();
}
return x!=null;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
II0
class NodoD<E>
{
private E dato;
private NodoD<E> sig;
private NodoD<E> ant;
public NodoD(E n)
{
dato = n;
sig = null;
}
public E getDato()
{
return dato;
}
public void setDato(E x)
{
dato=x;
}
public NodoD<E> getSig()
{
return sig;
}
public void setSig(NodoD<E> x)
{
sig=x;
}
public NodoD<E> getAnt()
{
return ant;
}
public void setAnt(NodoD<E> ant)
{
this.ant = ant;
}
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Lu cIuse ListaDE.java
Constructor Constructor
Mtodos Mtodos
Insertur un eIemento uI inicio Insertur un eIemento uI inicio
III
/**
* Constructor por defecto, crea una lista vacia.
*/
public ListaDE()
{
inicio = null;
fin = null;
}
class ListaDE<E>
{
private NodoD<E> inicio, fin;
[...]
}
/**
*
* @param x El elemento a insertar
*/
public void insertarInicio(E x)
{
NodoD<E> nuevo = new NodoD<E>(x);
if(vacia())
fin = nuevo;
else
{
nuevo.setSig(inicio);
inicio.setAnt(nuevo);
}
inicio = nuevo;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Insertur un eIemento uI finuI Insertur un eIemento uI finuI
Obtener Ios eIementos de Iu Iistu en formuto cudenu Obtener Ios eIementos de Iu Iistu en formuto cudenu
IIZ
/**
*
* @param x El elemento a insertar
*/
public void insertarFinal(E x)
{
NodoD<E> nuevo = new NodoD<E>(x);
if(vacia())
inicio = nuevo;
else
{
fin.setSig(nuevo);
nuevo.setAnt(fin);
}
fin = nuevo;
}
/**
* @return Retorna todos los elementos de la lista en formato cadena
*/
public String toString()
{
String res="";
for (NodoD<E> x=inicio; x!=null; x=x.getSig())
{
res = res + x.getDato()+" ";
}
return res;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
EIiminur y obtener eI primer eIemento de Iu Iistu EIiminur y obtener eI primer eIemento de Iu Iistu
EIiminur y obtener eI Itimo eIemento de Iu Iistu EIiminur y obtener eI Itimo eIemento de Iu Iistu
II3
/**
*
* @return Devuelve y elimina el primer elemento de la lista
*/
public E eliminarInicio()
{
E res=null;
if(!vacia())
{
res=inicio.getDato();
if(inicio==fin)
inicio=fin=null;
else
{
inicio = inicio.getSig();
inicio.setAnt(null);
}
}
return res;
}
/**
*
* @return Devuelve y elimina el ltimo elemento de la lista
*/
public E eliminarFin()
{
E res=null;
if(!vacia())
{
res=fin.getDato();

if(inicio==fin)
inicio=fin=null;
else
{
fin = fin.getAnt();
fin.setSig(null);
}
}
return res;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
uscur un eIemento en Iu Iistu uscur un eIemento en Iu Iistu
uscur un eIemento en Iu Iistu uscur un eIemento en Iu Iistu
II4
/**
*
* @param pos La posicin del elemento a borrar
* @return El elemento de la posicin dada
*/
public E eliminar(int pos)
{
if(pos==0) return eliminarInicio();
if(pos==tamao()-1) return eliminarFin();
else{
NodoD<E> x = inicio;
while(x!=null&&pos!=0)
{
x = x.getSig();
pos--;
}
E res=null;
if(x!=null)
{
res = x.getDato();
x.getAnt().setSig(x.getSig());
if(x.getSig()!=null)
x.getSig().setAnt(x.getAnt());
}
return res;
}
}
/**
*
* @param d el elemento a buscar
* @return el resultado de ver si elemento est o no
*/
public boolean buscar(E d)
{
NodoD<E> x = inicio;

while(x!=null&&!x.getDato().equals(d))
{
x = x.getSig();
}
return x!=null;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Listu CircuIur de SimpIe EnIuce
Uno Iisfo circuIor es uno Iisfo IineoI, en Io que eI Ifimo nodo enIo;o con eI
primero. Enfonces es posibIe occeder o cuoIquier eIemenfo de Io Iisfo desde
cuoIquier punfo dodo. Los operociones sobre uno Iisfo circuIor resuIfon mos senciIIos,
yo que se evifon cosos especioIes.
Cuondo recorremos uno Iisfo circuIor, diremos que hemos IIegodo oI finoI de Io
mismo, cuondo nos enconfremos de nuevo en eI punfo de porfido.
Los Iisfos circuIores presenfon Ios siguienfe venfojos respecfo de Ios Iisfos
enIo;odos simpIes:
Codo nodo de uno Iisfo circuIor es occesibIe desde cuoIquier ofro nodo de eIIo. Es
decir, dodo un nodo se puede recorrer fodo Io Iisfo compIefo.
Los operociones de concofenocion y division de Iisfos son mos eficoces con Iisfos
circuIores.
Un inconvenienfe, por eI confrorio, es:
Si no se fienen cuidodo con Ios operociones, se pueden fener cicIos infinifos.
IIb
inicio
13 17 23 7
Iin
class ListaSEC<E>
{
private Nodo<E> inicio;
private Nodo<E> fin;
[...]
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Lu cIuse ListaSEC.java
Constructor Constructor
Mtodos Mtodos
Verificur si es vucu Verificur si es vucu
Insertur un duto uI inicio Insertur un duto uI inicio
IIo
/**
* Crea una lista vacia
*
*/
public ListaSEC()
{
inicio = fin = null;
}
/**
* Verifica si la lista est vacia
* @return el resultado de ver si la lista est vaca
*/
public boolean vacia(){
return inicio==null&&fin==null;
}
/**
*
* @param x El nuevo elemento
*/
public void insertarInicio(E x)
{
Nodo<E> nuevo = new Nodo<E>(x);
if(vacia())
fin = nuevo;
else
nuevo.setSig(inicio);
inicio = nuevo;
fin.setSig(inicio);
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Insertur un duto uI finuI Insertur un duto uI finuI
Obtener en formuto cudenu Obtener en formuto cudenu
II7
/**
*
* @param x Es el nuevo elemento
*/
public void insertarFinal(E x)
{
Nodo<E> nuevo = new Nodo<E>(x);
if(vacia())
inicio = nuevo;
else
fin.setSig(nuevo);
fin = nuevo;
fin.setSig(inicio);
}
/**
* Devuelve la lista en formato cadena
*/
public String toString()
{
if(vacia()) return "";
String res = inicio.getDato()+" ";
for (Nodo<E> x=inicio.getSig(); x!=inicio; x=x.getSig())
{
res = res + x.getDato()+" ";
}
return res;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Listu CircuIur de DobIe EnIuce
Uno Iisfo circuIor de dobIe enIoce es uno Iisfo IineoI dobIemenfe enIo;odo, en
Io que eI Ifimo nodo fiene como siguienfe oI primero y eI primer nodo fiene como
onferior oI Ifimo nodo. Esfo mejoro eI occeso o cuoIquier eIemenfo desde cuoIquier
porfe y en cuoIquier senfido.
Cuondo recorremos uno Iisfo circuIor dobIemenfe enIo;odo, diremos que
hemos IIegodo oI finoI de Io mismo, cuondo nos enconfremos de nuevo en eI punfo de
porfido.
Lu cIuse ListaDEC.java
Constructor Constructor
II8
inicio
13 23 17 33
Iin
class ListaDEC<E>
{
private NodoD<E> inicio;
private NodoD<E> fin;
[...]
}
/**
* Crea una lista vacia
*
*/
public ListaDEC()
{
inicio = fin = null;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Mtodos Mtodos
Verificur si es vucu Verificur si es vucu
Insertur un duto uI inicio Insertur un duto uI inicio
II9
/**
* Verifica si la lista est vacia
* @return el resultado de ver si la lista est vaca
*/
public boolean vacia()
{
return inicio==null&&fin==null;
}
/**
*
* @param x El nuevo elemento
*/
public void insertarInicio(E x)
{
NodoD<E> nuevo = new NodoD<E>(x);
if(vacia())
fin = nuevo;
else
{
nuevo.setSig(inicio);
inicio.setAnt(nuevo);
}
inicio=nuevo;
inicio.setAnt(fin);
fin.setSig(inicio);
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Insertur un duto uI finuI Insertur un duto uI finuI
Obtener Iu Iistu en formuto cudenu Obtener Iu Iistu en formuto cudenu
IZ0
/**
*
* @param x El nuevo elemento
*/
public void insertarFinal(E x)
{
NodoD<E> nuevo = new NodoD<E>(x);
if(vacia())
{
inicio = nuevo;
fin = nuevo;
}
else
{
fin.setSig(nuevo);
nuevo.setAnt(fin);
fin = nuevo;
}
inicio.setAnt(fin);
fin.setSig(inicio);
}
/**
* Devuelve la lista en formato cadena
*/
public String toString()
{
if(vacia()) return "";
String res = inicio.getDato()+" ";
for (NodoD<E> x=inicio.getSig(); x!=inicio; x=x.getSig())
{
res = res + x.getDato()+" ";
}
return res;
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
PiIus
Uno piIo es un concepfo opIicobIe sobre esfrucfuros de dofos IineoIes, en Io
que Io insercion y eIiminocion de dofos se reoIi;o soIo por un exfremo denominodo
cimo o fope.
Podemos hocernos uno imogen mos grofico, pensondo en uno piIo de bondejos
en uno cofefero, uno piIo de pIofos en un fregodero, uno piIo de Iofos en un
exposifor de un supermercodo: en cuoIquiero de esfos ejempIos, Ios eIemenfos se
refiron y se ooden por un mismo exfremo. En uno piIo de pIofos podromos infenfor
refiror uno de Ios infermedios con eI consiguienfe peIigro de derrumbe. Sin
emborgo, en uno esfrucfuro de dofos de fipo piIo, esfo no es posibIe. EI nico
eIemenfo de Io piIo que podemos refiror es eI sifuodo en eI fope de Io mismo, y si
queremos refiror ofro, sero necesorio previomenfe hober borrodo fodos Ios
sifuodos "por encimo" de eI.
Los piIos siguen Io fiIosofo LIFO (Losf In Firsf Ouf), porque su corocfersfico
principoI es que eI Ifimo en Enfror es eI Primero en SoIir (UEPS).
Se define eI fope o cimo de Io piIo oI nico dofo visibIe de Io esfrucfuro que
sero eI Ifimo que se coIoco (eI que esfo encimo).
Operuciones
Enfre Ios operociones permifidos esfon:
Verificor si es voco (empfy)
Inserfor un dofo sobre Io piIo (push)
EIiminor un dofo de Io piIo (pop)
Inspeccionor Io cimo (fop)
IZI
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Veomos medionfe un ejempIo grofico, como combio eI confenido de uno piIo
conforme opIicomos sucesivomenfe Ios operociones de insercion y eIiminocion:
o) Pusheondo (opiIondo) eIemenfos sobre Io piIo
b) Popeondo (desopiIondo) eIemenfos de Io piIo
En eI ejempIo onferior podemos observor que eI fope (eI eIemenfo que esfo
encimo de fodos) voro si operomos sobre Io piIo (si oodimos o eIiminomos
eIemenfos). Si Io piIo esfo voco, es decir, si no fiene ningn eIemenfo, no hoy fope o
no esfo definido.
Los operociones sobre Ios piIos deberon fordor uno confidod consfonfe de
fiempo en ejecuforse, independienfemenfe deI nmero de eIemenfos opiIodos. De
formo onoIogo, enconfror eI periodico de hoy en uno piIo de periodicos es ropido,
independienfemenfe de Io oIfo que se Io piIo. Sin emborgo, eI occeso orbifrorio o uno
piIo no se soporfo de formo eficienfe, por Io que no se cofoIogo como opcion.
Lo que hoce que Ios piIos seon fiIes es que hoy muchos opIicociones en Ios que
soIo es necesorio occeder oI eIemenfo mos recienfemenfe inserfodo.
IZZ
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
A confinuocion se muesfro uno impIemenfocion de PiIo dinomico, recursivo,
generico y odemos no heredobIe (esfo por hocer respefor eI concepfo de piIo).

IZ3
public final class Pila<E>
{
private E tope;
private Pila<E> resto;
public Pila()
{
tope = null;
resto = null;
}
private Pila(Pila<E> otra)
{
tope = otra.tope;
resto = otra.resto;
}
public boolean empty()
{
return tope==null&&resto==null;
}
public void push(E x)
{
resto = new Pila<E>(this);
tope = x;
}
public E pop()
{
E res=null;
if(!empty())
{
res = tope;
tope = resto.tope;
resto = resto.resto;
}
return res;
}
public E top()
{
return tope;
}
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
ApIicuciones de Ius PiIus
Los piIos son ufiIi;odos ompIiomenfe poro soIucionor uno ompIio voriedod de
probIemos. Se ufiIi;on en compiIodores, sisfemos operofivos y en progromos de
opIicocion. Veomos oIgunos de Ios opIicociones mos inferesonfes.
e LIumudus u mtodos.- Cuondo se reoIi;on IIomodos o mefodos, eI progromo
principoI debe recordor eI Iugor donde se hi;o Io IIomodo, de modo que puedo
refornor oII cuondo eI mefodo se hoyo ferminodo de ejecufor.
e AImucenumiento temporuI de pginus Web.- Los novegodores de Infernef
oImocenon Ios direcciones de Ios poginos recienfemenfe visifodos en uno piIo.
Codo ve; que un usuorio visifo un nuevo sifio, Ios direcciones son infroducidos
en Io piIo de direcciones. EI novegodor despues permife oI usuorio voIver o Ios
poginos visifodos previomenfe usondo un bofon.
e EI mecunismo de "deshucer-rehucer" en Ios editores de teto,- Los
edifores de fexfo ufiIi;on usuoImenfe un meconismo de "deshocer" (undo) que
conceIo Ios operociones edifodos ocfuoImenfe poro voIver o Ios operociones
previos. Poro eIIo se ufiIi;o uno piIo.
En generoI, Ios opIicociones de esfo esfrucfuro de dofos seron oqueIIos en Ios
que Ios dofos se monejen de modo dinomico siguiendo uno poIfico LIFO.
IZ4
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
CoIus
EI concepfo de coIo es ompIiomenfe ufiIi;odo en Io vido reoI. Cuondo nos
sifuomos onfe Io foquiIIo deI cine poro obfener nuesfro enfrodo, o cuondo esperomos
en eI oufoservicio de un resfouronfe soIemos hocerIo en uno coIo. Esfo significo que
formomos uno fiIo en Io que eI primero que IIego es eI primero en obfener eI servicio
y soIir de Io mismo. Esfo poIfico de funcionomienfo se denomino FIFO (Firsf In
Firsf Ouf), es decir, eI primer eIemenfo en enfror es eI primer eIemenfo en soIir
(PEPS).
En Io vido reoI puede perfecfomenfe ocurrir que oIguien prefendo soIforse su
furno en uno coIo, o incIuso que obondone Io mismo onfes de que Ie foque eI furno.
Sin emborgo, en ombos cosos se esfo incumpIiendo Io poIfico de funcionomienfo de
Io coIo y, esfricfomenfe hobIondo, esfo dejo de serIo.
Los coIos son ofro fipo de concepfo fombien opIicobIes sobre esfrucfuros de
dofos IineoIes. En uno coIo Ios eIiminociones se reoIi;on por eI principio (inicio) y Ios
inserciones se reoIi;on en eI ofro exfremo (fin).
Se uson poro oImocenor dofos que necesifon ser procesodos segn eI orden de
IIegodo.
IZb
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
Exisfen vorios formos de impIemenfor o uno coIo , de formo esfofico
ufiIi;ondo orregIos o bien, de monero dinomico ufiIi;ondo eI concepfo de Iisfos. De
cuoIquier monero Ios operociones sobre coIos fombien deberon fordor uno confidod
de fiempo consfonfe en ejecuforse, independienfemenfe deI nmero de eIemenfos
que exisfon sobre eIIo.
Operuciones
Enfre Ios operociones permifidos esfon:
Verificor si es voco
Inserfor un dofo sobre Io coIo (encoIor)
EIiminor un dofo de Io coIo (decoIor)
Inspeccionor eI primero (primero)
A confinuocion se muesfro Io impIemenfocion de CoIo siguiendo eI concepfo de
Iisfo en bose o nodos:
IZo
final class Cola<E>
{
private Nodo<E> inicio, fin;
public Cola() { inicio = fin = null; }
public boolean vacia() { return inicio==null; }
public void encolar(E n)
{
Nodo<E> nuevo = new Nodo<E>(n);
if(vacia())
inicio = nuevo;
else
fin.setSig(nuevo);
fin=nuevo;
}
public E decolar()
{
if(vacia())return null;
E res=inicio.getDato();
inicio = inicio.getSig();
return res;
}
public E primero() { return vacia()?null:inicio.getDato(); }
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos Lineales xjkwak@gmail.com
ApIicuciones de Ius CoIus
En informofico exisfen numerosos opIicociones de Ios coIos. Por ejempIo, en un
sisfemo de fiempo comporfido sueIe hober un procesodo cenfroI y uno serie de
perifericos comporfidos: discos, impresoros, Iecfores de CD, efc. Los recursos se
comporfen por diferenfes usuorios y se ufiIi;o uno coIo poro oImocenor Ios
progromos o Ios peficiones de Ios diferenfes usuorios que esperon su furno de
ejecucion. EI procesodor cenfroI ofiende -normoImenfe- por riguroso orden de
IIomodo deI usuorio, por fonfo, fodos Ios IIomodos se oImocenon en uno coIo.
IZ7
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
Estructurus de Dutos No LineuIes
Estructurus de Dutos No LineuIes
Introduccin
Los esfrucfuros dinomicos IineoIes de dofos fienen grondes venfojos de
fIexibiIidod sobre Ios represenfociones configuos, sin emborgo fienen un punfo
debiI, son Iisfos secuencioIes, es decir, esfon dispuesfos de modo que es necesorio
moverse o froves de eIIos uno posicion codo ve;. Esfo IineoIidod es fpico de codenos,
de eIemenfos que perfenecen o uno soIo dimension. En esfe copfuIo se froforon Ios
estructurus de dutos no IineuIes, que resueIven Ios probIemos que pIonfeon Ios
Iisfos IineoIes y en Ios que codo eIemenfo puee fener diferenfes eIemenfos
"siguienfes", que infroducen eI concepfo de esfrucfuros de bifurcocion.
Los principoIes esfrucfuros de esfe fipo son:
rboIes: Ios eIemenfos esfon orgoni;odos como un verdodero orboI.
Srufos: Ios eIemenfos esfon orgoni;odos como uno red de dofos.
rboIes
En su senfido ompIio, un orboI permife oImocenor informocion y orgoni;orIo de
formo que fengon sucesores o eIemenfos siguienfes, como hijos en uno formo de Ios
romos de un orboI.
IZ8
1
7
13
4
3
21
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
Todo eI mundo fiene cIoro eI concepfo de orboI, oI menos en su ospecfo
bofonico. Sin emborgo, Ios orboIes no son soIo eso de Io que esfomos rodeodos
cuondo nos perdemos en un bosque, sino que fombien se uson en ofros muchos
ombifos. As por ejempIo, fodos hemos monejodo oIguno ve; eI concepfo de orboI
geneoIogico, o hemos visfo cIosificociones jerorquicos como Ios deI reino onimoI. En
fodos esos cosos monejomos eI concepfo de orboI.
AIgunos Conceptos
Ruz,-Es eI primer nodo deI orboI y
es por donde se occede o eI (soIo
fiene sucesores), es decir, Io cobe;o
deI orboI siempre sero Io ro;.
Nodo Hogu: AqueI nodo que no fiene
hijos o sucesores.
Nodo Interno,-AqueI nodo que fiene
un onfecesor y por Io menos un
sucesor (ni ro; ni hojos).
AIturu.- Es Io confidod de nodos que
se recorren poro IIegor desde Io ro;
hosfo eI nodo hojo mos oIejodo de
fodo eI orboI.
IZ9
ArboI geneoIogico
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
Srudo,- Confidod moximo de hijos que puede fener cuoIquier nodo.
NiveI,- Mmero de generociones que se esfo de Io ro;. Lo ro; esfo en un niveI ~ 0.
Rutu.- Comino que se recorre poro IIegor de un nodo o ofro.
SubrboI.- CuoIquier nodo puede ser considerodo como Io ro; de un suborboI.
Peso.- Es Io confidod de nodos hojo deI orboI.
Visitu.- Cuondo se occede oI dofo de un nodo.
Recorrido.- Cuondo se visifo fodos Ios nodos de un orboI en oIgn orden en especioI.
Nodo compIeto,- Un nodo es compIefo cuondo fiene fodos sus hijos o no fiene o
ninguno.
ArboI CompIeto,- Un orboI es compIefo cuondo fiene fodos sus nodos compIefos.
EjempIo:
H, E, I, J Y 0 son nodos hojo.
Lo oIfuro deI onferior orboI es 4.
De ocuerdo oI grodo de un orboI, podemos hocer uno cIosificocion en:
orboIes binorios (grodo~Z) y
n-orios (grodoZ).
I30
A
B C
D E F G
I 1
H
raz
D es el
hijo
izquierdo
de B
B es el padre
de D y E
E es el hijo
derecho de B
Un subrbol con F
como su raz
La lnea punteada es
una ruta.
nivel 0
nivel 1
nivel 2
nivel 3
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
rboIes inurios
Los orboIes binorios son un fipo especioI de orboI donde codo nodo puede
fener o Io mucho Z hijos (grodo ~ Z). Los dos hijos de codo nodo en un orboI binorio
son IIomodos hijo i;quierdo e hijo derecho.
Operuciones
Enfre Ios operociones permifidos esfon:
Verificor si es orboI voco.
Inserfor, eIiminor o IocoIi;or un eIemenfo.
Deferminor eI fomoo (nmero de eIemenfos) de Io esfrucfuro.
Efc.
AI iguoI que en Iisfos, vomos o ver dos moneros de definir e impIemenfor o un
orboI. Lo primero, frofo de uno definicion recursivo y Io segundo, se boso en eI
concepfo de nodo.
Definicin recursivu,
En esfo formo de impIemenfocion, un orboI puede definirse como un dofo (oI
que IIomomos ro;) seguido de un suborboI i;quierdo y ofro suborboI derecho.
I3I
5
7 3
raz
der izq
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
De monero grofico:
u} ArboI inurio vuco b} ArboI inurio no vuco
rboI vuco: Cuondo eI orboI no fiene ro;, ni i;quierdo ni derecho.
rboI no vuco: Cuondo exisfe uno ro; y fiene Z suborboIes (por Io menos vocos).
EI modeIo:
Lu cIuse ArbolB.java
I3Z
13
1
public class ArbolB<E>
{
private E raiz;
private ArbolB<E> izq;
private ArbolB<E> der;
[...]
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
Constructor Constructor
Mtodos Mtodos
Verificur si eI rboI est vuco Verificur si eI rboI est vuco
Insertur un eIemento en eI rboI en unu ubicucin uIeutoriu Insertur un eIemento en eI rboI en unu ubicucin uIeutoriu
I33
/**
* Construye un rbol binario vaco
*/
public ArbolB()
{
raiz = null;
izq = null;
der = null;
}
/**
*
* @return El resultado de verificar si est vaco
*/
public boolean vacio()
{
return raiz==null&&izq==null&&der==null;
}
/**
*
* @param x Es el elemento a insertar
*/
public void insertarAleatorio(E x)
{
if( vacio() )
{
raiz = x;
izq = new ArbolB<E>();
der = new ArbolB<E>();
}
else if(Math.random()<0.5)
izq.insertarAleatorio(x);
else
der.insertarAleatorio(x);
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
Obtener eI peso deI rboI binurio Obtener eI peso deI rboI binurio
Obtener eI tumuo deI rboI binurio Obtener eI tumuo deI rboI binurio
uscur un eIemento en eI rboI binurio uscur un eIemento en eI rboI binurio
I34
/**
* Calcula el peso del rbol.
* El peso de un rbol es igual al nmero de nodos hoja
* @return el peso del rbol
*/
public int peso()
{
if( vacio() ) return 0;
if( izq.vacio() && der.vacio() ) return 1;
return izq.peso() + der.peso();
}
/**
* Calcula el tamao del rbol.
* El tamao del rbol es la cantidad de nodos que existe
* @return el tamao del rbol
*/
public int tamao()
{
if( vacio() ) return 0;
return 1 + izq.tamao() + der.tamao();
}
/**
*
* @param x El elemento a buscar
* @return El resultado de ver si est
*/
public boolean buscar(E x)
{
if(vacio()) return false;
if(raiz.equals(x)) return true;
return izq.buscar(x) || der.buscar(x);
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
CuIcuIur Iu uIturu deI rboI binurio CuIcuIur Iu uIturu deI rboI binurio
Recorrido de un rboI binurio
Pecorrer un orboI consisfe en occeder uno soIo ve; o fodos sus nodos. Esfo
operocion es bosico en eI frofomienfo de orboIes y nos permife, por ejempIo,
imprimir fodo Io informocion oImocenodo en eI orboI, o bien eIiminor fodo esfo
informocion o, si fenemos un orboI de nmeros, sumor fodos Ios voIores, efc.
En eI coso de Ios orboIes binorios, eI recorrido de sus disfinfos nodos se debe
reoIi;or en fres posos:
e Visifor Io ro;.
e Visifor eI suborboI i;quierdo.
e Visifor eI suborboI derecho.
Esfos fres occiones reporfidos en diferenfes ordenes proporcionon Ios
diferenfes recorridos deI orboI: preorden, enorden y posforden. Su nombre refIejo
eI momenfo en que se visifo eI nodo ro;.
Recorrido preorden
e Visifor Io ro;
e Pecorrer eI suborboI i;quierdo en preorden
e Pecorrer eI suborboI derecho en preorden
I3b
/**
* Mtodo que calcula la altura de un rbol
* altura = cantidad de nodos desde la raiz hasta el nodo hoja
* ms alejado
* @return la altura del rbol
*/
public int altura()
{
if( vacio() ) return 0;
return 1 + Math.max( izq.altura(), der.altura() );
}
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
Recorrido enorden
e Pecorrer eI suborboI i;quierdo en enorden
e Visifor Io ro;
e Pecorrer eI suborboI derecho en enorden
Recorrido postorden
e Pecorrer eI suborboI i;quierdo en posforden
e Pecorrer eI suborboI derecho en posforden
e Visifor Io ro;
I3o
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
rboIes inurios de squedu
Son orboIes binorios que fienen Ios dofos ordenodos de foI monero que fodos Ios
dofos que esfon en eI suborboI i;quierdo son menores que Io ro; y fodos Ios dofos
que esfon en eI suborboI derecho son moyores o iguoIes que Io ro;.
I37
5
3 9
raz
der izq
Estructuras de Datos en Java Cristian Denis Mamani Torres
Estructuras de Datos No Lineales xjkwak@gmail.com
rboIes inurios de Epresin
Son orboIes binorios que oImocenon y represenfon expresiones orifmeficos.
I38
N0TA
Pcrc cuclquer reclcmo, suyerencc o ]clon de ore]cs escrbeme cl correo
del proyecto cyukn@ymcl.com o c m correo x]kwck@ymcl.com.
Estc es unc verson borrcdor y necesto de tu colcborccon pcrc poder
termncrlo cs que no dudes en escrbrme (es en sero). Atte. C0MT
Ultma actualzacn: 01-01-2009 (Felz ao nuevo!!!)

3 9
raz
der izq
Estructuras de Datos en Java Cristian Denis Mamani Torres
Bibliografa xjkwak@gmail.com
ibIiogrufu
ibIiogrufu
I. "Dofo Sfrucfures ond AIgorifhms in Jovo"
MifcheII Woife y Poberf Lofore (I998)
Z. "Esfrucfuro de Dofos y AIgorifmos"
AIIen Weiss Mork. Addison-WesIey (I99b)
3. "Esfrucfuros de Dofos y de Io Informocion"
Andres Muo; (Universidod de ChiIe - Z003)
4. "Son 0oogIe" - hffp://www.googIe.com
I39

Potrebbero piacerti anche