ALGORITMOS II - imagenes.uniremington.edu.coimagenes.uniremington.edu.co/moodle/Módulos de... ·...

Post on 29-Mar-2020

15 views 0 download

Transcript of ALGORITMOS II - imagenes.uniremington.edu.coimagenes.uniremington.edu.co/moodle/Módulos de... ·...

ALGORITMOS II INGENIERIA DE SISTEMAS

FACULTAD DE CIENCIAS BÁSICAS E INGENIERÍA

2 ALGORITMOS II INGENIERIA DE SISTEMAS

ElmódulodeestudiodelaasignaturaAlgoritmosIIespropiedaddelaCorporaciónUniversitariaRemington.Lasimágenesfuerontomadasdediferentesfuentesqueserelacionanenlosderechosdeautorylascitasenlabibliografía.Elcontenidodelmóduloestáprotegidoporlasleyesdederechosdeautorquerigenalpaís.

Estematerialtienefineseducativosynopuedeusarseconpropósitoseconómicosocomerciales.

AUTOR

JoséAntonioPoloIngenierodesistemasdelaUniversidaddeAntioquiaEspecialistaenfinanzasdelaCorporaciónUniversitariaRemington

y estudiante demaestría en educación de la universidad Cesun (TijuanaMéxico). Participación del tercer Congreso

ColombianodeComputación–3CCCdelauniversidadEAFITParticipacióndelprimersimposioenInteligenciaArtificial

de laCorporaciónUniversitariaRemingtonParticipacióndel IVCongreso InternacionaldeSoftwareLibreGNU/Linux,

UniversidaddeManizalesParticipacióndel5ºCongresoNacionaldeRedesyTelemática,RedesdeServiciosMóviles

Integrados,CentrodeConstruccióndeConocimientoEventoCCCDocentedecátedradelpolitécnicoJaimeIsazaCadavid

DocentedecátedradelTecnológicodeAntioquiaParticipacióndelproyectodelaarticulacióndelamediatécnicadel

TecnológicodeAntioquiaDocentedelaCorporaciónUniversitariaRemington.

Barra5111@yahoo.esNota:elautorcertificó(demaneraverbaloescrita)Nohaberincurridoenfraudecientífico,plagiooviciosdeautoría;encasocontrarioeximiódetodaresponsabilidadalaCorporaciónUniversitariaRemington,ysedeclarócomoelúnicoresponsable.RESPONSABLES

JorgeMauricioSepúlvedaCastañoDecanodelaFacultaddeCienciasBásicaseIngenieríajsepulveda@uniremington.edu.coEduardoAlfredoCastilloBuilesVicerrectormodalidaddistanciayvirtualecastillo@uniremington.edu.coFranciscoJavierÁlvarezGómezCoordinadorCUR-Virtualfalvarez@uniremington.edu.co

GRUPODEAPOYO

PersonaldelaUnidadCUR-VirtualEDICIÓNYMONTAJEPrimeraversión.Febrerode2011.Segundaversión.Marzode2012Terceraversión.noviembrede2015

DerechosReservados

EstaobraespublicadabajolalicenciaCreativeCommons.

Reconocimiento-NoComercial-CompartirIgual2.5Colombia.

3 ALGORITMOS II INGENIERIA DE SISTEMAS

TABLA DE CONTENIDO Pág.

1 MAPADELAASIGNATURA..............................................................................................................................7

2 UNIDAD1ARREGLOSDEREGISTROSYARCHIVOS..........................................................................................8

2.1 RELACIÓNDECONCEPTOS......................................................................................................................9

2.2 TEMA1DEFINICIÓN..............................................................................................................................11

2.3 TEMA2OPERACIONESCONARREGLOSDEREGISTROS........................................................................14

2.3.1 EJERCICIOSDEENTRENAMIENTO..................................................................................................15

2.4 TEMA3TIPOSDEARCHIVOS.................................................................................................................16

2.4.1 ARCHIVOS......................................................................................................................................16

2.4.2 CLASIFICACIÓNDELOSARCHIVOSSEGÚNSUUSO.......................................................................17

2.4.3 CLASIFICACIÓNDELOSARCHIVOSSEGÚNLOSDATOSQUEALMACENAN...................................17

2.5 TEMA4OPERACIONESCONARCHIVOS................................................................................................18

2.5.1 OPERACIONESBÁSICASCONARCHIVOS.......................................................................................18

2.5.2 ARCHIVODETEXTO.......................................................................................................................20

2.5.3 EJERCICIODEAPRENDIZAJE...........................................................................................................20

2.5.4 EJERCICIODEAPRENDIZAJE...........................................................................................................21

2.5.5 EJERCICIOSDEENTRENAMIENTO..................................................................................................23

2.6 TEMA5EFICIENCIADEALGORITMOS...................................................................................................23

2.6.1 EVALUACIÓNDEALGORITMOS.....................................................................................................24

2.6.2 CONTADORDEFRECUENCIAS........................................................................................................25

2.6.3 EJERCICIOSDEENTRENAMIENTO..................................................................................................27

2.6.4 ORDENDEMAGNITUD..................................................................................................................29

4 ALGORITMOS II INGENIERIA DE SISTEMAS

2.6.5 EJERCICIOSDEENTRENAMIENTO..................................................................................................38

3 UNIDAD2MANEJODINAMICODEMEMORIAYPUNTEROS.........................................................................40

3.1.1 RELACIÓNDECONCEPTOS............................................................................................................41

3.2 TEMA1PUNTEROS................................................................................................................................42

3.2.1 CLASENODOSIMPLE......................................................................................................................42

3.3 TEMA2LISTASSIMPLEMENTELIGADAS...............................................................................................47

3.3.1 CLASELISTASSIMPLEMENTELIGADA............................................................................................48

3.3.2 IMPLEMENTACIÓNDELOSMÉTODOSDELACLASELISTASIMPLEMENTELIGADA......................51

3.3.3 PROCESODEINSERCIÓNDEUNDATOENUNALISTASIMPLEMENTELIGADA.............................53

3.3.4 PROCESODEBORRADODEUNDATOENUNALISTASIMPLEMENTELIGADA...............................57

3.3.5 ORDENAMIENTODEDATOSENUNALISTASIMPLEMENTELIGADA.............................................61

3.3.6 Métodoanterior(x)........................................................................................................................62

3.3.7 CONSTRUCCIÓNDELISTASSIMPLEMENTELIGADAS.....................................................................63

3.3.8 DIFERENTESTIPOSDELISTASSIMPLEMENTELIGADASYSUSCARACTERÍSTICAS.........................64

3.4 TEMA3LISTADOBLEMENTELIGADAS..................................................................................................65

3.4.1 DEFINICIÓNDECARACTERÍSTICAS.................................................................................................66

3.4.2 PROPIEDADFUNDAMENTALDELASLISTASDOBLEMENTELIGADAS............................................70

3.4.3 EJERCICIOSDEENTRENAMIENTO..................................................................................................71

4 UNIDAD3MANEJODEHILERASDECARACTERES.........................................................................................72

4.1.1RELACIÓNDECONCEPTOS...................................................................................................................72

4.1 TEMA1DEFINICIÓN..............................................................................................................................73

4.2 TEMA2OPERACIONESCONHILERAS....................................................................................................73

4.2.1 ASIGNACIÓN..................................................................................................................................74

4.2.2 FUNCIÓNLONGITUD.....................................................................................................................74

5 ALGORITMOS II INGENIERIA DE SISTEMAS

4.2.3 FUNCIÓNSUBHILERA.....................................................................................................................74

4.2.4 FUNCIÓNCONCATENAR................................................................................................................75

4.2.5 MÉTODOINSERTAR.......................................................................................................................75

4.2.6 MÉTODOBORRAR.........................................................................................................................75

4.2.7 MÉTODOREEMPLAZAR.................................................................................................................76

4.2.8 FUNCIÓNPOSICIÓN.......................................................................................................................76

4.3 TEMA3EJERCICIOSDEAPLICACIÓN......................................................................................................76

4.3.1 APLICACIÓNDELACLASEHILERA..................................................................................................77

4.3.2 Ejerciciosentrenamiento...............................................................................................................83

5 UNIDAD4PILASYCOLAS..............................................................................................................................84

5.1.1 RELACIÓNDECONCEPTOS............................................................................................................85

5.2 TEMA1DEFINICIÓN..............................................................................................................................86

5.3 TEMA2PILASCONVECTORESYLISTAS................................................................................................86

5.3.1 DEFINICIÓN....................................................................................................................................87

5.3.2 REPRESENTACIÓNDEPILASENUNVECTOR.................................................................................89

5.3.3 REPRESENTACIÓNDEPILASCOMOLISTASLIGADAS.....................................................................91

5.3.4 MANEJODEDOSPILASENUNVECTOR.........................................................................................93

5.4 TEMA3COLASCONVECTORESYLISTAS...............................................................................................96

5.4.1 DEFINICIÓN....................................................................................................................................96

5.4.2 REPRESENTACIÓNDECOLASENUNVECTOR,ENFORMANOCIRCULAR.....................................97

5.4.3 REPRESENTACIÓNDECOLASCIRCULARESENUNVECTOR.........................................................101

5.4.4 REPRESENTACIÓNDECOLASCOMOLISTASLIGADAS.................................................................103

6 PISTASDEAPRENDIZAJE..............................................................................................................................106

7 GLOSARIO....................................................................................................................................................107

6 ALGORITMOS II INGENIERIA DE SISTEMAS

8 BIBLIOGRAFÍA..............................................................................................................................................108

7 ALGORITMOS II INGENIERIA DE SISTEMAS

1 MAPA DE LA ASIGNATURA

8 ALGORITMOS II INGENIERIA DE SISTEMAS

2 UNIDAD 1 ARREGLOS DE REGISTROS Y ARCHIVOS

Pascal-029-Arrayderegistros(Listaestática):Enlace

9 ALGORITMOS II INGENIERIA DE SISTEMAS

2.1 RELACIÓN DE CONCEPTOS

Arreglosderegistros:Estructurasdealmacenamientodeinformaciónaniveldememoriainterna,yquepermiterealizardiferentesoperacionesaniveldebúsqueda,inserción,borradoentreotras.

Registro: Es una estructura de datos compuesta. Se puede decir que un registro es un conjunto de camposvariablesrelacionadosque,engeneral,puedeperteneceratiposdedatosdiferentes,llamadoscomponentesdeltiporegistro,dondetodaslascomponentespuedenmanipularsebajounsolonombredevariable.

Vectoresderegistro:Otraimportanciaquetienenlosarreglosderegistrosesquecadaunodesuselementosestáformadoporvarioscampospertenecientesadiferentestiposdedatos,adiferenciadelosotrostiposdearreglosenlosquesuselementossondeunsolotipo;aunquecabeanotarque,porejemplo,unvectorpuedeserdetiporegistró.

Archivos: Se definen como estructuras de almacenamiento a nivel externo, permitiendo realizar diferentesoperacionessobreellos.

10 ALGORITMOS II INGENIERIA DE SISTEMAS

Archivospermanentes:Sonarchivosrígidos,yaquelainformaciónquealmacenancambiamuypoco.

Archivosmaestros: La información almacenada en esta clase de archivosmaneja el estadoo situación de losregistrosdeunadeterminadabasededatos,ysuactualizaciónoloscambiosdelosdatosdelosregistrossehacenperiódicamente.

Archivoshistóricos:Sonarchivosmaestrosqueyanoseutilizanycuyafunciónessolodeconsultaparaquienesdeseanobtenerinformaciónsobreelpasado.

Archivosdemovimiento:Sontemporalesysufunciónprincipalescaptarinformaciónparaactualizarlosarchivosmaestros.

Archivosdeprograma:Sonlosprogramasfuentequeseescribenenundeterminadolenguajedeprogramación,dondecadainstrucciónesunregistro.

Archivos de texto o ASCII (American Standard Code for Information Interchange): Estos almacenan cualquiercarácter del código ASCII: palabras, frases, párrafos, y se suelen crear y mantener mediante programas queprocesanoeditantexto.

Archivosbinarios:Estosarchivosalmacenaninformaciónenunlenguajedescifrablesoloporelcomputador.Lainformaciónquepuedanalmacenaresdiversa:colores,sonidos,imágenes,órdenesodatosdiscretos,llamadosarchivosdedatos.

Creacióndelarchivo:Permitedefinirunavariabledentrodelprogramaquerepresenteelarchivoquesequieremanipular.

Aperturadeunarchivo:Permiterelacionarunavariabletipoarchivoconelnombrequeelarchivotendráenelmediodealmacenamiento, llamadonombreexterno.Esteeselnombreconelcualseguardaelarchivoenelmediodealmacenamiento,ysuextensióndependedelaclasedeinformaciónquesevaaguardar.

Escrituraenelarchivo:Permitealmacenarlainformaciónienelarchivoqueseestámanipulando.

Lectura de un archivo: Permite extraer la información del archivo y almacenarla en memoria principal. Lainformaciónquesetransportaa lamemoriapuedesercualquiertipodevariableuobjetosalmacenadosenelarchivo.

Cierre del archivo: Permite proteger el área donde reside el archivo y actualiza el directorio del medio dealmacenamiento,reflejandoelnuevoestadodelarchivo.Adicionalmente,destruyelasconexionesfísicasylógicasqueseconstruyeroncuandoseabrióelarchivo.

11 ALGORITMOS II INGENIERIA DE SISTEMAS

2.2 TEMA 1 DEFINICIÓN Se define los arreglos de registros como estructuras de almacenamiento de información a nivel dememoriainterna,yquepermiterealizardiferentesoperacionesaniveldebúsqueda, inserción,borradoentreotras.Losarchivos se definen como estructuras de almacenamiento a nivel externo, permitiendo realizar diferentesoperacionessobreellos

Unregistroesunaestructuradedatoscompuesta.Sepuededecirqueunregistroesunconjuntodecamposvariablesrelacionadosque,engeneral,puedeperteneceratiposdedatosdiferentes,llamadoscomponentesdeltiporegistro,dondetodaslascomponentespuedenmanipularsebajounsolonombredevariable.Porejemplo,sise tiene un registro de datos compuestos por los campos: cédula, nombre, deducción y salario, podemosrepresentarlodelasiguienteforma:

32506321 SANDRA FONEGRA 40000 630000

Comopuedenotarse,dentrodelregistrosolohaydatos(información);eselprogramaquiencolocanombresacadadatoparapoderlosalmacenarenlamemoriadelacomputadora.Silainformacióndelempleadosefueraatratarenformaindividualylosnombresdevariablesseleccionadosparacadacampofuera:cc,nom,deducysal;alejecutarlainstrucción:LEA:cc,nom,deduc,salOcurriráenmemorialosiguiente:

cc deduc 32506321 40000 sal nom 630000 SANDRA

FONEGRA

MEMORIA Lainformacióndelaempleadaestádispersaenlamemoria.Laideadeusarregistroesagrupartodalainformaciónenunamismaáreadememoriabajounsolonombre.Sisetomaladeterminacióndequeemp1esunavariabledetiporegistro,osea,almacenareneláreaasignadatodalainformacióndeunempleado,gráficamentesepuedemirardelasiguientemanera:

12 ALGORITMOS II INGENIERIA DE SISTEMAS

MEMORIA

emp1

<Cédula>

<Nombre>

<Deducción>

<Salario>

Paraqueemp1seatomadacomounvariabletiporegistró,sedebedefinircomotal;esdecir,sedefinealavariablecomo registro y se definen los demás campos quehabrá en dicho registro. Para nuestro ejemplo, la variableregistróquedaríaasí:

1. CLASEEjemplo2. METODOPRINCIPAL()3. empleado(Registro):4. cc,nom(Alfanuméricos)5. deduc,sal(Reales)6. VARIABLES:emp1,emp2(Empleado)7. Ejemplo.Llenar(emp1)8. end(Método)9. end(Clase)

Enelanteriorejemplosehadefinidoundatodetiporegistrollamadoempleadoyademássedefineunavariablequeesdetipoempleado;estoquieredecirquecualquiervariablequeseadetipoempleadopuedealmacenarlosvaloresdelascomponentesdelregistro,esdecir,queenemp1sealmacenan:cc,nom,deducysal.Enlaestructuraanteriorsedefineaemp1yemp2comovariablestiporegistro,porlotanto,puedenalmacenartodoslosvaloresdeloscamposqueconformanaltipodedatoempleado,ysurepresentacióninternaseria:

emp1 emp2

<Cédula> <Cédula>

<Nombre> <Nombre>

<Deducción> <Deducción>

<Salario> <Salario>

MEMORIA Las variables tipo registro emp1 y emp2 son variables compuestas; para referenciar a cada una de suscomponenteshayqueclasificarlas,o sea,deciren formaexplícitaa cuálde las componentesdel registronosvamosareferir.Dichaclasificaciónsehaceasí:variable_tipo_regristro.componente.

13 ALGORITMOS II INGENIERIA DE SISTEMAS

Veamosunmétododecómollenaríamoslainformacióndeunempleado,despuésdehaberdefinidolavariabledetiporegistroempleadoyalavariabledetipoempleado:1. PUBLICOESTATICOVOIDLlenar(Reg)2. IMPRIMA(“Ingreselacédula”)3. LEA(Reg.cc)4. IMPRIMA(“Ingreseelnombre”)5. LEA(Reg.Nom)6. IMPRIMA(“Ingreseladeducción”)7. LEA(Reg.Deduc)8. IMPRIMA(“Ingreseelsalario”)9. LEA(Reg.Sal)10. end(método)

Elparámetroemp1esunparámetroporreferencia.Enla instrucción3se leelacédulaquesealmacenaráenelregistro. Igualmenteenlas instrucciones5,7, y9dondesealmacenaráelnombre,deducciónysalariodelempleado,respectivamente. Despuésdeejecutarelmétodoanterioryllenarloconlosdatosqueteníamosanteriormente,nuestramemoriaestaríadelasiguienteforma:

emp1 emp2

32506321 <Cédula>

SANDRAFONEGRA

<Nombre>

40000 <Deducción>

630000 <Salario>

MEMORIA Sihaynecesidaddemover la informacióndeunavariable tipo registroaotra, sepuedehacercomponenteacomponente,omoviendotodalainformaciónalmismotiempo.Porejemplo:

emp2.cc=emp1.ccemp2.nom=emp1.nomemp2.deduc=emp1.deducemp2.sal=emp1.salLocualseríalomismoquetener:emp2=emp1.

14 ALGORITMOS II INGENIERIA DE SISTEMAS

Un arreglo de registro es una estructura de datos de gran utilidad e importancia en la programación deaplicaciones,yaquemuchasvecesesdeseable,desdeelpuntodevistadelalógicadelprogramaenparticular,mantenerdisponibleenmemoriaprincipalunaseriederegistroconinformacióndelmismotipoparasuproceso;dichosregistrosnoestarándispersos;haránpartedeunarreglo,loquefacilitasumanejo.Unarregloderegistrosesmuyparecidoaunarchivodedatos,sediferencianenquelosarreglosderegistrosresidenenmemoriaprincipalylosarchivosenmemoriaauxiliar,porlotanto,estosúltimostienenexistenciapermanente.

2.3 TEMA 2 OPERACIONES CON ARREGLOS DE REGISTROS Los arreglos de registros permiten manejar información en memoria interna, lo cual permite realizar lasoperacionesde:búsquedaquepermiteverificarsiundatoseencuentraen laestructuradealmacenamiento,inserciónquepermiteingresarunnuevodatoenelarregloderegistro,borradoquepermiteborrarundatodelarregloderegistroentreotrasoperacionesquesepuedenrealizarconestasestructuras.

Otraimportanciaquetienenlosarreglosderegistrosesquecadaunodesuselementosestáformadoporvarioscampospertenecientes adiferentes tiposdedatos, a diferenciade losotros tiposde arreglos en losque suselementossondeunsolotipo;aunquecabeanotarque,porejemplo,unvectorpuedeserdetiporegistró.Veamosunejemploendondealmacenamoslosdatosdeunregistroenunvectoryluegoimprimimosdichovector:

1. CLASERegVector2. METODOPRINCIPAL()3. R(REGISTRO):4. cc,nom(Alfanuméricos)5. deduc,sal(Reales)6. VARIABLES:vec[],emp(R)7. i,n(Entero)8. IMPRIMA(Ingreseelnúmeroderegistros”)9. LEA(n)10. para(i=1,n,1)11. RegVector.Llenar(emp)12. vec[i]=emp13. endpara14. para(i=1,n,1)15. IMPRIMA(vec[i].cc)16. IMPRIMA(vec[i].nom)17. IMPRIMA(vec[i].deduc)18. IMPRIMA(vec[i].sal)19. endpara20. end(Método)21. end(Clase) En la instrucción3definimosaRde tipo registro con los campos: cc, nom,deduc y sal; y en la instrucción6definimosnuestrasvariables,endondeutilizamos2variablesdetipoR:vec[]yemp.

15 ALGORITMOS II INGENIERIA DE SISTEMAS

Enlainstrucción9leemosan,paraconocerlacantidadderegistrosquealmacenaremosy,enlainstrucción10,definimosnuestrociclodesde1hastanparallenarelvectorconlosregistros.Enlainstrucción11llamamosalmétodoLlenarparaleerlosdatosqueguardaremosenelvector.Enviamoscomoparámetroalavariableemp.Enlainstrucción12llevamosalvectorenposicióniloqueseguardóenemp.

EN LAS INSTRUCCIONES 15 A 18 IMPRIMIMOS EL CONTENIDO DE LOS VECTORES, ES DECIR, IMPRIMIMOS LOS REGISTROS QUE HEMOS ALMACENADO.

2.3.1 EJERCICIOS DE ENTRENAMIENTO Pautasparadesarrollarlossiguientesejercicios:Puedescrearunaestructuratipovectorderegistro,conloscamposcorrespondientesalenunciadoenelejercicio,opuedesuponerquelaestructurayaestácreadaypuedestrabajarsobreella,realizandolasoperacionesquetepidecadaunodelosejerciciosmencionados.

1. UnacompañíadistribuyeNproductosadistintoscomerciosdelaciudad.Paraelloalmacenaenunarreglotodalainformaciónrelacionadaasumercancía:

• Clave

• Descripción

• Existencia

• Mininoamantenerdeexistencia

• Preciounitario

Escribaunprogramaquepuedallevaracabolassiguientesoperaciones:

a) Venta de un producto: se deben actualizar los campos que correspondan, y verificar que la nuevaexistencianoestépordebajodelmínimo.(Datos:clave,cantidadvendida)

b) Reabastecimiento de un producto: se deben actualizar los campos que correspondan. (Datos: clave,cantidadcomprada.)

c) Actualizarelpreciodeunproducto.(Datos:clave,porcentajedeaumento.)

d) Informarsobreunproducto:sedebenproporcionartodoslosdatosrelacionadosaunproducto.(Dato:clave.)

2. Unainmobiliariatieneinformaciónsobredepartamentosenrenta.Decadadepartamentoseconoce:

• Clave:esunenteroqueidentificaalinmueble.

16 ALGORITMOS II INGENIERIA DE SISTEMAS

• Extensión:superficiedeldepartamento,enmetroscuadrados.

• Ubicación:(excelente,buena,regular,mala)

• Precio:esunreal.

• Disponible:VERDADEROsiestádisponibleparalarentayFALSOsiyaestárentado.

Diariamenteacudenmuchosclientesalainmobiliariasolicitandoinformación.

Escribaunprogramacapazderealizarlassiguientesoperacionessobrelainformacióndisponible:

a) ListelosdatosdelosdepartamentosdisponiblesquetenganunprecioinferioroigualaunciertocalorP.

b) ListelosdatosdelosdepartamentosquetenganunasuperficiemayoroigualaunciertovalorEyunaubicaciónexcelente.

c) Listeelmontodelarentadetodoslosdepartamentosalquilados.

d) Llega un cliente solicitando rentar un departamento. Si existe un departamento conuna superficiemayoroigualaladeseada,conunprecioyunaubicaciónqueseajustanalasnecesidadesdelcliente,eldepartamentoserenta.Actualizarlosdatosquecorrespondan.

e) Sevenceuncontrato,sinoserenueva,actualizarlosdatosquecorrespondan.

SehadecidióaumentarlasrentasenX%.Actualizarlospreciosdelasrentasdelosdepartamentosnoalquilados.

2.4 TEMA 3 TIPOS DE ARCHIVOS Existendiferentestiposdearchivoscomoson:archivosdeentrada,archivosdesalida,archivosdesituaciones,archivoshistóricos,archivossecuenciales,archivosdemovimientos,archivosdeíndice,archivosmaestrosentreotros.

2.4.1 ARCHIVOS Enlamayoríadeaplicacionesporcomputadorserequierequelainformaciónquesealmacenepermanezcaparapoderusarlaenprocesoposteriores.Paraellonecesitamosotrosmediosdealmacenamientocomolosarchivosqueseguardanen lamemoriaauxiliar (USB,discos,DVD,memoria flash,etc.)a travésdedispositivosquenonecesitan estar conectados constantemente al computador; de estemodo solo se recurre a ellos cuando senecesitausarlainformaciónquetienenalmacenada.Elhechodequeestosaparatosresidanfueradelamemoriaprincipalyguardenlainformacióndeformapermanentepermitequelosdatossirvanparadiferentesejecucionesdelmismoprogramayseanusadosporprogramasdiferentes.Desdeluego,tambiénsepuedeguardarmuchamásinformaciónqueenlamemoriaprincipal.

17 ALGORITMOS II INGENIERIA DE SISTEMAS

Unarchivoes, entonces,unaestructura lógicadonde sealmacenaen formapermanente informacióncon lassiguientes ventajas: almacenamiento de grandes volúmenes, persistencia de esta en medios diferentes a lamemoriaprincipaldelcomputadoryposibilidaddequediferentesprogramaspuedanaccederaella.

2.4.2 CLASIFICACIÓN DE LOS ARCHIVOS SEGÚN SU USO

CLASIFICACIÓNSEGÚNSUUSO

CARACTERÍSTICAS

ARCHIVOSPERMANENTES

Sonarchivosrígidos,yaquelainformaciónquealmacenancambiamuypoco.Seusanparaextraerinformaciónqueseutilizaenotrosarchivosoprocesos:porejemplo,elarchivoquecontienetodalainformaciónsobrelossalariosdelosempleadosdeunaempresaenañosposteriores.

ARCHIVOSMAESTROS

Lainformaciónalmacenadaenestaclasedearchivosmanejaelestadoosituaciónde

losregistrosdeunadeterminadabasededatos,ysuactualizaciónoloscambiosde

los datos de los registros se hacen periódicamente. Por ejemplo, un archivo quealmaceneelinventariodelosbienesdeunaempresa.

ARCHIVOSHISTÓRICOS

Sonarchivosmaestrosqueyanoseutilizanycuyafunciónessolodeconsultaparaquienesdeseanobtener informaciónsobreelpasado.Porejemplo, la informacióncontenida en las hojas de vida académica de los estudiantes que terminaron sucarreraenladécadapasada.

ARCHIVOSDEMOVIMIENTO

Son temporales y su función principal es captar información para actualizar losarchivosmaestros.Susregistrosmuestran lastransaccionesomovimientosqueseproducenduranteundeterminadoperiodo.Cuandoelarchivomaestroseactualiza,usando los archivosdemovimiento, estosúltimospierden su validez y sepuedendestruir. Por ejemplo: los cambios de aumento de salarios, deducciones ysobresueldosproducidosduranteundeterminadoperiodo.

2.4.3 CLASIFICACIÓN DE LOS ARCHIVOS SEGÚN LOS DATOS QUE ALMACENAN

CLASIFICACIÓNDELOSARCHIVOSSEGÚNLOS

DATOSQUEALMACENANCARACTERÍSTICAS

18 ALGORITMOS II INGENIERIA DE SISTEMAS

ARCHIVOSDEPROGRAMA

Sonlosprogramasfuentequeseescribenenundeterminadolenguajedeprogramación,dondecada instrucciónesun registro.Estosarchivos sepueden cargar del medio magnético a memoria, compilar, ejecutar,imprimir y volver a guardar donde estaban o en otro medio dealmacenamientodistinto.

ARCHIVOSDETEXTOOASCII(AMERICANSTANDARDCODE

FORINFORMATIONINTERCHANGE)

EstosalmacenancualquiercarácterdelcódigoASCII:palabras,frases,

párrafos,ysesuelencrearymantenermedianteprogramasqueprocesanoeditantexto.

ARCHIVOSBINARIOSEstosarchivosalmacenaninformaciónenunlenguajedescifrablesoloporelcomputador.Lainformaciónquepuedanalmacenaresdiversa:colores,sonidos,imágenes,órdenesodatosdiscretos,llamadosarchivosdedatos.

Antes dehablar sobre los archivos de texto, definiremos algunas operaciones básicas que se deben tener encuentacuandosetrabajaconarchivos.

2.5 TEMA 4 OPERACIONES CON ARCHIVOS Losarchivossonestructurasdealmacenamientodedatosanivelexterno,locualpermitemanejarinformaciónparaprocesosposteriores,dondesepuedemanejarlasdiferentesoperacionessobresuconjuntodedatos,estasoperacionesson:insertar,ordenar,buscar,actualizar,borrar,sobreunoomásdatos.

2.5.1 OPERACIONES BÁSICAS CON ARCHIVOS Acontinuación,sedefinenlasaccionesbásicasconarchivos:

• Creacióndelarchivo:Permitedefinirunavariabledentrodelprogramaquerepresenteelarchivoquesequieremanipular.Estavariableesconocidacomonombreinternodelarchivoysedefineconlasiguienteinstrucción:

ARCHIVOa

• Aperturadeunarchivo:Permiterelacionarunavariabletipoarchivoconelnombrequeelarchivotendráenelmediodealmacenamiento,llamadonombreexterno.Esteeselnombreconelcualseguardaelarchivoen

19 ALGORITMOS II INGENIERIA DE SISTEMAS

elmediodealmacenamiento,ysuextensióndependedelaclasedeinformaciónquesevaaguardar.Tambiénesposibledarleunarutaqueindiquedondequedaraguardadoelarchivo;sinoseespecificalaruta,elarchivoseguardadóndeestáelprogramaquelocrea.Lasintaxisdeaperturaes:

ABRIRa(“nombreExterno.extensión”)

Conestainstrucciónsegeneraunaconexiónentreelnombreinternoayelnombreexternodelarchivo,donde

aeslavariabletipoarchivoconlaquesemanejaraelnombreexternodelarchivoenelprograma,nombre-

externoeselnombrequeseledaráalarchivoenelmediodealmacenamientoylaextensióndependedela

informaciónquesequierealmacenar.

Esta instruccióncrea lavariableacomovariable tipoarchivoyhace lasconexiones físicasy lógicasconel

nombreexterno.Alabrirelarchivolavariabletipoarchivoatomaelvalorverdaderosielarchivosepudoabrir

ofalsosielarchivonosepudoabrironoexiste.Estonospermitepreguntarsielarchivoseabrióono.Alabrir

unarchivohayqueespecificarelmododeapertura:desalida,deentrada,entradaysalida,adicionarmás

información,etcétera.

• Escritura en el archivo: Permite almacenar la información i en el archivo que se está manipulando. Lainstrucciónes:

ESCRIBAa(i)

Estainstrucciónpasalainformacióniqueresideenmemoriaalarchivocuyonombreexternoestárelacionado

cona.

• Lecturadeunarchivo:Permiteextraer la informacióndel archivo y almacenarlaenmemoriaprincipal. Lainformaciónquesetransportaalamemoriapuedesercualquiertipodevariableuobjetosalmacenadosenelarchivo.Lasintaxises:

LEAa(var)

La variable var puede representar cualquier tipo de dato: las más comunes son variables de texto,

estructurasyobjetos.

• Cierredelarchivo:Permiteprotegereláreadonderesideelarchivoyactualizaeldirectoriodelmediodealmacenamiento,reflejandoelnuevoestadodelarchivo.Adicionalmente,destruye lasconexionesfísicasylógicasqueseconstruyeroncuandoseabrióelarchivo.Lasintaxises:

CERRARa

Cuandoseejecutalainstrucciónseadicionaunregistrodespuésdelúltimograbado,dondecolocaunamarcade

findearchivo(EOF–ENDOFFILE).

20 ALGORITMOS II INGENIERIA DE SISTEMAS

2.5.2 ARCHIVO DE TEXTO Tambiénselesconocecomoarchivosllanosoplanosporelhechodealmacenarsolotexto,esdecirquealmacenancaracteres,palabras,frasesopárrafosynotienenformato:contienensolotexto.LoscaracteresquesealmacenanpuedensercualquieradelconjuntodecaracteresdeASCII.Cadalíneadetextoesunregistro,ylavariabletipoarchivoasignadaen ladefinicióndelarchivoseusaparafluir informacióndesdeunmediodeentradahacia lamemoriaauxiliardondeesteresideyparaextraerinformacióndesdeelarchivohaciaunmedioexternodesalida.Unejemplodeunregistro(líneadetexto)seria:

Esteesunarchivodetextoquealmacenaunflujodecaracteres.

2.5.3 EJERCICIO DE APRENDIZAJE Elaborarunaclasequegenereunarchivotetextoconloscamposcedulaynombres,imprimael

contenidodelarchivoyadicionemásregistrosalfinaldelarchivo.

1. Identificacióndedatos,accionesylimitaciones

• Datosdeentrada:Cédula,nombre.

• Datosdesalida:Lainformaciónalmacenadaenelarchivo.

• Acciones:crearArchivo,imprimirArchivoyadicionarRegistroAlFinal.

2. Definicióndeclases

• Claseseleccionada:Archivo.

• Definicióndelconstructordelaclase:Archivo():norecibeargumentos.

• Diagramacióndelaclase:

ARCHIVO

+Archivo

+CrearArchivo

+ImprimirArchivo

21 ALGORITMOS II INGENIERIA DE SISTEMAS

+AdicionarRegistroAlFinal

• Explicacióndelosmétodos:crearArchivo:secreaunarchivodetextoquesolicitealusuario

lainformaciónquesedeseaalmacenar.Elarchivoseguardaenlacarpetadondeestáelprograma,

perosepuedeestablecerunarutaparaquesealmaceneencualquierotrolugardelcomputador.Se

lepreguntaalusuariosielarchivoestacreadoono.Encasoqueelarchivoestecreado,loredirigeala

opciónADICIONARREGISTROALFINAL.Elarchivotienecomonombreinterno“archivo”ycomo

nombreexterno“nombres.txt”.lainformaciónqueseguardaporlíneaes:

CÉDULA:1158377694NOMBRE:MAXIMILIANODELTORO

Elusuariodecidecuantainformacióndeseaalmacenar.Cuandoesteterminedeentrarlainformación,

secierraelarchivo.

imprimirArchivo:haciendousodeuncicloMIENTRAS,serecorreeimprimeelarchivolíneaporlínea,

hastacuandoselleguealamarcadefindearchivo(OEF).

adicionarRegistroAlFinal:seabreelarchivoenmodoescritura,selesolicitanlosdatosporingresaral

usuario,seescribenalfinaldelarchivoyposteriormentesecierra.

3.definicióndelmétodoprincipal:seleelaopciónseleccionadaporelusuarioyseinvocaelmétodo

correspondiente.

Definicióndevariables:

archivo:objetodelaclaseArchivoparainvocarlosmétodos.

opción:opcióndelmenúseleccionadaporelusuario.

2.5.4 EJERCICIO DE APRENDIZAJE 1. CLASEArchivo2. METODOPRINCIPAL()3. PUBLICOVOIDCrearArchivo()4. ENTEROcedula5. CARÁCTERnombre6. CARÁCTERsw7. ESCRIBA:“¡SIELARCHIVOESTACREADOSERADESTRUIDO!8. ¿ESTACREADO?(S/N):”9. LEA:sw

22 ALGORITMOS II INGENIERIA DE SISTEMAS

10. si(sw==”N”)ENTONCES11. CREARarchivo(“nombres.txt”)12. ESCRIBA:“DIGITELACEDULA:”13. LEA:cedula14. mientras(¡cedula!=0)HAGA15. ESCRIBA:“DIGITEELNOMBRE:”16. LEA:nombre17. ESCRIBAarchivo(“CEDULA:”,cedula,“\t”,“NOMBRE:”,18. nombre)19. ESCRIBA:“DIGITENUEVACEDULAOCEROPARATERMINAR:”20. LEA:cedula21. end_mientras22. CERRARarchivo23. end_si24. end_crearArchivo25. PUBLICOVOIDimprimirArchivo()26. CADENAlínea27. ABRIRarchivo(“nombres.txt”)28. si(archivo)ENTONCES29. mientras(archivo<>EOF)HAGA30. LEAarchivo(línea)31. ESCRIBA:línea32. end_mientras33. CERRARarchivo34. si_no35. ESCRIBA:“ELARCHIVONOMBRES.TXTNOEXISTEONOSEPUDO36. ABRIR”37. end_si38. end_imprimirArchivo39. PUBLICOVOIDadicionarRegistroAlFinal()40. ENTEROcedula41. CARÁCTERnombre42. ABRIRarchivo(“nombres.txt”)43. si(archivo)44. ESCRIBA:”DIGITELACEDULA:”45. LEA:cedula46. ESCRIBA:“DIGITEELNOMBRE:”47. LEA:nombre48. ESCRIBAarchivo(cedula+”\t”+nombre)49. CERRARarchivo50. si_no51. ESCRIBA:“ELARCHIVONOMBRES.TXTNOEXISTEONOSEPUDOABRIR”

23 ALGORITMOS II INGENIERIA DE SISTEMAS

52. end_si53. end_adicionarRegistroAlFinal54. METODOPRINCIPAL()55. ENTEROopción56. Archivoarchivo57. HACER58. ESCRIBA:”1:CREARELARCHIVO”59. ESCRIBA:”2:IMPRIMIRCONTENIDODELARCHIVO”60. ESCRIBA:”3:ADICIONARREGISTROALFINAL”61. ESCRIBA:”4:SALIRDELMENU”62. ESCRIBA:”DIGITEOPCION:”63. LEA:opción64. CASOSDE(opción)65. CASO1:archivo.crearArchivo()66. CASO2:archivo.ImprimirArchivo()67. CASO3:archivo.AdicionarRegistroAlFinal()68. end_CASOS69. MIENTRAS(¡opción!=4)70. end_PRINCIPAL71. end(Método)72. end(Clase)

2.5.5 EJERCICIOS DE ENTRENAMIENTO Pautas para desarrollar los siguientes ejercicios: Para desarrollar estos ejercicios, debes de tener en cuenta,declararunaclaseydentrodeestaclasedeclararlasvariablesoatributosquevaatenerelarchivoquesedeseacrear.

1. Elaborarunaclasequeformeunarchivodedatosquecontengaencadaregistro:cédula,nombre,horastrabajadas,valordehora trabajadayporcentajedededucción.Laclasedebeproducirun informe(archivodetexto)conlacedula,elnombreyelsalariodevengado(ordenadoascendentementeporelcampocédula).

2. Elaborar una clase que cree un archivo de datos con la siguiente información por registro: cedula,apellidosynombreycuatronotasconsusrespectivosporcentajes.Luegodecreadoelarchivosepidemostrarunlistadoordenadoporapellido,insertarunnuevoestudiante,lacalificacióndefinidadecadaestudianteyvisualizarelcontenidodelarchivo.

2.6 TEMA 5 EFICIENCIA DE ALGORITMOS Cuandosetrabajaconprocesosenlíneaylosalgoritmossonutilizadosconungradoaltodefrecuencia,sedebenmanejaralgoritmosmuyeficientes,paraellohayquemedirlaeficienciadelalgoritmoconsuordendemagnitud,paratenercertezadequelosalgoritmossisoneficientes.

24 ALGORITMOS II INGENIERIA DE SISTEMAS

2.6.1 EVALUACIÓN DE ALGORITMOS Laevaluacióndealgoritmoconsisteenmedirlaeficienciadeunalgoritmoencuantoaconsumodememoriaytiempodeejecución.Anteriormente,cuandoexistíangrandesrestriccionestecnológicasdememoria,evaluarunalgoritmoencuantoaconsumo de recursos de memoria era bastante importante, ya que dependiendo de ella los esfuerzos deprogramaciónydeejecuciónseríagrande.Enlaactualidad,conelgrandesarrollotecnológicodelhardware,lasinstruccionesdeconsumodememoriahanpasadoaunsegundoplano,porlotanto,elaspectodeevaluarunalgoritmoencuantoasuconsumodememorianoesrelevante.Encuantoaltiempodeejecución,apesardelasaltasvelocidadesdeprocesamientoqueenlaactualidadexisten,siguesiendounfactorfundamental,especialmenteenalgoritmosquetienenqueverconelcontroldeprocesosentiemporealyenaquelloscuyafrecuenciadeejecuciónesalta.Procedamosentoncesavercomodeterminareltiempodeejecucióndeunalgoritmo.Básicamenteexistendosformasdehacerestamedición:unaquellamamosaposterioriyotraquellamamosapriori.Consideremoslaprimeraforma,aposteriori:elprocesodeelaboraciónyejecucióndeunalgoritmoconstadelossiguientespasos:

Elaboracióndelalgoritmo. Codificaciónenalgúnlenguajedeprogramación. Compilacióndelprograma. Ejecucióndelprogramaenunamaquinadeterminada.

Cuandoseejecutaelprograma,lossistemasoperativosproporcionanlaherramientadeinformarcuántotiempoconsumiólaejecucióndelalgoritmo.Estaformademedicióntienealgunosinconvenientes:alcodificarelalgoritmoenalgúnlenguajedeprogramaciónestamosrealmentemidiendo laeficienciadel lenguajedeprogramación,yaquenoes lomismounprogramacodificado en FORTRAN, que en PASCAL o que en C; al ejecutar un programa en unamáquina determinadaestamosintroduciendootroparámetro,elcualeslaeficienciadelamáquina,yaquenoeslomismoejecutarelprogramaenunXT,enun386,enun486,enunPentium,esunAS400,esunRISC,etc.Enotraspalabras,conestaformademediciónestamosesevaluandolacalidaddelcompiladorydelamáquina,másnoladelalgoritmo,queesnuestrointerés.Loquenos interesaesmedir laeficienciadelalgoritmoporelhechodeseresealgoritmo, independientedellenguajeenelquesehayacodificadoydelamáquinaenlacualseejecute.Veamos entonces la forma demedir la ejecución de un algoritmo a priori. Para ello necesitamos definir dosconceptosbásicosqueson:ContadordefrecuenciasyOrdendemagnitud.

25 ALGORITMOS II INGENIERIA DE SISTEMAS

2.6.2 CONTADOR DE FRECUENCIAS Elcontadorde frecuenciasesunaexpresiónalgebraicaque identificaelnúmerodevecesqueseejecutan lasinstruccionesdeunmétodo.Parailustrarcomodeterminarestaexpresiónconsideramoslossiguientesejemplos:

MÉTODOPRINCIPAL1()

1. LEA(a,b,c) 12. x=a+b13. y=a+c14. z=b*c15. w=x/y–z 1 6. IMPRIMA(a,b,c,w) 1

Contadordefrecuencias 6

MÉTODOPRINCIPAL1()

1. LEA(n)1 2. s=0 1

3. i=1 1

4. MQ(i<=n)n+15. s=s+1 n6. i=i+1 n7. endMQ n8. IMPRIMA(n,s) 1

Contadordefrecuencias 4n+5

Entodoslosmétodoslasinstruccionesestánnumeradassecuencialmente.Alfrentedecadainstrucciónapareceunnúmeroounaletraqueindicaelnúmerodevecesqueseejecutaesainstrucciónenelmétodo.Enelmétodo1cadainstrucciónseejecutasolounavez.Eltotaldevecesqueseejecutantodaslasinstruccioneses6.Estevaloreselcontadordefrecuenciasparaelmétodo1.Enelmétodo2lasinstrucciones1,2,3y8seejecutansolounavez,mientrasquelasinstrucciones5,6y7seejecutannvecescadauna,yaqueperteneceaunciclo,cuyavariablecontroladoradelcicloseiniciaenuno,tiene

26 ALGORITMOS II INGENIERIA DE SISTEMAS

unvalorfinaldenyseincrementadeauno,lainstrucción4seejecutaunavezmásyaquecuandoiseamayorquendetodasformashacelapreguntaparaluegosalirdelciclo.Portanto,elnúmerodevecesqueseejecutanlasinstruccionesdelmétodoes4n+5.Estaexpresióneselcontadordefrecuenciasparaelmétodo2.Veamosotrosejemplosdemétodosconsucontadordefrecuenciasrespectivo

METODOPRINCIPAL3()

1. LEA(m,n)12. s=013. i=1 14. MQ(i<=n) n+15. t=0 n6. j=1 n7. MQ(j<=m) n*m+n8. t=t+1n*m9. j=j+1n*m10. endMQn*m11. s=s+tn12. i=i+1 n13. endMQ n14. IMPRIMA(n,m,s) 1

Contadordefrecuencias 4(n*m)+7n+5

MÉTODOPRINCIPAL4()

1. LEA(n,m)12. s=013. i=114. MQ(i<=n)n+15. t=0n6. j=1 n7. MQ(j<=n)n2+n8. t=t+1n29. j=j+1n210. endMQn211. s=s+tn12. i=i+1n

27 ALGORITMOS II INGENIERIA DE SISTEMAS

13. endMQ n14. IMPRIMA(n,m,s) 1

Contadordefrecuencias 4n2+7n+5

MÉTODOPRINCIPAL5()

1. LEA(n,m)12. s=013. i=114. MQ(i<=n)n+15. s=s+1n6. i=i+1n7. endMQn8. IMPRIMA(n,s)19. t=0110. i=1111. MQ(i<=m)m+112. t=t+1m13. i=i+1m14. endMQm15. IMPRIMA(m,t)1

Contadordefrecuencias 4m+4n+9

Deunamaneraanálogaseobtuvieronloscontadoresdefrecuenciasparalosmétodos3,4y5.

2.6.3 EJERCICIOS DE ENTRENAMIENTO Pautasparadesarrollarlossiguientesejercicios:Laspautasquedebesutilizarparahallarelcontadorde frecuencia, esmirar el númerode vecesque se ejecuta cada instrucciónenel algoritmo, recuerdaqueelcontadordefrecuenciaesunaexpresiónalgebraica,quesaledelnúmerodevecesqueseejecutacadainstrucción.

Calculeelcontadordefrecuenciasdelossiguientesmétodos:

1. PUBLICOESTATICOVOIDPrograma1(n)

28 ALGORITMOS II INGENIERIA DE SISTEMAS

2. s=0

3. PARA(i=1,n,1)

4. PARA(j=1,i,1)

5. PARA(k=1,j,1)

6. s=s+1

7. endPARA

8. endPARA

9. endPARA

10. end(Método)

1. CLASEPrograma2

2. METODOPRINCIPAL()

3. LEA(n)

4. s=0

5. i=2

6. MQ(i<=n)

7. s=s+1

8. i=i*i

9. endMQ

10. IMPRIMA(n,s)

11. end(Método)

12. end(Clase)

1. CLASEPrograma3

2. MÉTODOPRINCIPAL()

3. LEA(n)

4. s=0

5. PARA(i=1,n,1

6. t=0

7. PARA(j=1,i,1)

8. t=t+1

29 ALGORITMOS II INGENIERIA DE SISTEMAS

9. endPARA

10. s=s+t

11. endPARA

12. IMPRIMA(n,s)

13. end(Método)

14. end(Clase)

2.6.4 ORDEN DE MAGNITUD

EL ORDEN DE MAGNITUD ES EL CONCEPTO QUE DEFINE LA EFICIENCIA DEL MÉTODO EN CUANTO A TIEMPO DE EJECUCIÓN. SE OBTIENE A PARTIR DEL CONTADOR DE FRECUENCIAS.

Paraobtenerelordendemagnitudseguimoslossiguientespasos:Seeliminanloscoeficientes,lasconstantesy

lostérminosnegativosdelostérminosresultantes;sisondependientesentresí,seeligeelmayordeellosyeste

seráelordendemagnituddedichométodo,delocontrarioelordendemagnitudserálasumadelostérminos

que quedaron. Si el contador de frecuencias es una constante, como en el caso delmétodo 1, el orden de

magnitudes1ylorepresentamoscomoO(1).Teniendopresenteesto,losórdenesdemagnituddelosmétodosquevimosanteriormenteson:

Método1:O(1)Método2:O(n)Método3:O(n*m)Método4:O(n2)Método5:O(n+m)

30 ALGORITMOS II INGENIERIA DE SISTEMAS

Enelambientedesistemas,losórdenesdemagnitudmásfrecuentesparalosmétodosquesedesarrollanson:

ORDENDEMAGNITUD REPRESENTACION

Constante O(1)

Lineal O(n)

Cuadrático O(n2)

Cubico O(n3)

Logarítmico O(log2(n))

Semilogarítmico O(nlog2(n))

Exponencial O(2n)

Siquisiéramosclasificarestasórdenesdemagnituddesdelamáseficientehastalamenoseficiente,tendríamoselsiguienteorden:

1. Constante O(1)

2. Logarítmico O(log2(n))

3. Lineal O(n)

4. Semilogarítmico O(nlog2(n))

5. Cuadrático O(n2)

6. Cúbico O(n3)

7. Exponencial O(2n)

Hastaaquíhemosvistométodoscuyoordendemagnitudesconstante,linealycuadrático.Deigualmaneraquesehizoelmétodoconordendemagnitudcuadráticosepuedehacerunocúbico;enelcuadráticosenecesitaron2 ciclos anidados, controlados por lamisma variable, para el cúbico se necesitarían 3 ciclos con lasmismascondiciones.Pasemosatratarmétodosconordendemagnitudlogarítmicos.Empecemosdefiniendoloqueesunlogaritmo.Ladefiniciónclásicadellogaritmodeunnúmeroxes:eselexponentealcualhayqueelevarunnúmerollamadobaseparaobtenerx.Confinesdidácticos,presentamosotradefinicióndelogaritmo:logaritmodeunnumeroxeselnúmerodevecesquehayquedividirunnúmero,porotrollamadobase,paraobtenercomococienteuno(1).

31 ALGORITMOS II INGENIERIA DE SISTEMAS

Porejemplo,sitenemoselnúmero100yqueremoshallarsulogaritmoenbase10,habráquedividirlopor10sucesivamentehastaobtenercomococienteuno(1).

100 10

0 10 10

0 1

Huboquedividirel100dosvecespor10paraobtener1enelcociente,portanto,ellogaritmoenbase10de100es2(log10(100)=2).Siqueremoshallarellogaritmoenbase2de16habráquedividir16sucesivamentepor2hastaobteneruncocientede1.Veamos:

16 2 0 8 2 0 4 2 0 2 2 0 1

Esdecir,huboquedividirel16,cuatro(4)vecespordos(2)paraobteneruncocientede1,portanto,ellogaritmoenbase2de16es4(log2(16)=4).Planteemosunejemploprácticodealgoritmoenelcualsepresentaestasituación.Consideremoselcasodeunvectorenelcualtenemoslosdatosordenadosascendentemente:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 V 2 4 7 9 11 15 17 28 31 36 43 50 58 62 69

Sinosinteresabuscareldatox=85ydecirencualposicióndelvectorseencuentrahaydosformasdehacerlo:Una,eshacerunabúsquedasecuencialapartirdelprimerelementoeircomparandoelcontenidodeesaposición

32 ALGORITMOS II INGENIERIA DE SISTEMAS

coneldatox(85),elprocesoterminarácuandoloencontremosocuandohayamosrecorridotodoelvectorynoloencontremos.Unpequeñométodoquehagaeseprocesoeselsiguiente:Seanelnúmerodeelementosdelvectoryxeldatoabuscar.

1. i=1

2. MQ((i<=n)&(V[i]!=x))

3. i=i+1

4. endMQ

5. SI(i<=n)

6. Pos=i

7. SINO

8. IMPRIMA(“eldatonoexiste”)

9. EndSI

Endichométodotenemosplanteadounciclo,elcual,enelpeordeloscasos,seejecutanveces,esdecir,cuandoeldatoxnoestéenelvector.Portanto,elordendemagnituddeesemétodoesO(n).Engeneral,cuandoseefectúaunabúsqueda,elpeorcasoesnoencontrarloqueseestábuscando.Ennuestroejemplohuboquehacer15comparacionesparapoderdecirqueel85noestáenelvector.Si el vector hubiera tenido quinientosmil de datos y hubiéramos tenido que buscar un dato que no estaba,hubiéramostenidoquehaberhechoquinientasmilcomparacionesparapoderdecirqueeldatobuscadonoseencontró.Ahora,siaprovechamoslacaracterísticadequelosdatosenelvectorestánordenadospodemosplantearotrométododebúsqueda:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

V 2 4 7 911 15 17 28 31 36 43 50 58 62 69 M

Comparamoseldatoxconeldatodelelementodelamitaddelvector,(llamémosloM).Puedensucedertrescasos:V(M)==x;V(M)>x;V(M)<xSiV(M)==xsehaterminadolabúsqueda.SiV(M)>xsignificaqueeldatox,siseencuentraenelvector,estaráenlaprimeramitaddelvector.

33 ALGORITMOS II INGENIERIA DE SISTEMAS

SiV(M)<xsignificaque,sieldatoxseencuentraenelvector,estaráenlasegundamitaddelvector.Ennuestroejemplo,paraseguirbuscandoeldatox(85)loharemosdesdelaposición9hastalaposición15.Esdecir,conunascomparacioneshemoseliminadolamitadde losdatossobre loscualeshayqueefectuar labúsqueda.Enotraspalabras,hemosdivididolamuestrapordos(2).Elconjuntodedatossobreelcualhayqueefectuarlabúsquedaquedaasí:

9 10 11 12 13 14 15

31 36 43 50 58 62 69

M

Delamitadquequedoescogemosnuevamenteelelementodelamitadyrepetimoslacomparaciónplanteadaanteriormente.Conestacomparacióneliminamosnuevamentelamitaddelosdatosquenosquedan,esdecir,dividimosnuevamentepordos.Sicontinuamosesteproceso,concuatrocomparacionespodremosafirmarqueeldatoxnoestáenelvector.Hemosreducidoelnúmerodecomparacionesde15a4.Cuatro(4)esellogaritmoenbase2de15,aproximándoloporencima.SiNfuera65000posicionesenelvector,con16comparacionespodremosdecirqueundatonoseencuentraenunconjuntode65000datos.Comopuedeobservarse,lagananciaencuantoalnúmerodecomparacionesesgrande.Unalgoritmodebúsquedaquefuncioneconestatécnicatieneordendemagnitudlogarítmicoenbasedos,yaquelamuestradedatossedividesucesivamentepordos.Consideremosahora,métodossencilloscuyoordendemagnitudeslogarítmico:

1. n = 32 2. s = 0 3. i = 32 4. MQ (i > 1) 5. s = s + 1 6. i = i / 2 7. endMQ

34 ALGORITMOS II INGENIERIA DE SISTEMAS

8. IMPRIMA (n, s)

Enelmétodoanterior,lavariablecontroladoradelcicloesi,ydentrodelciclo,isedividepordos(2).Sihacemosunseguimientodetalladotendremos:

Laprimeravezqueseejecutaelciclo,lavariableisalevaliendo16. Lasegundavezqueseejecutaelciclo,lavariableisalevaliendo8. Laterceravezqueseejecutaelciclo,lavariableisalevaliendo4. Lacuartavezqueseejecutaelciclo,lavariableisalevaliendo2. Laquintavezqueseejecutaelciclo,lavariableisalevaliendo1yterminaelciclo.

Esdecir,lasinstruccionesdelcicloseejecutan5veces.Cinco (5)esel logaritmoenbasedos (2)den (32),porconsiguiente,cada instruccióndel ciclo seejecutaunnúmerodevecesigualallogaritmoenbasedosden.Elcontadordefrecuenciasyelordendemagnituddedichométodosepresentanacontinuación:

1. n = 32 1 2. s = 0 1 3. i = 32 1 4. MQ (i > 1) log2 n + 1 5. s = s + 1 log2 n 6. i = i / 2 log2 n 7. endMQ log2 n 8. IMPRIMA (n, s) 1

Contador de frecuencias 4 log2 n + 5 Orden de magnitud O(log2 (n))

EliminandoconstantesycoeficienteselordendemagnitudesO(log2n).

Consideremosestenuevométodo:

1. n = 32 1 2. s = 0 1 3. i = 1 1 4. MQ (i < n) log2 n + 1 5. s = s + 1 log2 n 6. i = i * 2 log2 n 7. endMQ log2 n 8. IMPRIMA (n, s) 1

35 ALGORITMOS II INGENIERIA DE SISTEMAS

Enestemétodolavariablecontroladoradelcicloisemultiplicapordosdentrodelciclo.

Haciendounseguimientotendremos:

Enlaprimerapasada,lavariableisalevaliendo2.

Enlasegundapasada,lavariableisalevaliendo4. Enlatercerapasada,lavariableisalevaliendo8. Enlacuartapasada,lavariableisalevaliendo16. Enlaquintapasada,lavariableisalevaliendo32yelciclosetermina.

Lasinstruccionesdelcicloseejecutan5veces,portanto,elordendemagnituddelmétodoeslogarítmicoenbase2(O(log2n)).

Engeneral,paradeterminarsiunciclotieneordendemagnitudlinealologarítmica,debemosfijarnoscómose

estámodificando la variable controladoradel ciclo: Si esta semodificamediante sumaso restas el ordendemagnituddelcicloes lineal, si semodificaconmultiplicacionesodivisioneselordendemagnituddelcicloeslogarítmico.Consideremosahoraelsiguientemétodo:

1. n = 81 2. s = 0 3. i = 81 4. MQ (i > 1) 5. s = s + 1 6. i = i / 3 7. endMQ 8. IMPRIMA (n, s)

Aquí,lavariablecontroladoradelcicloisedivideportresdentrodelciclo.Haciéndoleelseguimientotendremos:

Enlaprimerapasada,lavariableisalevaliendo27.

Enlasegundapasada,lavariableisalevaliendo9.

Enlatercerapasada,lavariableisalevaliendo3.

Enlacuartapasada,lavariableisalevaliendo1,yterminaelciclo.

36 ALGORITMOS II INGENIERIA DE SISTEMAS

Las instruccionesdelcicloseejecutaron4veces.Cuatroesel logaritmoenbase3de81.Porconsiguiente,elordendemagnituddedichométodoeslogarítmicoenbase3(O(log3n)).

Engeneral,sitenemosunmétodo:

1. n = 81 2. s = 0 3. i = 81 4. MQ (i > 1) 5. s = s + 1 6. i = i / X 7. endMQ 8. IMPRIMA (n, s)

Aquí,lavariablecontroladoradelciclosedivideporx.Elnúmerodevecesqueseejecutanlasinstruccionesdelcicloeslogaritmoenbasexden(O(logxn)),portanto,elordendemagnitudeslogaritmoenbasex.

Paraobtenermétodos conordendemagnitud Semilogarítmicobasta conqueun ciclo logarítmico seubiquedentrodeuncicloconordendemagnitudn(O(n))oviceversa.Porejemplo:

1. LEA (n) 1 2. s = 0 1 3. i = 1 1 4. MQ (i <= n) n+1 5. t = 0 n 6. j = n n 7. MQ (j > 1) n*log2n +n 8. t = t + 1 n*log2n 9. j = j / 2 n*log2n 10. endMQ n*log2n 11. IMPRIMA (t) n 12. s = s + t n 13. i = i + 1 n 14. endMQ n 15. IMPRIMA (n, s) 1

Contador de frecuencias 4nlog2n+8n+5

Orden de magnitud O(n log2n)

37 ALGORITMOS II INGENIERIA DE SISTEMAS

EnelmétodoanteriorelordendemagnitudesSemilogarítmico.Digamosquelaideaeselaborarmétodoslomáseficientesposible.Consideremoselsiguienteproblema:Elaborarunmétodoqueleaunenteropositivonyquedeterminelasumadelosenterosdesde1hastan.

Unasolucióneslasiguiente:

1. LEA (n) 2. s=0 3. i = 1 4. MQ (i <= n) 5. s = s + i 6. i = i + 1 7. endMQ 8. IMPRIMA (n, s) 9.

Elanteriormétodoleeundatoenteron(n>0),calculaeimprimelasumadelosenterosdesde1hastan,yelordendemagnituddeésteesO(n).Matemáticamentehablando,lasumatoriadelosenterosdesde1hastan,serepresentaasí: Estarepresentación,convertidaenfórmulamatemática,quedaríadelasiguienteforma:

n * (n + 1) 2

Conociendo esta fórmula, podemos elaborar otro método que ejecute exactamente la misma tarea que elanterior.Veamoscómosería:

1. LEA (n) 2. s = n * (n + 1) / 2 3. IMPRIMA (n, s)

Éstemétodotieneordendemagnitudlineal(O(1)).Esdecir,tenemosdosmétodoscompletamentediferentes

38 ALGORITMOS II INGENIERIA DE SISTEMAS

queejecutanexactamentelamismatarea,unoconordendemagnitudO(n)yelotroconordendemagnitudO(1).

Lo anterior no significa que toda tarea podrá ser escrita con métodos O(1), no, sino que de acuerdo a losconocimientosquesetenganoalacreatividaddecadacual,sepodráelaborarmétodosmáseficientes.

Este ejemplo, el cual es válido, desde el punto de vista de desarrollo de métodos, es aplicable también a

situacionesdelavidareal.Seguroquealgunavezustedtuvoalgúnproblema,yencontróunasolución,ysaliódelproblema,aplicandolasoluciónqueencontró,ysinembargo,altiempo,dosotresmesesdespués,pesandoen

loquehabíahecho,encontróquepudohabertomadounamejordeterminaciónyquelehabríaidomejor.

La enseñanza es que cuando se nos presente un problema debemos encontrar comomínimo dossolucionesyluegoevaluarcuálesmásapropiada.

2.6.5 EJERCICIOS DE ENTRENAMIENTO Pautasparadesarrollarlossiguientesejercicios:Recuerdaque,primerosedebehallarelcontadordefrecuenciaqueesunaexpresiónalgebraica, luegodeobtenerelcontadordefrecuenciasepasaahallarelorden demagnitud, que es el que define la eficiencia del algoritmo. Recuerda que, para hallar el orden demagnitudseeliminanloscoeficientes,lasconstantesylostérminosnegativosdelostérminosresultantesDetermineelordendemagnituddelossiguientesmétodos,aloscualesenunejerciciopasadolescalculamoselcontadordefrecuencias: 1. PUBLICOESTATICOVOIDPrograma1(n)2. s=03. PARA(i=1,n,1)4. PARA(j=1,i,1)5. PARA(k=1,j,1)6. s=s+17. endPARA8. endPARA9. endPARA10. end(Método) 1. CLASEPrograma22. MÉTODOPRINCIPAL()3. LEA(n)4. s=05. i=26. MQ(i<=n)7. s=s+18. i=i*i

39 ALGORITMOS II INGENIERIA DE SISTEMAS

9. endMQ10. IMPRIMA(n,s)11. end(Método)12. end(Clase) 1. CLASEPrograma32. MÉTODOPRINCIPAL()3. LEA(n)4. s=05. PARA(i=1,n,16. t=07. PARA(j=1,i,1)8. t=t+19. endPARA10. s=s+t11. endPARA12. IMPRIMA(n,s)13. end(Método)14. end(Clase) 4. Elaborelossiguientesmétodosydetermineelcontadordefrecuenciasyelordendemagnituddichosmétodos:a) Realizarunmétodoquecalculelasumadelasiguienteseriearitméticaparantérminos:2,5,8,11,14,nb) Realizarunmétodoquecalculelasumadelasiguienteseriearitméticaparantérminos:2,4,8,16,32,64,n

40 ALGORITMOS II INGENIERIA DE SISTEMAS

3 UNIDAD 2 MANEJO DINAMICO DE MEMORIA Y PUNTEROS

IntroducciónaPunteros:Enlace

41 ALGORITMOS II INGENIERIA DE SISTEMAS

3.1.1 RELACIÓN DE CONCEPTOS

Punteros:DireccionesdememoriaqueindicaunaposicióndememoriadentrodelaRAM.

Dirección:EsunadirecciónfísicadememoriaqueserepresentapormediodelsistemanuméricohexadecimaldentrodelaRAM.

Nodo:Esunespaciofísicodememoriaquetieneunadirecciónyseencuentracompuestoporunapartededatosyunapartedeliga(dirección).

Manejodinámicodememoria:Paraoptimizarelrecursodememoriaaniveldeprogramación.

Las listas simplemente ligadas: Sonestructurasdonde semaneja la informaciónde formadinámica, dondeel

espaciodondeselaguardalainformaciónesunnodo,dondeestesesubdivideendosespaciosunespaciopara

guardarlainformaciónyotroparaguardarladireccióndememoriaalsiguientenodo.

42 ALGORITMOS II INGENIERIA DE SISTEMAS

Laslistasdoblementeligadas:Sonestructurasquepermitenmanejarlainformacióndeformadinámica,dondeel

espaciodondeseguardalainformaciónesunnodo,queesunadireccióndememoriadivididaentrespartes,una

parteparaguardarlainformación,otraparaladirecciónalsiguientenodoylaotraparaapuntaralnodoanterior.

Insertar:Consisteeningresarunnuevodatoalalista,demaneraquelalistacontinúeordenada.

Borrar:Consisteenborrarundatoundatodelalista.

Buscar:Consisteenbuscarundato,siseencuentraonoenunalista.

Ordenar:Consisteenordenarlosdatosdelalista,yasea,enordenascendenteodescendente.

3.2 TEMA 1 PUNTEROS Los punteros son direcciones dememoria que indica una posición dememoria dentro de la RAM, sonmuyutilizadosconcuandosetrabajaconmemoriadinámica.

Pararepresentarelconceptodepunterosemostraráunalista.

Dondecadacuadrocontienedos campos,unoparaeldatoyotropara la liga.Técnicamente,cadacuadro sedenominanodo,dondecadanodoposeeunadireccióndememoria.

Ejemplo:elprimercuadrotieneladirección1F,elsegundo2Fyeltercero3F.

3.2.1 CLASE NODOSIMPLE Comonuestroobjetivoestrabajarprogramaciónorientadaaobjetos,yparaellousamosclasesconsusrespectivosmétodos,comencemosdefiniendolaclaseenlacualmanipulamoselnodoqueacabamosdedefinir.AdichaclaseladenominaremosnodoSimple:

1. CLASEnodoSimple

2. Privado

3. Objetodato

43 ALGORITMOS II INGENIERIA DE SISTEMAS

4. nodoSimpleliga

5. publico

6. nodoSimple()//constructor

7. objetoretornaDato()

8. nodoSimpleretornaLiga()

9. voidasignaDato(Objetod)

10. voidasignaLiga(nodoSimplex)

11. end(ClasenodoSimple)

Losalgoritmoscorrespondientesalosmétodosdefinidosson:

1. nodoSimple(objetod)//constructor

2. dato=d

3. liga=null

4. end(nodoSimple)

1. objetoretornaDato()

2. returndato

3. end(retornaDato)

1. nodoSimpleretornaLiga()

2. returnliga

3. end(retornaLiga)

1. voidasignaDato(objetod)

2. dato=d

3. end(asignaDato)

1. voidasignaLiga(nodoSimplex)

2. liga=x

3. end(asignaLiga)

Parausarestaclaseconsideremoselsiguienteejemplo:

1. nodoSimplex

44 ALGORITMOS II INGENIERIA DE SISTEMAS

2. d=3.1416

3. x=newnodoSimple(d)Alejecutarlainstrucción3elprogramasecomunicaconelsistemaoperativoyesteleasignaunaposicióndememoriaanuestroprograma,elcualidentificaestaposicióndememoriaconlavariablex.elresultadoobtenidoes:

En el cual 19 es la dirección del nodo en la que se almacenan los campos de dato y liga. Dicha dirección lasuministraelsistemaoperativodeunaformatransparenteparaelusuario.

Siqueremosaccederloscamposdelnodox,loharemosasí:

d=x.retornaDato()//dquedavaliendo3.1416

z=x.retornaLiga()//zquedavaliendonulo

Acontinuación,presentamosunejemplomáscompletodelautilizacióndelaclasenodoSimple.

Supongamosquetenemoselconjuntodedatosa,b,c,fyqueseprocesanconelsiguientealgoritmo:

1. nodoSimplex,y,z,p

2. read(d)//leelaletra“a”

3. x=newnodoSimple(d)//digamosqueenvióelnodo4

4. read(d)//leelaletra“b”

5. y=newnodoSimple(d)//digamosqueenvióelnodo8

6. read(d)//leelaletra“c”

7. z=newnodoSimple(d)//digamosqueenvióelnodo3Elresultadograficoalejecutarestasinstruccioneses:

Ahora,siejecutamoslasinstrucciones:

8. x.asignaLiga(y)

9. y.asignaLiga(z)

Losnodosquedaranconectadosasí:

45 ALGORITMOS II INGENIERIA DE SISTEMAS

Siejecutamoslassiguientesinstrucciones:

10. read(d)//leelaletra“f”11. y=newnodoSimple(d)//digamosqueenvióelnodo7

Nuestrosnodosquedanasí:

Ahora,ejecutemosestasinstrucciones:

12. p=x.retornaLiga()13. write(p.retornaDato())

Lavariablepquedavaliendo8yescribelaletra“b”.

Ysiejecutamosestaotrainstrucción:

14. x.retornaLiga().asignaLiga(y)

Nuestrosnodosquedanasí:

Observequecuandoseejecutax.retornaLiga()seestáobteniendoelcontenidodelcampodeligadelnodox,elcualeselnodo8ennuestroejemplo.Entonces.Elnodo8invocaelmétodoasignaLiga()yleestamosenviandocomoparámetroelnodoy,queenestemomentovale7.Podemosreorganizareldibujodenuestrosnodosasí:

46 ALGORITMOS II INGENIERIA DE SISTEMAS

Ahora,siejecutamoslassiguientesinstrucciones:

15. y.asignaLiga(z)16. y=null17. z=null18. p=x

Nuestralistaquedaasí:

Yahoraejecutemosestasinstrucciones:

19. while(¡p!=null)do20. write(p.retornaDato())21. p=p.retornaLiga()22. end(while)

Enlainstrucción20,laprimeravezqueentraalcicloescribelaletra“a”,puestoquepvale4.Enlainstrucción21modificaelvalordep:apleasignaloquehayenelcampodeligadelnodo4,esdecir,8.Nuestralistaestáasí:

Lasegundavezqueentraalcicloescribelaletra“b”ylapquedavaliendo7.Nuestralistaestáasí:

Laterceravezqueentraalcicloescribelaletra“f”ylapquedavaliendo3:

47 ALGORITMOS II INGENIERIA DE SISTEMAS

Lacuartavezqueentraalcicloescribelaletra“c”ylapquedavaliendonull;porconsiguiente,terminaelciclo.Esteciclo,instrucciones19a22,tieneordendemagnitudO(n),siendonelnúmerodenodosdelalista.

Ahora,siporultimoejecutamosestasinstrucciones:

23. y.asignaLiga(x.retornaLiga().retornaLiga()) Lalistaquedaasí:

Observequenohemosdibujadoelnodo8yaquenoestáconectadoconlosotros,puessehadesconectadodela lista con la instrucción 23. Lo que hace la instrucción 23 se puede escribir también con las siguientesinstrucciones:

23a.y=x.retornaLiga()

23b.y.asignaLiga(y.retornaLiga())

o

23a.y=x.retornaLiga()

23b.y=y.retorna.Liga()

23c.y.asignaLiga(y)

Essupremamenteimportantequeentiendabienesteejemplodeaplicacióndelaclase

nodoSimple.

3.3 TEMA 2 LISTAS SIMPLEMENTE LIGADAS Las listas simplemente ligadas son estructuras donde semaneja la información de forma dinámica, donde elespaciodondeselaguardalainformaciónesunnodo,dondeestesesubdivideendosespaciosunespacioparaguardarlainformaciónyotroparaguardarladireccióndememoriaalsiguientenodo,conestaslistassepuedenrealizarlasoperacionesdeinsertar,ordenar,buscar,borrarytodoestobajoelconceptodememoriadinámica.

48 ALGORITMOS II INGENIERIA DE SISTEMAS

3.3.1 CLASE LISTAS SIMPLEMENTE LIGADA EsunconjuntodenodosconectadoscuyoelementobásicosonobjetosdelaclasenodoSimple.Conelfindepoderoperar sobre este conjunto de nodos es necesario conocer el primer nodo del conjunto de nodos que estánconectados, y enmuchas situaciones el últimonodo del conjunto. Con base en esto vamos a definir la clasellamadaLSL(listasimplementeligada),lacualtendrádosdatosprivadosdelaclasenodoSimple,quellamaremosprimeroyúltimo:primeroapuntaráhaciaelprimernododelalistayúltimoapuntaráhaciaelúltimonododelalista.Además,definiremoslasoperacionesquepodremosefectuarsobreobjetosdedichaclase.

1. CLASELSL

2. Privado

3. nodoSimpleprimero,ultimo

4. Publico

5. LSL()//constructor

6. booleanesVacía()

7. nodoSimpleprimerNodo()

8. nodoSimpleultimoNodo()

9. nodoSimpleanterior(nodoSimplex)

10. booleanfinDeRecorrido(nodoSimplex)

11. voidrecorre()12. nodoSimplebuscaDondeInsertar(Objetod)

13. voidinsertar(Objetod,nodoSimpley)

14. voidconectar(nodoSimplex,nodoSimpley)

15. nodoSimplebuscarDato(Objetod,nodoSimpley)

16. voidborrar(nodoSimplex,nodoSimpley)

17. voiddesconectar(nodoSimplex,nodoSimpley)

18. voidordenaAscendentemente()

19. end(Clase)

Expliquemosbrevementecadaunodelosmétodosdefinidos.Comencemosconelconstructor:cuandoseejecutaelconstructorloúnicoquesehaceescrearunanuevainstanciadelaclaseLSLconsuscorrespondientesdatosprivadosennull.Ejemplo:sitenemosestasinstrucciones:

1. LSLa,b

2. a=newLSL()

3. b=newLSL()

Loqueseobtienees:

49 ALGORITMOS II INGENIERIA DE SISTEMAS

Paraexplicarquées loquehacecadaunode losmétodosdefinidosen laclaseLSLconsideremoselsiguienteobjeto,pertenecientealaclaseLSLyquellamamosa:

LafunciónesVacía()retornaverdaderosilalistaqueinvocaelmétodoestávacía;delocontrario,retornafalso.Unalistaestávacíacuandolavariableprimeroesnull.

LafunciónprimerNodo()retornaelnodoqueestadeprimeroenlalista.Siefectuamoslainstrucciónp=a.primer

Nodo(),entoncespquedaravaliendo4.

LafunciónultimoNodo(),retornaelnodoqueestadeultimoenlalista.Siejecutamoslainstrucciónp=a.ultimo

Nodo(),entoncespquedaravaliendo5.

La funciónfinDeRecorrido(p) retornaverdaderosielnodopenviadocomoparámetroesnull;de locontrario,retornafalso.

La función anterior(x) retorna el nodo anterior al nodo enviado como parámetro. Si tenemos que x = 7 yejecutamoslainstrucciónp=a.anterior(x),entoncespquedaravaliendo8.

Elmétodorecorre(),comosunombrelodice,simplementerecorreyescribelosdatosdeunalistasimplementeligada.Siejecutamoslainstruccióna.Recorre(),elresultadoqueseobtieneeslaescrituradeb,e,i,o,u.

LafunciónbuscaDondeInsertar(d)retornaelnodoacontinuacióndelcualsedebeinsertarunnuevonodocondatodenunalistasimplementeligadaenlaquelosdatosestánordenadosascendentementeydebencontinuarcumpliendoestacaracterísticadespuésdeinsertarlo.Presentemosalgunosejemplos:

y=a.BuscaDondeInsertar(“f”)entoncesyquedavaliendo8.

y=a.BuscaDondeInsertar(“z”)entoncesyquedavaliendo5.

y=a.BuscaDondeInsertar(“a”)entoncesyquedavaliendonull.

50 ALGORITMOS II INGENIERIA DE SISTEMAS

Elmétodoinsertar(d,y)consigueunnuevonodoSimple,locargaconeldatodeinvocaelmétodoconectarconel fin de conectar el nuevo nodo (llamémoslo x) a continuación del nodo y. Si ejecutamos las siguientesinstrucciones:

d=“f”

y=a.BuscaDondeInsertar(d)

a.Insertar(d,y)

Elobjetoa,quedaraasí:

Elmétodoconectarsimplementeconectaelnodoxacontinuacióndelnodoy,talcomoseveenlafiguraanterior.

LafunciónbuscarDato(d,y),comosunombrelodice,buscaeldatodenlalistainvocaelmétodo:siloencuentra,retorna el nodo en el cual lo encontró; de lo contrario, retorna null. En el parámetro y, el cual debe ser unparámetroporreferencia,retornaelnodoanterioralnodoenelcualencontróeldatod.algunosejemplosson:

x=a.buscarDato(“f”,y)entoncesxquedavaliendo9yyquedavaliendo8.

x=a.buscarDato(“u”,y)entoncesxquedavaliendo5yyquedavaliendo3.

x=a.buscarDato(“b”,y)entoncesxquedavaliendo4yyquedavaliendonull.

x=a.buscarDato(“m”,y)entoncesxquedavaliendonullyyquedavaliendoúltimo,esdecir5.

Elmétodoborrar(x,y)controlaqueelparámetroxseadiferentedenull:sixesnullproduceelmensajedequeeldatod(eldatobuscadoconelmétodobuscarDato)nosehallaenlalistayretorna;sixesdiferentedenull,invocaelmétododesconectar(x,y).

Elmétododesconectar(x,y)simplementedesconectaelnodoxdelalistaqueinvocaelmétodo.Paradesconectarunnododeunalistasenecesitaconocercuáleselnodoanterior.Porlotanto,elnodoy,elsegundoparámetro,eselnodoanteriorax.siejecutamoslassiguientesinstrucciones:

d=“i”

x=a.buscarDato(d,y)//xquedavaliendo7yyquedavaliendo9

a.Borrar(x,y)//desconectaelnodox

Estaquedaasí:

51 ALGORITMOS II INGENIERIA DE SISTEMAS

ElmétodoordenaAscendentemente(),comosunombrelodice,reorganizalosnodosdeunalistasimplemente

ligada,detalmaneraquelosdatosenellaquedenordenadosascendentemente.

Sitenemoslasiguientelista:

Yejecutamoslainstruccióna.ordenaAscendentemente(),lalistaquedaraasí:

Observeque losdatosnosehanmovido,son losnodos losquehancambiadodeposiciónyporconsiguienteprimeroyúltimohanvariado.

Asegúresedeentenderbienqueesloquehacecadamétodo.Siustedconocebienloquehacecadamétodo,

podráusarlosapropiadamente;delocontrario,no.Comoingenierodesistemas,debesabercómousarlos

métodosdeunaclaseyademáscomoimplementarlos.

3.3.2 IMPLEMENTACIÓN DE LOS MÉTODOS DE LA CLASE LISTA SIMPLEMENTE LIGADA

Elconstructor:

LSL()

Primero=ultimo=null

52 ALGORITMOS II INGENIERIA DE SISTEMAS

end(LSL)

Simplementeinicializalosdatosprivadosprimeroyúltimoennull.

BooleanesVacía()

Returnprimero==null

end(esVacía)

RecuerdequetantoCcomoenjavalainstalación

returnx==y

Esequivalentea:

if(x==y)

returntrue

else

returnfalse

nodoSimpleprimerNodo()

returnprimero

end(primero)

nodoSimpleultimoNodo()

returnultimo

end(ultimo)

booleanfinDeRecorrido(nodoSimplex)

returnx==null

end(finDeRecorrido)

1. voidrecorre()

2. nodoSimplep

3. p=primerNodo()

4. whilenofinDeRecorrido(p)do

5. Write(p.retornaDato())

53 ALGORITMOS II INGENIERIA DE SISTEMAS

6. p=p.retornaLiga()

7. end(while)

8. end(Método)

Pararecorreryescribirlosdatosdeunalistasimplementeligadaserequiereunavariableauxiliar,lacualllamamosp.dichavariableseinicializaconelprimernododelalistasimplementeligada(instrucción3delmétodoanterior)y luego planteamos un ciclo (instrucciones 4 a 7), el cual se ejecutamientras p sea diferente a null (métodofinDeRecorrido()).Cuandopseanullsesaledelcicloyterminalatarea.Observeque,siporalgunarazónelobjetoque invocaestemétodotiene la listavacía,nuestrométodofuncionacorrectamente.Simplementenoescribenada.Esdecir,lainstrucción4secontrolandossituaciones:listavacíayfinderecorrido.

3.3.3 PROCESO DE INSERCIÓN DE UN DATO EN UNA LISTA SIMPLEMENTE LIGADA

Para insertar un dato d en una lista ligada hemos definido tres métodos en nuestra clase LSL:buscarDondeInsertar(d),insertar(d,y)yconectar(x,y).Analicemoscadaunodeellos.Esimportanterecordarqueenesteprocesodeinserciónserequierequelosdatosdelalistasehallenordenadosenformaascendente.

Consideremoslasiguientelistayquesedeseainsertareldato“g”.Loprimeroquesedebehaceresdeterminarenquésitiodebequedarlaletra“g”paraquesecumplaquelosdatoscontinúenordenadosenformaascendente.Porobservación,nosdamoscuentadequela“g”debequedarentrela“f”yla“o”,esdecir,acontinuacióndelnodo9.

Nuestroprimermétodo,buscaDondeInsertar(d),efectúalatareaquedeterminaacontinuacióndecualnododebequedareldatoainsertar.Elmétodoparaestatareaes:

1. nodoSimplebuscaDondeInsertar(Objetod)

2. nodoSimplep,y

3. p=primerNodo()

4. y=anterior(p)

5. while(nofinDeRecorrido(p)andp.retornaDato()<d)do

6. y=p

7. p=p.retornaLiga()

8. end(while)

9. returny

54 ALGORITMOS II INGENIERIA DE SISTEMAS

10. end(buscaDondeInsertar)

Enestemétodoserequierendosvariablesauxiliares,lascualesllamamospyy.conlavariablepserecorreyamedidaquelavamosrecorriendosevacomparandoeldatodep(p.retornaDato())coneldatodquesedeseainsertar.Mientrasqueeldatodepseamenorquedseavanzaenlalistaconpycony.lavariableysiempreestaráapuntandohaciaap.comoinicialmentepeselprimernodo,inicialmenteyesnull.Fíjesequesieldatodainsertaresmenorqueeldatodelprimernododelalistasimplementeligadanuestrométodoretornanull.Elhechodequenuestrométodoretornenullsignificaqueeldatoainsertarvaaquedardeprimeroenlalista.

VeamosahoracomoeselalgoritmoparanuestrométodoInsertar(d,y):

1. voidinsertar(Objetod,nodoSimpley)2. nodoSimplex3. x=nodoSimple(d)4. conectar(x,y)5. end(Método)

Nuestro método insertar consigue simplemente un nuevo nodo, lo carga con el dato d e invoca el métodoconectar.Elparámetroyserefierealnodoacontinuacióndelcualhabráqueconectarelnuevox.

Ocupémonosdelmétodoconectar(x,y):

Caso1:

Alejecutary=buscaDondeInsertar(d)cond=“g”enelobjetodelafiguraanterioryelmétodoinsertar(d,y),estamosenlasituaciónmostradaenlafigurasiguiente:

Conectarelnodoxacontinuacióndelnodoyimplicaquecuandolleguemosalnodoydebemostrasladarlohaciaelnodox,oseaqueelcampodeligadelnodoydebequedarvaliendo6,ycuandoestemosenelnodoxdebemostrasladarnoshaciaelnodo3,esdecir,queelcampoligadelnodoxdebequedarvaliendo3.Oseaque,hayquemodificardoscamposdeliga:elcampodeligadelnodoyyelcampodeligadelnodox.paralograrestodebemosejecutarlassiguientesinstrucciones:

55 ALGORITMOS II INGENIERIA DE SISTEMAS

y.asignaLiga(y.retornaLiga())//modificaelcampodeligadelnodox

y.asignaLiga(x)//modificaelcampodeligadelnodoy

Ylalistaquedaasí:

Ycomosepodráobservar,sehainsertadoelnodoxacontinuacióndelnodoy

Caso2:

Consideremosqueeldatoainsertaresd=“z”.Alejecutary=buscaDondeInsertar(d),yelmétodoinsertar(d,y),estamosenlasiguientesituación:

Conectarxacontinuacióndeyselograconlasmismasinstruccionesdelcaso1,teniendoencuentaquecomoel datoque se inserta quedadeultimohayque actualizar la variable último. Lo anterior significa que lasinstruccionesparaconectarxacontinuacióndeyserán:

y.asignaLiga(y.retornaLiga())//modificaelcampodeligadelnodox

y.asignaLiga(x)//modificaelcampodeligadelnodoy

if(y==ultimo)then

ultimo=x

end(if)

Ylalistaquedaasí:

56 ALGORITMOS II INGENIERIA DE SISTEMAS

Caso3:

Consideremosqueeldatoainsertaresd=“a”.alejecutary=buscaDondeInsertar(d)yelmétodoinsertar(d,y),estamosenlasituaciónmostrada:

Enestasituación,cuandolayesnull,esdecirqueeldatoainsertarquedaradeprimero,hayquemodificarelcampodelaligaxylavariableprimero:

y.asignaLiga(primero)

primero=x

Pero hay que tener en cuenta que la lista pudo haber estado vacía. Si esa fuera la situación habría queactualizar también la variable última. Considerando estas situaciones, las instrucciones completas paraconectarunnodoxalprincipiodelalistason:

y.asignaLiga(primero)

if(primero==null)then

ultimo=null

end(if)

primero=x

Elalgoritmocompletoparaelmétodoconectarconsistesimplementeenagruparlasinstruccionesdescritasparacadaunodeloscasosenunsolométodo.Dichométodosepresentaacontinuación:enlasinstrucciones2a7seconsideranloscasos1y2,mientrasqueenlasinstrucciones9a13seconsideraelcaso3:

1. voidconectar(nodoSimplex,nodoSimpley)

57 ALGORITMOS II INGENIERIA DE SISTEMAS

2. if(¡y!=null)then

3. y.asignaLiga(y.retornaLiga())

4. y.asignaLiga(x)

5. if(y==ultimo)then

6. ultimo=x

7. end(if)

8. Else

9. y.asignaLiga(primero)

10. if(primero==null)then

11. ultimo=x

12. end(if)13. primero=x

14. end(if)15. end(Método)

3.3.4 PROCESO DE BORRADO DE UN DATO EN UNA LISTA SIMPLEMENTE LIGADA

Borrarundatodeunalistasimplementeligadaconsisteenubicarelnodoenelcualsehallaeldatoydesconectarlodelista.ParaellohemosdefinidotresmétodosquehemosllamadobuscarDato(d,y),borrar(x,y)ydesconectarlo(x,y).

Sitenemoslasiguientelista:

Yqueremosborrarelnodoquecontienelaletra“f”,loprimeroquedebemoshaceresdeterminarencualnodosehallalaletra“f”ycuálessunodoanterior.EstatareaseefectúaconelmétodobuscarDato(d,y):ejecutamoslainstrucción

x=a.buscarDato(d,y)

Yestamosenestasituación:

58 ALGORITMOS II INGENIERIA DE SISTEMAS

El algoritmo correspondiente almétodo buscar Dato (d, y) es similar almétodo buscarDondeInsertar(d) y lopresentamosacontinuación.

1. nodoSimplebuscarDato(Objetod,nodoSimpley)2. nodoSimplex3. x=primerNodo()4. y=anterior(x)5. while(nofinDeRecorrido(x)andx.retornaDato())!=ddo6. y=x7. x=x.retornaLiga()8. end(while)9. returnx10. end(buscarDato)

Utilizamoslavariablexpararecorrerlalistaeircomparandoeldatodelnodoxcond.deesteciclo,instrucciones5a8,sesalecuandoencuentreocuandohayaterminadoderecorrerlalista.Observequecuandoeldatoquesebuscanosehallaenla listaelparámetroyquedavaliendoúltimo.Además,cuandoeldatoquesebuscaeselprimerdatodelalista,lavariableyquedavaliendonull.

Nuestrométodoborrar(x,y)consistesimplementeencontrolarqueelnodoxseadiferentedenull.Sielnodoxesnullsignificaqueeldatonoseencontróenlalista;porconsiguiente,nohayningúnnodoparadesconectar,entoncesproduceelmensajecorrespondienteyretornaalprogramallamantepuestoquenohaynadamásquehacer.Sixesdiferentedenullseinvocaelmétododesconectar.Elalgoritmocorrespondienteadichométodose

presentaacontinuación:

voidborrar(nodoSimplex,nodoSimpley)

ifx==nullthen

write(“datonoexiste”)

return

end(if)

desconectar(x,y)

end(Método)

59 ALGORITMOS II INGENIERIA DE SISTEMAS

Analicemosahoralasinstruccionescorrespondientesalmétododesconectar(x,y).

Caso1:

Es la situaciónmostradaen la figuraanterior. Loúnicoquehayquehacerparadesconectarel nodo xesmodificarelcampodeligadelnodoy,asignándoleloquehayenelcampoligadelnodox.estoselograconlasiguienteinstrucción:

y.asignaLiga(x.retornaLiga())

Caso2:

Sieldatoaborraresd=“z”,alejecutarlainstrucción

x=a.buscarDato(d,y)

Lasituaciónes:

Porconsiguiente,cuandosedesconecteelnodoxlavariableúltimadebequedarvaliendoyylasinstruccionesserán:

y.asignaLiga(x.retornaLiga())

if(x==ultimo)then

ultimo=y

end(if)

Caso3:

Sieldatoaborraresd=“b”alejecutarlainstrucción

x=a.buscarDato(d,y)

Lasituaciónes:

60 ALGORITMOS II INGENIERIA DE SISTEMAS

Conlavariableyvaliendonull.

Enestasituaciónloquehayquehaceresactualizarlavariableprimero:aprimeroseleasignaloquehayaenelcampodeligaprimero.Hayquetenerencuentaquepuedesucederquelalistasolohubieratenidounnodo;eneste caso la variable primero quedará valiendonull, y por lo tanto la variable ultimo también deberá quedarvaliendonull.Lasinstruccionespararesolverestecasoson:

primero=primero.retornaLiga()

if(primero==null)then

ultimo=null

end(if)

Agrupandolasinstruccionescorrespondientesalostrescasosenunsoloalgoritmoobtenemos:

1. voiddesconectar(nodoSimplex,nodoSimpley)

2. if(x!=primero)then

3. y.asignaLiga(x.retornaLiga())

4. if(x==ultimo)then

5. ultimo=y

6. end(if)

7. else

8. primero=primero.retornaLiga()

9. if(primero==null)then

10. ultimo=null

11. end(if)12. end(if)13. end(Método)

61 ALGORITMOS II INGENIERIA DE SISTEMAS

Enlasinstrucciones2a6seresuelveparaloscasos1y2,mientrasqueenlasinstrucciones8a11seresuelveparaelcaso3.

Los métodos para conectar y desconectar son métodos con orden de magnitud 0(1), lo cual mejora

sustancialmenteestasoperacionesconrespectoalarepresentacióndedatosenunvector.

3.3.5 ORDENAMIENTO DE DATOS EN UNA LISTA SIMPLEMENTE LIGADA

Presentemosacontinuaciónunmétodoqueutilizaelmétodoselección,elcual,seenunciaasí:“delosdatosquefaltanporordenar,determinecuáleselmenorycolocarlodeprimeroeneseconjuntodedatos”.

1. voidOrdenaAscendentemente()

2. nodoSimplep,ap.,menor,amenor,q,aq

3. p=primerNodo()

4. ap.=anterior(p)

5. while(¡p!=ultimoNodo())

6. menor=p

7. amenor=ap.

8. q=p.retornaLiga

9. aq=p

10. while(nofinDeRecorrido(q))11. if(q.retornaDato()<menor.RetornaDato())

12. menor=q

13. amenor=aq

14. end(if)15. aq=q16. q=q.retornaLiga()17. end(while)18. if(menor==p)

19. ap.=p20. p=p.retornaLiga()21. else22. desconectar(menor,amenor)

23. conectar(menor,ap.)

24. ap.=menor

25. end(if)26. end(while)27. end(Método)

62 ALGORITMOS II INGENIERIA DE SISTEMAS

Conbaseenesteenunciadodefinimoslasvariablesnecesariasparaelaborarelmétodo.Serequiereunavariablequeindiqueapartirdecualnodofaltandatosporordenar.Dichavariablelallamamosp.inicialmentepapuntahaciaelprimernodoyaquealprincipiofaltantodoslosdatosporordenar.Serequiereotravariablepararecorrerlalistaeircomparandolosdatosparadeterminarencualnodosehallaelmenordato.Estavariablelallamamosq. y por ultimo requerimos otra variable que apunte hacia el nodo que tiene elmenor dato. Esta variable lallamamosmenor.

Nuestrométodoconsistiráentoncesendeterminarcuáleselnodoquetieneelmenordatoentrelosdatosquefaltanporordenar;desconectamoselnododeesesitioyloconectamosalprincipiodeeseconjuntodedatos.

Comoyahemosvisto,paraefectuarlasoperacionesdeconexiónydesconexiónserequiereconocerlosregistrosanterioresalosnodosconloscualessedeseanejecutardichasoperaciones;porlotanto,definimosotrastresvariables que llamaremos ap., aq y a menor, las cuales apuntan hacia los nodos anteriores a p, q y menorrespectivamente.

Enlainstrucción5definimoselcicloprincipaldelciclo.Elmétodoterminaracuandopesteapuntandohaciaelúltimonododelalista,puestoquecuandopesteapuntandohaciaesenodosignificaquesolofaltaundatoporordenar,yunsolodatoestaordenado.

Enlasinstrucciones6y7asignamoslosvaloresinicialesdemenoryamenor.Inicialmenteconsideramosqueelmenordatoeselprincipiodelconjuntodedatosquefaltanporordenar,esdecir,p.

Enlasinstrucciones8y9seasignanlosvaloresinicialesdeqyaq.

Enlasinstrucciones10a17seefectúaelcicloparadeterminarcuáleselnodoquecontieneelmenordato.Secompara el dato de nodo q con el dato del nodomenor. Si el dato de q es menor que el dato de menor,actualizaremosmenorysuinterior.Cualquieraquehubierasidoelresultadoavanzamosconqysuanterior.

Enlainstrucción18confrontamosencualposiciónestáelnododetieneelmenordato.Sielmenordatoestabadeprimeroeneseconjuntodedatos,esdecir,enp,simplementeavanzamosconpysuanterior(instrucciones19y20);delocontrario,desconectamoselnodomenor,cuyoanterioresamenor,yloconectamosacontinuacióndeap.(instrucciones22y23).Dehaberocurridoestoúltimo,elanteriorap,esdecirap.,yaesmenor(instrucción24).

3.3.6 MÉTODO ANTERIOR(X) Yahemosdefinidoquenuestrométododenominadoanterior(x) retornaraelnodoanterioralnodoxenviadocomoparámetro.Paraellobastaraconrecorrerlalistasimplementeligadautilizandodosvariablesauxiliares:una(llamémoslap)quesevacomparandoconx,yotraquesiempreapuntarahaciaelnodoanteriorax(llamémoslay).cuandopseaigualax,simplementeseretornay.inicialmenteseráelprimernodoyyseránull.Nuestrométodoeselsiguiente:

nodoSimpleanterior(x)

nodoSimplep,y

63 ALGORITMOS II INGENIERIA DE SISTEMAS

p=primerNodo()

y=null

while(¡p!=x)do

y=p

p=p.retornaLiga()

end(while)

returny

end(anterior)

3.3.7 CONSTRUCCIÓN DE LISTAS SIMPLEMENTE LIGADAS Pasemosahoraaconsiderarcomoconstruirlistassimplementeligadas.Básicamentehaytresformasdehacerlo:una,quelosdatosquedenordenadosascendentementeamedidaquelalistasevaconstruyendo;otra,insertandonodossiemprealfinaldelalista;yunatercera,insertandolosnodossiemprealprincipiodelalista.

Paralaprimeraformadeconstrucción(quelosdatosquedenordenadosascendentementeamedidaquesevaconstruyendolalista),unmétodogenerales:

LSLa

a=newLSL()

Mientrashayadatosporleerhaga

Lea(d)

y=a.BuscaDondeInsertar(d)

a.Insertar(d,y)

end(mientras)

Esdecir,bastaconplantearuncicloparalalecturadedatoseinvocarlosmétodosparabuscardondeinsertareinsertardesarrolladospreviamente.

Paralasegundaformadeconstrucción(insertandonodossiemprealfinaldelalista),unmétodoes:

LSLa

nodoSimple

64 ALGORITMOS II INGENIERIA DE SISTEMAS

a=newLSL()

mientrashayadatosporleerhaga

lead(d)

y=a.ultimoNodo()

a.Insertar(d,y)

end(mientras)

Nuevamenteseplanteauncicloparalalecturadedatosycadavezqueseleaundatosedeterminaelúltimoyseinvocaelmétodoparainsertar.

Paralaterceraformadeconstrucción(insertandonodossiemprealprincipiodelalista),nuestrométodoes:

LSLa

a=newLSL

Mientrashayadatosporleerhaga

lead(d)

a.Insertar(d,null)

end(mientras)

Aquí, basta con plantear el ciclo para lectura de datos e invocar el método insertar enviado como segundoparámetronull.Recuerdequenuestrométodoinsertar(d,y)insertaunnodocondatodacontinuacióndey:siyesnullsignificaqueeldatodquedaradeprimero.

3.3.8 DIFERENTES TIPOS DE LISTAS SIMPLEMENTE LIGADAS Y SUS CARACTERÍSTICAS

Comencemospresentandográficamentelosdiferentestiposdelistaquesepuedenconstruir:

Listassimplementeligadas:

65 ALGORITMOS II INGENIERIA DE SISTEMAS

Listassimplementeligadascirculares:

Listassimplementeligadascircularesconnodocabeza:

Listassimplementeligadasconnodocabeza:

3.4 TEMA 3 LISTA DOBLEMENTE LIGADAS Laslistasdoblementeligadassonestructurasquepermitenmanejarlainformacióndeformadinámica,dondeelespaciodondeseguardalainformaciónesunnodo,queesunadireccióndememoriadivididaentrespartes,unaparteparaguardarlainformación,otraparaladirecciónalsiguientenodoylaotraparaapuntaralnodoanterior,conestaslistassepuedenrealizarlasoperacionesdeinsertar,borrar,buscar,ordenarytodobajoelconceptodememoriadinámica.

66 ALGORITMOS II INGENIERIA DE SISTEMAS

3.4.1 DEFINICIÓN DE CARACTERÍSTICAS Unnododobleesunregistroquetienedoscamposdeliga:unoquellamaremosLi(Ligaizquierda)yotroquellamaremosLd(Ligaderecha).Undibujopararepresentardichonodoes:

LIGAIZQUIERDA ÁREADEDATOS LIGADERECHA

Donde:

Li:apuntahaciaelnodoanterior.

Ld:apuntahaciaelnodosiguiente.

ConbaseenestovamosadefinirunaclasequellamaremosnodoDoble:

1. CLASEnodoDoble

2. Privado

3. Objetodato

4. nodoDobleLi,Ld

5. publico

6. nodoDoble(objetod)//constructor

7. voidasignaDato(objetod)

8. voidasignaLd(nodoDoblex)

9. voidasignaLi(nodoDoblex)

10. objetoretornaDato()

11. nodoDobleretornaLd()

12. nodoDobleretornaLi()

13. end(Clase)

Losalgoritmoscorrespondientesacadaunodeestosmétodossonlossiguientes:

67 ALGORITMOS II INGENIERIA DE SISTEMAS

1. nodoDoble(objetod)//constructor

2. dato=d

3. Ld=null

4. Li=null

5. end(nodoDoble)

1. voidasignaDato(objetod)

2. dato=d

3. end(Método)

1. voidasignaLd(nodoDoblex)

2. Ld.=x

3. end(asignaLd)

1. voidasignaLi(nodoDoblex)

2. Li=x

3. end(asignaLi)

1. objetoretornaDato()

2. returndato

3. end(retornaDato)

1. nodoDobleretorna(Li)

2. returnLi

3. end(retornaLi)

68 ALGORITMOS II INGENIERIA DE SISTEMAS

1. nodoDobleLd()

2. returnLd

3. end(retornaLd)

Teniendo definida esta clase, procedemos a desarrollar unmétodo en el cual hagamos uso de ella y de sus

métodos.Consideremosquesetieneelconjuntodedatosb,e, i,o,u,yquenuestrométodolos leeráeneseorden:

1. nodoDoblew,x,y,z

2. read(d)

3. w=newnodoDoble(d)

4. read(d)

5. x=newnodoDoble(d)

6. read(d)

7. y=newnodoDoble(d)

8. read(d)

9. z=newnodoDoble(d)Alejecutarestasinstruccioneselescenarioqueseobtieneeselsiguiente:

Continuemosnuestroalgoritmoconestasinstrucciones:

10. w.asignaLd(x)11. x.asignaLi(w)12. x.asignaLd(y)13. y.asignaLi(x)14. y.AsignaLd(z)15. z.asignaLi(y)

Alejecutarestasinstruccionesnuestroescenarioes:

FíjesequeelcampoLddelnodowquedovaliendo2,envirtuddelainstrucción10,locualindicaqueelnodosiguienteawesel2;elcampoLidex(elnodo2)quedovaliendo6,envirtuddelainstrucción11,locualsignifica

69 ALGORITMOS II INGENIERIA DE SISTEMAS

queelnodoanterioraxesel6;elcampoLddelnodoxquedovaliendo7,envirtuddelainstrucción12,locualquieredecirqueelnodosiguienteaxesel7.DeunaformasimilarsehanactualizadoloscamposLiyLddelosnodosyyz.Asegúresedeentenderbienelescenarioactual.

Continuemosejecutandolassiguientesinstrucciones:

16. w=null17. y=null18. z=null

Enestemomentonuestrasituaciónes:

Ahoraejecutemosestasotrasinstrucciones:

19. read(d)20. y=newnodoDoble(d)21. y.AsignaLd(x.retornaLd())22. y.asignaLi(x)23. y.RetornaLd().asignaLi(y)24. x.asignaLd(y)

Lasituaciónquedaasí:

Ahora,alejecutarestainstrucción:

25. y=nullLanuevasituaciónes:

Porúltimo,ejecutemosestasotrasinstrucciones:

70 ALGORITMOS II INGENIERIA DE SISTEMAS

26. x.retornaLi().asignaLd(x.retornaLd())27. x.retornaLd().asignaLi(x.retornaLi())

Ynuestrosnodosquedanasí:

Fíjesequeel resultadodeejecutar las instrucciones26y27fueeliminarelnodox.unasde instruccionesqueharíanlamismatareaquelasinstrucciones26y27son:

1. p=retornaLi()

2. q=x.retornaLd()

3. p.asignaLd(q)

4. q.asignaLi(p)Silohubiéramoshechodeesemodo,lalistaquedaríaasí:

Esmuyimportanteentenderquelasinstrucciones26y27ejecutanlamismatareaquelasinstrucciones1,2,3y4mostradasacontinuacióndeellas.

3.4.2 PROPIEDAD FUNDAMENTAL DE LAS LISTAS DOBLEMENTE LIGADAS

Esimportanteveraquíloqueseconocecomolapropiedadfundamentaldelaslistasdoblementeligadasyaqueestábasadaenlascaracterísticasdeloscamposdeligadelosnodosdobles.Paraello,consideremoslossiguientestresregistrosconsecutivos:

71 ALGORITMOS II INGENIERIA DE SISTEMAS

Elcampodelaligaizquierdadelnodoxvale9,locualindicaqueelnodoanterioreselnodo9;porlotanto,elnodo9eselnodoretornaLi().

Elcampodeligaderechadelnodoxvale5,locualindicaqueelnodosiguienteeselnodo5;porconsiguiente,elnodo5eselnodox.retornaLd().

Elnodox.retornaLi()tieneuncampodeligaderecha,elcualvale7,esdecir,elmismonodox.

Elnodox.retornaLd()tieneuncampodeligaizquierda,elcualtambiénvale7,esdecir,elnodox.

Dadoloanterior,setieneque:

x.retornaLi().retornaLd()==x==x.retornaLd().retornaLi()

Estacaracterísticaseconocecomola“propiedadfundamentaldelaslistasdoblementeligadas”,yesdesupremaimportanciaentenderlabienconel findemanipularapropiadamente losobjetosde la clase listadoblementeligada.

3.4.3 EJERCICIOS DE ENTRENAMIENTO Pautasparadesarrollarlossiguientesejercicios:Paradesarrollarcadaunodeesosejercicios,debestenermuyclaroelconceptodenodoy la formadecómovasaestructurarelnodo.Recuerdaque,para listassimplementeligadaselnodosecomponededospartes,unapartededatosyunapartedeliga;paralas listasdoblemente ligadaselnodoseconformadetrespartes,unapartededato,ydospartesde ligas,una ligaqueapuntaalnodoanterioryunaligaqueapuntaalnodosiguiente.

1.Elaboreunmétodoqueleaunenteronyqueconstruyaunalistasimplementeligada,deadigitopornodo.

2.Elaboreunmétodoqueborredeunalistasimplementeligadaundatodadotodaslasvecesqueloencuentre.

3.Setieneunalistasimplementeligada,conundatonuméricoencadanodo.Elaboreunmétodoquedetermineeimprimaelpromediodedatosdelalista.

4.Elaboreunmétodoqueintercambielosregistrosdeunalistadoblementeligadaasí:elprimeroconelúltimo,elsegundoconelpenúltimo,elterceroconelantepenúltimo,yasísucesivamente.

5.Elaboreunmétodoqueintercambielosregistrosdeunalistadoblementeligadaasí:elprimeroconeltercero,elsegundoconelcuarto,elquintoconelséptimo,elsextoconeloctavo,yasísucesivamente.

72 ALGORITMOS II INGENIERIA DE SISTEMAS

4 UNIDAD 3 MANEJO DE HILERAS DE CARACTERES

ProgramaciónenC-MANEJODECADENAS-Parte1:Enlace

4.1.1 RELACIÓN DE CONCEPTOS

Hileras:Esuntipodedatoconstruidoconbasealtipoprimitivochar.

73 ALGORITMOS II INGENIERIA DE SISTEMAS

Asignación:Consisteenasignarleaunavariableunahileradecaracteres.

Longitud:Consisteenverificarlacantidaddecaracteresdelacualsecomponelahilera.

Subhilera:Partequesetomadeunahilera.

Concatenar:Consisteenunirunahileraapartirdeotra.

Posición:Consisteendeterminar,apartirdecualposicióndeunahilerax,seencuentraunahileray;siesqueseencuentra.

Insertar:Estemétodoconsisteeninsertarunahilerax,apartirdelcarácteri,delahileray.

Borrar:Estemétodoconsiste,apartirdelaposiciónidelahilerax,borrajcaracteres.

Reemplazar:Estemétodoconsistequeapartirdelaposiciónidelahilerax,reemplazajcaracteresporunacopiadelahileray.

4.2 TEMA 1 DEFINICIÓN Lashilerasesunobjetodedatoscompuestos,construidosconbaseeneltipoprimitivochar,sumayorapariciónfuecuandoempezaronaaparecerlosprocesadoresdetextos.

4.3 TEMA 2 OPERACIONES CON HILERAS Las operaciones que podemos hacer con cadenas son las operaciones de asignación, longitud, subhilera,concatenar, insertar, borrar, reemplazar y posición en una cadena.Consideremosahoralasoperacionesbásicasquesepuedenejecutarconhileras.Definamosunaclasehileraconsusoperaciones:

1. CLASE Hilera 2. Publico 3. entero longitud () 4. hilera subHilera (entero i, entero j) 5. hilera concat (hilera s) 6. void inserte (hileras, entero j) 7. void borre (entero i, entero j) 8. void replace (entero i, entero j, hilera s) 9. entero posición (hilera s)

74 ALGORITMOS II INGENIERIA DE SISTEMAS

10. end(Clase)

4.3.1 ASIGNACIÓN Enelladoizquierdotendremoselnombredelavariablealacualseleasignaunahileradada.Enelladoderechosetendráunahileraounavariabletipohilera.Porejemplo,siS,T,UyVsonvariablestipohilerapodemostenerlassiguientesinstrucciones:

S=“abc”

T=“def.”

U=T

V=“”

EnelprimerejemplolavariableScontendrálahilera“abc”.

EnelsegundoejemplolavariableTcontendrálahilera“def”.

EneltercerejemplolavariableUcontendrálahilera“def”.

EnelcuartoejemplolavariableVcontendrálahileravacía.

4.3.2 FUNCIÓN LONGITUD Formageneral:longitud(S)

EstafunciónretornaelnúmerodecaracteresquetienelahileraS.porejemplo,sitenemosS=“mazamorra”yejecutamoslainstrucción:

n=S.longitud()

Lavariablenquedaravaliendo9.

4.3.3 FUNCIÓN SUBHILERA Formageneral:T=S.subHilera(i,j),con1≤i≤i+j–1≤n

SiendonlalongituddelahileraS.

75 ALGORITMOS II INGENIERIA DE SISTEMAS

Estafunción,apartirdelaposiciónidelahileraS,extraejcaracterescreandounanuevahileraydejandointactalahileraoriginalS.porejemplo,sitenemosS=“mazamorra”yejecutamoslainstrucción:

T=S.subHilera(4,5)

LavariableTquedaravaliendo“amorr”.

4.3.4 FUNCIÓN CONCATENAR Formageneral:U=S.Concat(T)

Esta función crea una copia de la hilera S y a continuación agrega una copia de la hilera T. las hileras S y Tpermanecenintactas.Porejemplo,siS=“nacio”yT“nal”yejecutamoslainstrucción:

U=S.concat(T)

LavariableUquedaraconteniendolahilera“nacional”.

4.3.5 MÉTODO INSERTAR Formageneral:S.inserte(T,i)

EstemétodoinsertalahileraTapartirdelcarácterdelaposiciónidelahileraS.porejemplo,sitenemosS=“nal”yT=“ciona”yejecutamoslainstrucción:

S.inserte(T,3)

LahileraSquedaravaliendo“nacional”.

EsnecesarioresaltarqueenestecasolahileraSquedamodificadamientrasquelahileraTpermaneceintacta.

4.3.6 MÉTODO BORRAR Formageneral:S.borre(i,j)

Estemétodo,apartirdelaposiciónidelahileraSborrajcaracteres.Porejemplo,siS=“amotinar”yejecutamoslainstrucción:

S.borre(4,4)

76 ALGORITMOS II INGENIERIA DE SISTEMAS

LahileraSquedaravaliendo“amor”.

EsbuenoanotartambiénquelahileraSquedamodificada.

4.3.7 MÉTODO REEMPLAZAR Formageneral:S.replace(i,j,T)

Estemétodo,apartirdelaposiciónidelahileraSreemplazajcaracteresporunacopiadelahileraT.porejemplo,silahileraS=“abcdf”ylahileraT=“xyz”yejecutamoslainstrucción:

S.replace(3,2,T)

LahileraSquedaravaliendo“abxyzef”.

EstemétodomodificalahileraS,mientrasquelahileraTpermaneceintacta.

4.3.8 FUNCIÓN POSICIÓN Formageneral:m=S.Posición(T)

EstafuncióndeterminaapartirdecualposicióndelahileraSseencuentralahileraT,siesqueseencuentralahilera T en la hilera S. en caso de no encontrar la hilera T en la hilera S retornara cero. Por ejemplo, si S =“mazamorra”yT=“amor”yejecutamoslainstrucción:

m=posición(T)

Lavariablemquedaravaliendo4.

Lasoperacionesaquídescritasnosproporcionanlasfacilidadesparamanipularhilerasencualquierlenguajedeprogramación.EsimportanteagregarquelenguajesdeprogramacióncomoC++yjavatraendefinidalaclasehilera(String)enlacualseimplementaunagrancantidaddevariacionescorrespondientesaestasoperaciones.

4.4 TEMA 3 EJERCICIOS DE APLICACIÓN Conlasoperacionesmencionadasenelnumeralanterior,sepuedenrealizarmuchosejemplosdeaplicación,porejemplo: cuando se tieneun textoy se solicitadeterminar cuáles la frecuenciade cadaunade las letrasdelalfabeto español, es decir, cuantas veces aparece la letra “p”, cuantas veces aparece la letra “o” y asísucesivamente.

77 ALGORITMOS II INGENIERIA DE SISTEMAS

4.4.1 APLICACIÓN DE LA CLASE HILERA Pasemosaconsiderarejemplosdeaplicaciónconlasfuncionesanteriormentedefinidas.

Empecemosconsiderandounejercicioenelcualnossolicitandeterminarcuáleslafrecuenciadecadaunadelasletrasdelalfabetoespañolenundeterminadotextodado,esdecir,cuantasvecesseaparecela“a”cuantasvecesaparecela“b”yasísucesivamente.

Llamemostextolavariableenlacualhayquehacerdichaevaluación.Paradesarrollardichométodoutilizaremosunavariablellamadaalfabeto,queesunavariabletipohilerayquedefiniremosasí:

alfabeto=“abcdefghijklmnñopqrstuvwxyz”

Utilizaremosunvectorde27posiciones,quellamaremosfrecuencia,encadaunadelascualesguardaremoselnúmerodevecesqueseencuentrealgunaletradelalfabetodefinido.Esdecir,a la letra“a” lecorrespondelaposición1delvectordefrecuencias,alaletra“b”laposición2,alaletra“c”laposición3yasísucesivamente.

Nuestrométodoconsistiráenrecorrerloscaracteresdelavariabletexto,buscandocadacarácterenlavariablealfabetoutilizandolafunciónposición;cuandolaencuentresumaremos1alaposicióncorrespondienteaesaletraenelvectordefrecuencia.

Nuestrométodoes:

1. voidfrecuenciaLetras(hileraalfabeto)

2. enterom,i,j,n

3. hileracar

4. m=alfabeto.longitude()

5. for(i=1;i<=m;i++)do

6. frecuencia[i]=0

7. end(for)

8. n=longitud()

9. for(i=1;1<=n;i++)do

10. car=subHilera(i,1)11. j=alfabeto.posicion(car)12. if(j!=0)then13. frecuencia[j]=frecuencia[j]+114. end(if)15. end(for)16. for(i=1;i<=m;i++)do

17. letra=alfabeto.SubHilera(i,1)

78 ALGORITMOS II INGENIERIA DE SISTEMAS

18. write(letra,frecuencia[i])19. end(for)20. end(Método)

Consideremosahoraunmétodoenelcualnosinteresadeterminarlafrecuenciadecadapalabraqueaparezcaenuntexto.Paradesarrollardichométododebemos,primeroquetodo,identificarcadaunadelaspalabrasdeltexto.Paralograrestaidentificaciónhayquedefinircuálescaracteresseutilizancomoseparadoresdepalabras.Estoscaracterespuedensercualquiersímbolodiferentedeletra,esdecir,lacoma,elpunto,elpuntoycoma,losdospuntos,elespacioenblanco,etc.

Nuestrométodomanejaralassiguientesvariables:

VARIABLES CARACTERÍSTICAS

TEXTO Variableenlacualsehallaalmacenadoeltextoaprocesar.

PALABRAS Variables tipo vector en la cual almacenaremos cada palabra que se identifique en eltexto.

FRECUENCIA Variabletipovectorenlacualalmacenaremoselnúmerodevecesqueseencuentrecadapalabradeltexto.Unapalabraqueseencuentreenlaposiciónidelvectorpalabra,enlaposiciónidelvectorfrecuenciasehallaraelnúmerodevecesquesehaencontrado.

PALABRAHALLADA Variableenlacualalmacenaremoscadapalabraqueseidentifiqueeneltexto.

K Variableparacontarcuantaspalabrasdiferenteshayeneltexto.Lainicializamosen1.Eltotaldelaspalabrasdiferentesencontradasserák–1.

N Variablequeguardaelnúmerodecaractereseneltexto.

ALFABETO Esunahileraenviadacomoparámetros, lacualcontienelossímbolosconloscualesseconstruyenlaspalabras.

Nuestro

79 ALGORITMOS II INGENIERIA DE SISTEMAS

métodoeselsiguiente:

1. voidfrecuenciaPalabras(hileraalfabeto)

2. enteroi,k,j,p,n,frecuencia[1000]

3. hileracar,palabras[1000]

4. k=1

5. for(i=1;i<=1000;i++)do

6. frecuencia[i]=0

7. end(for)

8. n=longitud()

9. i=1

10. whilei<=ndo11. car=subHilera(i,1)12. p=alfabeto.posicion(car)13. while(i<nandp==0)do14. i=i+115. car=subHilera(i,1)16. p=alfabeto.posicion(car)17. end(while)18. j=i19. while(i<nandp!=0)do20. i=i+121. car=subHilera(i,1)22. p=alfabeto.posicion(car)23. end(while)24. palabraHallada=subHilera(j,i-j)25. palabras[k]=palabraHallada26. j=127. while(palabras[j]!=palabraHallada)do28. j=j+129. end(while)30. if(j==k)then31. frecuencia[k]=132. k=k+1

80 ALGORITMOS II INGENIERIA DE SISTEMAS

33. else34. frecuencia[j]=frecuencia[j]+135. end(if)36. end(while)37. k=k–138. for(i=1;i<=k;i++)do39. write(palabras[i],frecuencia[i])40. end(for)41. end(Método)

Enlainstrucción2y3sedefinenlasvariablesconlascualessevaatrabajar.

Enlasinstrucciones5a7seinicializanloscontadoresdepalabrasen0.

Enlasinstrucciones8sedeterminalalongituddeltextoaanalizar(elqueinvocoelmétodo).

Enlainstrucción9seinicializalavariableien1.Utilizamoslavariableipararecorrereltexto,carácterporcarácter,eiridentificandolasdiferentespalabrasenél.

Lasinstrucciones10a36conformanelcicloprincipaldelmétodo.

Enlasinstrucciones11a17seomitenloscaracteresquenoconformanunapalabravalida.Loscaracteresqueconformanunapalabravalidasonlosquepertenecenalalfabeto.Cadacarácterdeltextosebuscaenlahileraalfabeto(instrucciones12y16):sinoloencuentrasignificaquenoconformapalabrayporlotantosedesecha.Del ciclo de las instrucciones 13 a 17 se sale cuando encuentre un carácter que pertenezca al alfabeto. Estosignificaqueapartirdeesaposicióncomienzaunapalabra.Dichaposiciónlaguardaremosenunavariablequellamamosj(instrucción18).

Enelciclodelasinstrucciones19a23sedeterminanhastacualposiciónllegaunapalabradeesteciclosesalecuandoencuentreuncarácterquenopertenezcaalalfabeto;porconsiguiente,lapalabraserálasubhileradesdelaposiciónjhastalaposicióni–1,lacualextraeconlainstrucción24.

Enlainstrucción25sealmacenalapalabrahalladaenlaposiciónkdelvectorpalabras.Conelfindedeterminarsilapalabraalmacenadaenlaposiciónkdelvectoresprimeravezqueapareceoyaestaba,labuscamosenelvectordepalabras(instrucciones26a29)conlacertezadequelaencontraremos:siseencuentraenlaposiciónksignificaqueeslaprimeravezqueapareceyporlotantoleasignamos1alcontadordeesapalabra(instrucción31)eincrementamoslavariableken1;siencontrólapalabraenunaposicióndiferentealaposiciónksignificaquedichapalabrayasehabíaencontradoyporlotantoincrementamossurespectivocontadoren1(instrucciones34).

Por último, en las instrucciones 37 a 40 se describen las diferentes palabras encontradas con su respectivocontador.

Planteemosahoraunlogaritmoqueconsiderointeresante:reemplazarunapalabraporotraenuntextodado.

81 ALGORITMOS II INGENIERIA DE SISTEMAS

Utilizaremostresvariables:

VARIABLES CARACTERÍSTICAS

TEXTO Variable que contiene el texto donde hay que hacer el reemplazo.

VIEJA Variable que contiene la hilera que hay que reemplazar.

NUEVA Variable que contiene la hilera que reemplazara la hilera vieja.

Paraentendereldesarrollodeestemétododebemosentenderlosiguiente:sitenemosuntextoS=“aabcdabcde”yT=“abc”yejecutamoslainstrucción

m=S.Posición(T)

Lavariablemquedavaliendo2.Estosignificaqueapartirdelaposición2delahileraSseencontrólahileraT,esdecir,nuestrométodoretornaelsitiodondeencuentralaprimeraocurrenciadelahileraqueseestábuscando.FíjesequeennuestrahileraSlahilera“abc”sehallaenlaposición2yenla6.

Siejecutamoslasiguienteinstrucción(fíjesequeseestábuscandolahileraTapartirdelaposición5deS):

m=S.subHilera(5,6).posición(T)(formula1)

Lavariablemtambiénquedavaliendo2.¿Porqué?LarazónesquelahileraTlabuscaraenlahileraS.subHilera(5,6),lacuales:“babcde”.

Lapreguntaes:¿estárealmentelasegundaocurrenciadelahileraTenlaposición2deS?larespuestaesno.

Siplanteamosunautilizacióndelafunciónposicióncomoenlafórmula1yqueremosdeterminarencualposicióndeScomienzalasubhileraT,alresultadoobtenidohabráquesumarlei–1,siendoielprimerparámetrodelafunciónsubHilera.Ennuestrocasoi=5.

Llamemosposinilavariableapartirdelacualseinicialabúsquedadeunahileraenunasubhileraobtenidaconlafunciónsubhilera.

Nuestrométodoes:

1. voidreemplazarViejaPorNueva(hileravieja,hileranueva)

2. v=vieja.Longitud()

82 ALGORITMOS II INGENIERIA DE SISTEMAS

3. n=nueva.Longitud()

4. t=longitud()

5. posini=1

6. sw=1

7. while(sw==1)do

8. p=subHilera(posini,t–posini+1)

9. posvieja=p.posición(vieja)

10. if(posvieja>0)then

11. posreal=posvieja+posini–1

12. replace(posreal,v,nueva)

13. posini=posreal+n+1

14. t=longitud()

15. if(posini>t+v1)then

16. sw=0

17. end(if)

18. else

19. sw=0

20. end(if)

21. end(while)

22. end(Método)

83 ALGORITMOS II INGENIERIA DE SISTEMAS

4.4.2 EJERCICIOS ENTRENAMIENTO Pautasparadesarrollarlossiguientesejercicios:Paradesarrollarestosejerciciosdebetenerencuenta,todaslasfuncionesymétodosvistoseneltema.Recuerdaque,puedesutilizarunaestructuratipovectorounaestructuralistaligada;silorequiere,paradarsoluciónalosproblemas.

1. Elaboreunmétodoparadeterminarsiunahileradadaconstituyeunpalíndromoono.Unpalíndromoesuna

hileraqueseleeigualdeizquierdaaderechaquedederechaaizquierda;porejemplo:radar,reconocer,Abba.

Sumétododeberetornarverdaderosicumplelacondición,falsodelocontrario.

2. Elaboreunmétodoquedeterminesiunapalabratienemásvocalesqueconsonantesono.Sumétododebe

retornarverdaderosicumplelacondición;delocontrario,deberetornarfalso.

3. Elaboreunmétodoqueinviertatodosloscaracteresdeunahileradada.Porejemplo,silahileraes“amor”,al

ejecutarsumétododebequedarlahilera“roma”.

4. Elaboreunmétodoquedeterminesiunapalabra tiene las cincosvocalesono.Sumétododebe retornar

verdaderosicumplelacondición;delocontrario,deberetornarfalso.

84 ALGORITMOS II INGENIERIA DE SISTEMAS

5 UNIDAD 4 PILAS Y COLAS

Manipulacióndeinformación.Pilasycolas:Enlace

85 ALGORITMOS II INGENIERIA DE SISTEMAS

5.1.1 RELACIÓN DE CONCEPTOS

Pilas:Sonestructurasdedatosquesemanejandeformaestática,dondeserealiza lasoperacionesdeapilary

desapilar,manejandoelconceptodeúltimoenllegarprimeroensalir.

Vector:Enprogramaciónsedenominamatriz,vectoroformación(eninglésArray)aunazonadealmacenamiento

continuoquecontieneunaseriedeelementosdelmismotipo,loselementosdelamatriz.Desdeelpuntodevista

lógicounamatrizsepuedevercomounconjuntodeelementosordenadosenfila(ofilasycolumnassituviera

dos dimensiones).

Tomadode:https://es.wikipedia.org/wiki/Vector_(inform%C3%A1tica)

Listasligadas:Laslistasligadassonunamejoralternativaparaañadirinformaciónaunabasededatos;enlugar

deutilizararreglosquesonestáticospueshayquereservarmemoriaalahoradeprogramarlos,contrarioalas

listasligadasqueenunprincipionoocupanmemoriaysevareservando(creando)conformelovarequiriendo

nuestro programa. Lamemoria que ya no se utiliza se puede destruir y así ahorramosmemoria en nuestros

programas.

Tomadode:http://sergioaj.blogspot.com.co/2011/01/listas-ligadas.html

Crear:Creaunapilavacía.

Apilar:Incluyeeldatodenlapila.

86 ALGORITMOS II INGENIERIA DE SISTEMAS

Desapilar:Eliminaelúltimoelementodelapilaydejaunanuevapila,lacualquedaconunelementomenos.

Cima: Retornaeldatoqueestadeúltimoenlapila,sineliminarlo.

esVacía:Retornaverdaderosilapilaestávacía:delocontrario;retornafalso.

esLlena:Retornaverdaderosilapilaestállena;delocontrario;retornafalso.

Cola:Sonestructurasdealmacenamientodedatos,dondesemanejadeformaestática,dondelaoperaciónde

inserciónsehacealfinalylasdeborradosehacealprincipio,enotraspalabras,elprimeroquellegaeselprimero

ensalir,yelúltimoenllegarseráelúltimoensalir

Crear:Creaunacolavacía.

esVacía:Retornaverdaderosilacolaestávacía;delocontrario,retornafalso.

esLlena:Retornaverdaderosilacolaestállena;delocontrario,retornafalso.

Encolar:Insertaundatodalfinaldelacola.

Desencolar:Remueveelprimerelementodelacola.

Siguiente:Retornaeldatoquesehalladeprimeroenlacola.

5.2 TEMA 1 DEFINICIÓN Sonestructurasdedatosquenotienenrepresentaciónpropiaaniveldeprogramación,paraelloseapoyanenlosvectoresyenlistasligadas,permitiendoasímanejaroperacionessobreellas.

5.3 TEMA 2 PILAS CON VECTORES Y LISTAS Las pilas como vectores son estructuras de datos que se manejan de forma estática, donde se realiza lasoperacionesdeapilarydesapilar,manejandoelconceptodeúltimoenllegarprimeroensalir.Laspilascomolistasonestructurasdedatos,perosemanejadeformadinámicaenlamemoria.

87 ALGORITMOS II INGENIERIA DE SISTEMAS

5.3.1 DEFINICIÓN Una pila es una lista ordenada en la cual todas las operaciones (inserción y borrado) se efectúan en un soloextremollamadotope.EsunaestructuraLIFO(LastInputFirstOutput),quesonlasinicialesdelaspalabraseninglés“ultimoenentrarprimeroensalir”,debidoaquelosdatosalmacenadosenellaseretiranenordeninversoalquefueronentrados.

Unejemploclásicodeaplicacióndepilasencomputadoresserepresentaenelprocesodellamadasamétodosysusretornos.

Supongamosquetenemosunprogramaprincipalytresmétodos,así:

Cuandoseejecutaelprogramaprincipal,sehaceunallamadaalmétodoP1,esdecir,ocurreunainterrupciónenlaejecucióndelprogramaprincipal.Antesde iniciar laejecucióndeestemétodoseguarda ladirecciónde lainstruccióndondedeberetornaracontinuarlaejecucióndelprogramaprincipalcuandoterminedeejecutarelmétodo; llamamosL1estadirección.CuandoejecutaelmétodoP1existeuna llamadaalmétodoP2,hayunanueva interrupción,peroantesdeejecutarP2 seguarda ladirecciónde la instruccióndondedebe retornaracontinuarlaejecucióndelmétodoP1,cuandoterminedeejecutarelmétodoP2;llamamosL2estadirección.

Hastaelmomentohayguardadosdosdireccionesderetorno:

L1,L2

CuandoejecutaelmétodoP2hayllamadaaunmétodoP3,locualimplicaunanuevainterrupcióny,porende,guardarunadirecciónderetornoalmétodoP2,lacualllamamosL3.

Tenemosentoncestresdireccionesguardadas,así:

L1,L2,L3

88 ALGORITMOS II INGENIERIA DE SISTEMAS

AlterminarlaejecucióndelmétodoP3retornaacontinuarejecutandoenlaúltimadirecciónqueguardo,esdecir,extraeladirecciónL3yregresaacontinuarejecutandoelmétodoP2endichainstrucción.Losdatosguardadosyason:

L1,L2

AlterminarelmétodoP2extraelaúltimadirecciónquetieneguardada,enestecasoL2,yretornaaestadirecciónacontinuarlaejecucióndelmétodoP1.

Enestemomentolosdatosguardadosson:

L1

AlterminarlaejecucióndelmétodoP1retornaraaladirecciónquetieneguardada,oseaaL1.

Obsérveseque losdatos fueronprocesadosenorden inversoalque fueronalmacenados, esdecir, últimoenentrarprimeroensalir.EnestaformadeprocesamientolaquedefineunaestructuraPILA.

Veamoscualessonlasoperacionesquedefiniremosparalaclasepila.

OPERACIONES CARACTERÍSTICAS

CREAR Creaunapilavacía.

APILAR Incluyeeldatodenlapila.

DESAPILAR Eliminaelúltimoelementodelapilaydejaunanuevapila,lacualquedaconunelementomenos.

CIMA Retornaeldatoqueestadeúltimoenlapila,sineliminarlo.

ESVACIA Retornaverdaderosilapilaestávacía:delocontrario;retornafalso.

ESLLENA Retornaverdaderosilapilaestállena;delocontrario;retornafalso.

89 ALGORITMOS II INGENIERIA DE SISTEMAS

5.3.2 REPRESENTACIÓN DE PILAS EN UN VECTOR Laformamássimpleesutilizarunarreglodeunadimensiónyunavariable,quellamaremostope,queindiquelaposicióndelarregloenlacualsehallaelúltimoelementodelapila.Porconsiguiente,vamosadefinirlaclasepiladerivadade la clase vector. La variablemdenuestra clase vector funciona coma la variable tope.Definamosentonceslaclasepila.

1. CLASEPila

2. Privado:

3. ObjectV[]

4. Enterotope,n

5. Publico:

6. pila(enterom)//constructor

7. booleanesVacía()

8. booleanesLlena()

9. voidapilar(objetod)

10. objetdesapilar()

11. voiddesapilar(enteroi)

12. objetotope()

13. end(Clase)

Comohemosdefinidolaclasepiladerivadadelaclasevector,veamoscomosonlosalgoritmoscorrespondientesaestosmétodos:

1. pila(enterom)//constructor

2. V=newArray[m]

3. n=m

4. Tope=0

5. end(pila)

90 ALGORITMOS II INGENIERIA DE SISTEMAS

1. booleanesVacía()

2. returntope==0

3. end(esVacía)

1. booleanesLlena()

2. returntope==n

3. end(esLlena)

1. voidApilar(objetod)

2. if(esLlena())then

3. write(“pilallena”)

4. return

5. end(if)

6. tope=tope+1

7. V[tope]=d

8. end(Método)

Apilarconsistesimplementeensumarle1atopeyllevareldatoaesaposicióndelvector:

1. objetodesapilar()

2. if(esVacía())then

3. write(“pilavacía”)

4. returnnull

5. end(if)

6. d=V[tope]

7. tope=tope-1

8. returnd

9. end(desapilar)

Estrictamentehablando,desapilarconsistesimplementeeneliminareldatoquesehallaeneltopedelapila.Sinembargo,esusualeliminarloyretornarlo.Esoesloquehacenuestroanteriormétodoparadesapilar.Elprocesodeeliminaciónconsistesimplementeenrestarle1atope.Definamos,enformapolimórfica,otrométodopara

91 ALGORITMOS II INGENIERIA DE SISTEMAS

desapilar.Estenuevométodotendráunparámetroi,elcualindicaracuantoselementossedebeneliminardelapila:

1. voidDesapilar(enteroi)

2. if((tope–1)>=0)then

3. tope=tope–i

4. else

5. write(“nosepuedeneliminartantoselementos”)

6. end(if)

7. end(Método)

1. Objetocima()

2. if(esVacía())then

3. write(“pilavacía”)

4. returnnull

5. end(if)

6. returnV[tope]

7. end(cima)

5.3.3 REPRESENTACIÓN DE PILAS COMO LISTAS LIGADAS PararepresentarunapilacomolistasligadasbastadefinirlaclasepiladerivadadelaclaseLSL.Nuevamente,comoestamosdefiniendolaclasepiladerivadadelaclase.LSL,podremoshacerusodetodoslosmétodosquehemosdefinidoparaestaclaseLSL.Amododeejemplo,representemoscomolistasligadaslasiguientepila:

D

C

B

A

Pila

92 ALGORITMOS II INGENIERIA DE SISTEMAS

Dibujémosladelaformacomosolemoshacerloconlaslistasligadas:

Comohemosdicholasoperacionessobreunapilasonapilarydesapilar:

apilar:consisteeninsertarunregistroalprincipiodeunalistaligada desapilar:consisteeneliminarelprimernododelalistaligadayretornareldatoquesehallabaenesenodo.

AldefinirlaclasepiladerivadadelaclaseLSLelmétodoparacontrolarpilallenayanoseutiliza.Elmétodoparalaclasepilason:

1. void Apilar (objeto d) 2. insertar (d, null) 3. end(Método)

1. Objeto desapilar () 2. If (es Vacía ()) then 3. Write(“pila vacia, no se puede desapilar”) 4. Return null 5. End(if) 6. nodoSimple p 7. p = primerNodo () 8. d = p. retornaDato () 9. borrar (p, null) 10. return d 11. end(desapilar)

Fíjesequeenlosmétodosapilarydesapilarhemosusadolosmétodosinsertaryborrar,loscualesfuerondefinidosparalaclaseLSL:

1. Objeto tope () 2. if (es Vacía ()) then

93 ALGORITMOS II INGENIERIA DE SISTEMAS

3. write (“pila vacía, no hay elemento para mostrar”) 4. return null 5. end(if) 6. nodoSimple p 7. p = primerNodo () 8. return p. retornaDato 9. end(tope)

5.3.4 MANEJO DE DOS PILAS EN UN VECTOR Puestoqueesmuyfrecuentetenerquemanejarmásdeunapilaenmuchassituaciones,veremoscómomanejardospilasenunsolovector.Sineselnúmerodeelementosdelvector,dividimosinicialmenteelvectorendospartesiguales.Llamamosmlavariablequeapuntahaciaelelementodelamitad.

Laprimeramitaddelvectorseráparamanejarlapila1,ylasegundamitadparamanejarlapila2.

Cadapilarequiereunavariabletopeparaconocerenquéposiciónestáelultimodadodelapila.Llamemosestasvariablestopes1ytope2paramanejarlaspilas1y2,respectivamente.

Consideremoselsiguienteejemplo:

SeaVelvectorenelcualmanejaremoslasdospilas.Elvalordenes16.Inicialmente,elvalordemes8(lamitadden):

Lavariabletope1variarade1hastam

Lavariabletope2variaradesdem+1hastan

Lapila1estarávacíacuandotope1seaiguala0

Lapila1estarállenacuandotope1seaigualam

Lapila2estarávacíacuandotope2seaigualam

Lapila2estarállenacuandotope2seaigualan

94 ALGORITMOS II INGENIERIA DE SISTEMAS

SidefinimosunaclasedenominadadosPilascuyosdatosprivadossonelvectorV,m,n,tope1ytope2,veamoscómoseránlosmétodosparamanipulardichaclase.

Consideremosprimerounmétodoparaapilarundatoenalgunadelasdospilas.Habráqueespecificarencualpilaesquesedeseaapilar.Paraelloutilizaremosunavariablellamadapila,lacualenviamoscomoparámetrodelmétodo.Sipilaesiguala1hayqueapilarenpila1,ysipilaesiguala2,hayqueapilarenpila2.Nuestrométodoserá:

1. voidApilar(enteropila,objetod)

2. If(pila==1)then

3. If(tope==m)then

4. pilaLlena(pila)

5. end(if)

6. tope1=tope1+1

7. V[tope]=d

8. else

9. If(tope2==n)then

10. pilaLlena(pila)11. end(if)12. tope2=tope2+113. V[tope2]=d14. end(if)15. end(Método)

ElmétodopilaLlenarecibecomoparámetroelvalorpila.

LatareadepilaLlenaes:sielparámetropilaes1significaquelapila1eslaqueestállena,yporlotantobuscaraespacioenlapila2;encasodequeestanoesté llena,semoveránlosdatosde lapila2unaposiciónhacia laderecha,seactualizaramyseregresaraalmétodoapilarparaapilarenlapila1.Sieslapila2laqueestállenabuscarasihayespacioenlapila1,yencasodehaberlomoverálosdatosdelapila2unaposiciónhacialaizquierda,actualizaramyregresaraaapilarenlapila2.Unmétodoqueefectuéestatareaes:

1. void PilaLlena (entero pila) 2. entero i 3. if (pila == 1) then 4. if (tope2 < n) then //hay espacio en la pila 2 5. for (i = tope2; i > m; i--) do 6. V [i + 1] =V[i] 7. end(for)

95 ALGORITMOS II INGENIERIA DE SISTEMAS

8. tope2 = tope2 + 1 9. m = m + 1 10. end(if) 11. else 12. if (tope1 < m) then 13. for (i = m; i < tope2; i++) do 14. V [i - 1] = V[i] 15. end(for) 16. tope2 = tope2 – 1 17. m = m – 1 18. end(if) 19. end(if) 20. write (“pilas llenas”) 21. stop 22. end(Método)

Comosepodráobservar, laoperacióndeapilar implicamoverdatosenelvectordebidoaqueunapilapuedecrecermásrápidoquelaotra.Enotraspalabras,estemétodotieneordendemagnitudlineal,elcualseconsideraineficiente.Unamejoralternativadediseñoeslasiguiente:

La pila 1 se llenará de izquierda a derecha y la pila 2 de derecha a izquierda. Con este diseño no hay quepreocuparseporcualpilacrezcamásrápido.Lascondicionesacontrolarson:

Lapila1estarávacíacuantotope1seaigualacero

Lapila2estarávacíacuandotope2seaigualan+1(n=16)

Laspilasestaránllenascuandotope1+1seaigualatope2

Elmétodoapilarparaestesegundodiseñoes:

1. voidApilar(enteropila,objetod)

2. if(tope1+1==tope2)then

3. pilaLlena

4. end(if)

96 ALGORITMOS II INGENIERIA DE SISTEMAS

5. if(pila==1)then

6. tope1=tope1+1

7. V[tope]=d

8. end(if)

9. end(Método)

Comopodráobservar,conestediseñoelprocesoparapilallenanoaparece;porlotanto,nohayquemoverlosdatosdelvectorynuestrométodoparaapilartieneordendemagnitudconstante

5.4 TEMA 3 COLAS CON VECTORES Y LISTAS Lascolascomovectoressonestructurasdealmacenamientodedatos,dondesemanejadeformaestática,dondelasoperacionesdeinserciónsehacealfinalylasdeborradosehacealprincipio,enotraspalabraselprimeroquellegaeselprimeroensalir,yelúltimoenllegarseráelúltimoensalir,deigualformasemanejaconlaslistasperodeformadinámica.

5.4.1 DEFINICIÓN Unacolaesunalistaordenadaenlacuallasoperacionesdeinserciónseefectúanenunextremollamadoúltimoylasoperacionesdeborradoseefectúanenelotroextremollamadoprimero.EsunaestructuraFIFO(FirstInputFirstOutput).

Entérminosprácticos,es loquesupuestamentesedebehacerparatomarunbus,paracomprar lasboletasyentraracineoparahacerusodeunserviciopúblico.Lasoperacionessobreunacolason:

97 ALGORITMOS II INGENIERIA DE SISTEMAS

OPERACIONES CARACTERÍSTICAS

Crear Creaunacolavacía.

esVacía() retornaverdaderosilacolaestávacía;delocontrario,retornafalso

esLlena() Retornaverdaderosilacolaestállena;delocontrario,retornafalso.

Encolar(d) Insertaundatodalfinaldelacola.

Desencolar() remueveelprimerelementodelacola

Siguiente() Retornaeldatoquesehalladeprimeroenlacola.

5.4.2 REPRESENTACIÓN DE COLAS EN UN VECTOR, EN FORMA NO CIRCULAR

Para representar colas en esta forma se requiere un vector, que llamaremos V, y dos variables: una quellamaremosprimero,lacualindicalaposicióndelvectorenlaquesehallaelprimerdatodelacola,yotra,quellamaremosúltimo,queindicalaposiciónenlacualsehallaelúltimodatodelacola.

EnelvectorVseguardanlosdatos;primeroapuntarahacialaposiciónanteriorenlacualsehallarealmenteelprimerdatodelacola,yultimoapuntarahacialaposiciónenlaquerealmentesehallaelúltimodatodelacola.

Sitenemosunvectorconlasiguienteconfiguración:

Lavariableprimerovaldrá2indicandoqueelprimerelementodelacolasehallaenlaposición3delvector;lavariableultimovaldrá5indicandoqueelúltimoelementodelacolasehallaenlaposición5delvector.

98 ALGORITMOS II INGENIERIA DE SISTEMAS

Lasoperacionessobrelacola,quesonencolarydesencolar,funcionandelasiguienteforma:sisedeseaencolarbastaconincrementarlavariableúltimaen1yllevaralaposiciónultimodelvectoreldatoaencolar;sisedeseadesencolarbastaconincrementarenunolavariableprimeroyretornareldatoquesehallaenesaposición.

Engeneral,sielvectorVsehadefinidoconnelementos,cuandolavariableúltimaseannsepodríapensarquelacolaestállena:

Pero,comoseobservaen la figura,el vector tieneespacioalprincipio;porconsiguiente,podemospensarenmoverlosdatoshaciaelextremoizquierdoyactualizarprimeroyultimoparaluegoencolar.Esdecir,elhechodequeelultimoseaigualannoessuficienteparadeterminarquelacolaestállena.Paraquelacolaestállenasedebencumplircondoscondiciones:queprimeroseaiguala0yultimoseaigualan.

Consideremosahoraoperacionessucesivasdedesencoleparaelejemplodado:despuésdeejecutarlaprimeraoperacióndedesencolelosvaloresdelasvariablesultimoyprimeroydelvectorVseránlossiguientes:

Dondelavariableprimerovaldrá3ylavariableultimo5

Aldesencolarnuevamente,laconfiguracióndelvectorserá:

Dondelavariableprimerovale4ylavariableultimo5.

Sidesencolamosdenuevo,laconfiguracióndelvectorserá:

99 ALGORITMOS II INGENIERIA DE SISTEMAS

Ylavariableprimerovale5ylavariableultimo5.

Enotraspalabras;primeroesigualaultimoylacolaestávacía,oseaquelacondicióndelacolavacíaseráprimero==ultimo.Teniendodefinidaslascondicionesdelacolallenaycolavacíaprocedamosadefinirlaclasecola:

1. CLASECola

2. Privado3. Enteroprimero,n4. ObjetoV[]5. Publico6. Cola(n)//constructor7. booleanesVacía()8. booleanesLlena()9. voidencolar(objetod)10. Objetodesencolar()11. Objetosiguiente()12. end(Clase)

1. Cola(enterom)2. n=m3. primero=ultimo=04. V=newobjeto[n]5. end(cola)

1. BooleanesVacía()2. Returnprimero==ultimo3. end(esVacía)1. BooleanesLlena()2. returnprimero==0andultimo==n3. end(esLlena)1. voidencolar(objetod)2. if(esLlena())then3. write(“colallena”)4. return5. end(if)6. If(ultimo==n)then7. for(i=primero+1;i<=n;i++)

100 ALGORITMOS II INGENIERIA DE SISTEMAS

8. V[I-primero]=V[i]9. end(for)10. ultimo=ultimo–primero11. primero=012. end(if)13. ultimo=ultimo+114. V[ultimo]=d15. end(Método)

1. objetodesencolar()2. If(esVacía())then3. write(“colavacía”)4. returnnull5. end(if)6. primero=primero+17. returnV[primero]8. end(desencolar)

Siconsideramosunasituacióncomolasiguiente:

nvale7,últimovale6yprimerovale1.

Sisedeseaencolareldatohyaplicamoselmétodoencolardefinido,laacciónqueefectúadichométodoesmoverloselementosdesdelaposición1hastala6,unaposiciónhacialaizquierdadetalformaquequedeespacioenelvectorparaincluirlahenlacola.Elvectorquedaraasí:

Conprimerovaliendo-1yultimovaliendo5.Deestaformacontinualaejecucióndelmétodoencolaryseincluyeeldatohenlaposición6delvector.Elvectorquedaasí:

Conprimerovaliendo-1yultimovaliendo6.

Sienestemomentosedesencola,elvectorquedaasí:

101 ALGORITMOS II INGENIERIA DE SISTEMAS

Conprimerovaliendo0yultimovaliendo6.

Silasituaciónanteriorserepitesucesivasveces,queseríaelpeordeloscasos,cadavezquesevayaaencolarsetendríaquemovern-1elementosdelvector,locualharíaineficienteelmanejodelacolayaqueelprocesodeencolartendríaordendemagnitudO(n).ParaobviaresteproblemaypoderefectuarlosmétodosdeencolarydesencolarenuntiempoO(1)manejaremoselvectorcircularmente.

5.4.3 REPRESENTACIÓN DE COLAS CIRCULARES EN UN VECTOR

Paramanejarunacolacircularmenteenunvectorserequieredefinirunvectordenelementosconlossubíndicesenelrangodesde0hastan-1,esdecir,sielvectortiene10elementoslossubíndicesvariarandesde0hasta9,yelincrementodelasvariablesprimeroyúltimosehaceutilizandolaoperaciónmodulo(%)delasiguientemanera:

Primero=(primero+1)%n

Ultimo=(ultimo+1)%n

Recuerdequelaoperaciónmodulo(%)retornaelresiduodeunadivisiónentera.Sisetieneunacolaenunvector,conlasiguienteconfiguración:

nvale7,lossubíndicesvaríandesde0hasta6,primerovale2yultimovale4.

Sisedeseaencolareldatodincrementamoslavariableúltimautilizandolaoperaciónmodulo,así:

Ultimo=(ultimo+1)%n

Osea,ultimo=(4+1)%7,lacualasignaraaultimoelresiduodedividir5por7,quees5.

Elvectorquedaasí:

102 ALGORITMOS II INGENIERIA DE SISTEMAS

Alencolareldatoeelvectorquedaasí:

Y las variables: primera y última valdrán 2 y 6 respectivamente. Al encolar de nuevo el dato f, aplicamos el operador % y obtenemos el siguiente resultado:

Ultimo = (6 + 1) % 7

El cual es 0, ya que el residuo de dividir 7 por 7 es 0. Por consiguiente, la posición del vector a la cual se llevará el dato f es la posición 0. El vector quedara con la siguiente conformación:

Conultimovaliendo0yprimero2.Deesta formahemospodidoencolarenelvectorsinnecesidaddemoverelementosenél.

Losmétodosparaencolarydesencolarquedanasí:

1. voidencolar(objetod)

2. Ultimo=(ultimo+1)%n

3. if(ultimo==primero)then

4. colaLlena()

5. end(if)

6. V[ultimo]=d

7. end(Método)

103 ALGORITMOS II INGENIERIA DE SISTEMAS

1. objetodesencolar()

2. if(primero==ultimo)then

3. colaVacía

4. end(if)

5. primero=(primero+1)%n

6. d=V[primero]

7. end(desencolar)

Esimportantenotarquelacondicióndecolallenaycolavacíaeslamisma,conladiferenciadequeenelmétodoencolar se chequea la condición después de incrementar último. Si la condición resulta verdadera invoca elmétodocola Llena, cuya función serádejarúltimoconel valorque teníaantesde incrementarlaydetenerelproceso,yaquenosepuedeencolar.Porconsiguiente,habráunaposicióndelvectorquenoseutilizará,peroquefacilitaelmanejodelascondicionesdecolavacíaycolallena.

5.4.4 REPRESENTACIÓN DE COLAS COMO LISTAS LIGADAS DefinimoslacolacomoderivadadelaclaseLSL:

Encolar:consisteeninsertarunregistroalfinaldeunalistaligada:

1. voidencolar(objetod)

2. Insertar(d,ultimoNodo())

3. end(Método)

104 ALGORITMOS II INGENIERIA DE SISTEMAS

Desencolar:consisteenborrarelprimerregistrodeunalistaligada(exactoadesapilar).Habráquecontrolarsilacolaestáonovacía

1. Objetodesencolar(primero,ultimo,d)

2. if(esVacía())then

3. write(“colavacia,nosepuededesencolar”)

4. Returnnull

5. end(if)

6. nodoSimplep

7. p=primerNodo()

8. d=p.retornaDato()

9. borrar(p,null)

10. returnd

11. end(desencolar)

5.5 EJERCICIOS DE ENTRENAMIENTO Pautasparadesarrollarlossiguientesejercicios:Paradesarrollarestosejercicios,debestenerclarolasoperacionesquesepuedenrealizarenunapila,ylasoperacionesquesepuedenrealizarenunacola.

1. Escribaunmétodoqueinserteunelementoenunapila.Consideretodosloscasosquepuedanpresentarse.

2. Escribaunmétodoqueelimineunelementodeunapila.Consideretodosloscasosquepuedanpresentarse.

3. Escriba unmétodo que inserte un elemento en una cola circular. Considere todos los casos que puedan

presentarse.

4. Escriba unmétodoque elimine un elemento de una cola circular. Considere todos los casos que puedan

presentarse.

105 ALGORITMOS II INGENIERIA DE SISTEMAS

Utiliceunaestructuradecolaparasimularelmovimientodeclientesenunacoladeesperadeunbanco(puedeauxiliarseconlos métodos utilizados que están planteados en los ejercicios 3 y 4).

106 ALGORITMOS II INGENIERIA DE SISTEMAS

6 PISTAS DE APRENDIZAJE Recuerdeque,alahoradeintercambiardatosdentrodeunvectorderegistro,primerodebeguardarelcontenido

enunaceldaadentrodeunavariableauxiliar,paranoperderloquehayena;luegoalaceldaalellevaloque

tienelaceldab;yporúltimo,alaceldablellevaloqueguardóenlavariableauxiliar.Así,porejemplo:

aux=vec[i]vec[i]=vec[k]vec[k]=aux

Recuerdequelosparámetrosporreferenciasonaquellasvariablesquesemodificarándentrodelosmétodosy

volveránalprogramaprincipalconsuvalormodificado.

Recuerdequelainformaciónqueseguardaenarchivos,esunainformaciónquepermaneceeneltiempo.

Noolvidequelosarchivossedebendeabrirytambiénsedebencerrar.

Tengaencuentalossiguientespuntosenelmanejodinámicodememoria:

ElpunteroesunadireccióndememoriaenlaRAM.

Unnodoesunespaciodememoria.

Unnodosimple,estácompuestoporunapartededatoyotrapartedeliga.

Recuerdequealpedirunnodosehaceconlainstrucciónnew(x)yparaliberarelespaciodememoriasehacecon

free(x).

Noolvidequelaspilasylascolas,notienenrepresentaciónpropiaaniveldeprogramación,queparahacerlose

apoyanenvectoresylistasligadas.

Tengaencuentaquecuandosebuscaelcontadordefrecuenciasdeunalgoritmo,yenéstehayunainstrucción

queseejecutan*nveces,lorepresentamoscomon2;ysiexisteunainstrucciónqueseejecutan*n*nveces,ésta

instrucciónlarepresentamoscomon3.

Recuerdeque,enlamultiplicación,tener2*neslomismoquetener2n.

Igualmente,conloslogaritmos:n*log2neslomismoquenlog2n.

107 ALGORITMOS II INGENIERIA DE SISTEMAS

7 GLOSARIO Factorial:Sellamafactorialdenalproductodetodoslosnúmerosnaturalesdesde1hastan.

Frecuencia:Repeticiónmayoromenordeunactoodeunsuceso.

Parámetro:Variableque,enunafamiliadeelementos,sirveparaidentificarcadaunodeellosmediantesuvalor

numérico

Void:Significavacío,estoindicaquelafunciónnodevuelvenadasinoquerealizaciertasacciones.

Pila:conjuntodeunoomáselementosqueseapilan.

Nodosimple:espaciodememoriaquetieneunadirecciónyqueseencuentradivididoendospartes,unaparte

dedatoyunapartedeliga.

Nododoble:espaciodememoriaquetieneunadirecciónyqueseencuentradivididoentrespartesunapartede

ligaizquierda,unapartedeligaderechayunapartededatos.

Evaluaciónapriori:consisteenmedirlaeficienciadeunalgoritmoantesdedecodificarseenalgúnlenguaje

108 ALGORITMOS II INGENIERIA DE SISTEMAS

8 BIBLIOGRAFÍA Joyanes Aguilar, L. (1996). Fundamentos de programación: Algoritmos y estructura de datos. McGrawHill/InteramericanadeEspañaS.A.

OviedoRegino,E.M.(2015).Lógicadeprogramaciónorientadaaobjeto,primeraedición.ECOEediciones:Bogotá.VillalobosS.,J.A.,&CasallasG.,R.(2006).Fundamentosdeprogramación,aprendizajeactivobasadoencasosprimeraedición.Bogotá:PearsoneducacióndeMéxicoS.A.deC.V.Cairo,O.,&GuardatiBuemo,S.(1998).Estructurasdedatos.McGraw-HillInteramericanodeMéxicoS.A.RobertoFlórezRueda.(2010).AlgoritmiaII,primeraedición.MedellínColombia.

Programación en Castellano. (s.f.). Recuperado el 9 de Junio de 2011, dehttp://www.programacion.com/articulo/introduccion_a_la_programacion_205/7

Universidad Nacional de Colombia sede Bogotá. (s.f.). Recuperado el 8 de Abril de 2011, dehttp://www.virtual.unal.edu.co/cursos/ingenieria/2001839/docs_curso/contenido.htmlCanaria,D.d.(s.f.).GrupodeEstructurasdeDatosyLingüísticaComputacional.Recuperadoel6deJuniode2011,dehttp://www.gedlc.ulpgc.es/docencia/NGA/subprogramas.html

Granada,U.d.(s.f.).www.ugr.es.Recuperadoel9deJuniode2011,dehttp://elvex.ugr.es/decsai/c/apuntes/vectores.pdf

TECNOLÓGICO.(s.f.).Obtenidodehttp://www.mitecnologico.com/:http://www.mitecnologico.com/Main/ArreglosVectoresYMatrices

Universidad Tecnológica de Pereira. (s.f.). Recuperado el 6 de Junio de 2011, dehttp://www.utp.edu.co/~chami17/sn.htm

Vieyra,G.E.(31deAgostode2000).FacultaddeCienciasFísico-MatemáticasUMSNH.Recuperadoel8deJuniode2011,dehttp://www.fismat.umich.mx/~elizalde/curso/node110.html

Wikipedia.(s.f.).Recuperadoel8deJuniode2011,dehttp://es.wikipedia.org/wiki/Sistema_de_numeraci%C3%B3n