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.
[email protected]: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ó[email protected]
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
Top Related