temas sis2204(2)

Upload: marcelo-quiroz-alcocer

Post on 09-Apr-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/8/2019 TEMAS SIS2204(2)

    1/129

    UNIVERSIDAD TECNICA DE ORUROFACULTAD NACIONAL DE INGENIERIA

    INGENIERIA DE SISTEMAS E INFORMATICA

    TEXTO GUIA:

    ESTRUCTURA DE DATOS

    SIS2204

    Docente: Ing. Juan Gregorio Choque UoFecha de Realizacin: Marzo del 2008

    Oruro - Bolivia

    1

  • 8/8/2019 TEMAS SIS2204(2)

    2/129

    2

  • 8/8/2019 TEMAS SIS2204(2)

    3/129

    CONTENIDO

    INTRODUCCION ........................................................................................................................ 6

    1.1 ESTRUCTURA DE DATOS. ............................................................................................................................................6

    1.2 OPERACIONES SOBRE ESTRUCTURAS DE DATOS. .............................................................................................9

    PILAS Y COLAS .......................................................................................................................10

    2.1 PILAS. ...............................................................................................................................................................................10

    .................................................................................................................................................................................................. 16

    2.2 COLAS. .............................................................................................................................................................................17

    2.3 COLAS CIRCULARES. ..................................................................................................................................................19ELIMINAR EL NODO DELANTERO DE LA COLA .......................................................................................................20

    2.4 APLICACIONES DE LISTAS RESTRINGIDAS. .......................................................................................................22

    ARCHIVOS, REGISTROS Y CAMPOS ....................................................................................26

    3.1 ARCHIVOS ......................................................................................................................................................................26

    3.2 TIPOS DE ARCHIVOS. ..................................................................................................................................................26

    3.3 REGISTROS Y CAMPOS. .............................................................................................................................................28

    TRATAMIENTO DE ARCHIVOS ..............................................................................................30

    4.1 INTRODUCCION ............................................................................................................................................................30

    4.2 OPERACIONES SOBRE ARCHIVOS .........................................................................................................................30ADICION DE DATOS ........................................................................................................................................................31ELIMINAR DATOS ...........................................................................................................................................................32CONSULTAS DE DATOS .................................................................................................................................................33BUSQUEDA DE DATOS ...................................................................................................................................................34

    4.3 PARTICION DE ARCHIVOS ........................................................................................................................................35PARTICION POR CONTENIDO .......................................................................................................................................36PARTICION POR UNA SECUENCIA " P " DADA .........................................................................................................36PARTICIN DE ARCHIVOS POR TRAMOS ORDENADOS ........................................................................................37

    4.4 MEZCLAS DE ARCHIVOS ...........................................................................................................................................38MEZCLA POR CONTENIDO TOTAL .............................................................................................................................39MEZCLA POR SECUENCIAS " P " ..................................................................................................................................39MEZCLA POR TRAMOS ORDENADAS .........................................................................................................................41

    4.5 ORDENACIN EXTERNA ...........................................................................................................................................42ORDENACIN POR MEZCLA DIRECTA ......................................................................................................................42ORDENACIN POR VON NEWMAN .............................................................................................................................45ORDENACIN POR MEZCLA EQUILIBRADA ............................................................................................................47ORDENACIN POR DIGITOS .........................................................................................................................................49

    3

  • 8/8/2019 TEMAS SIS2204(2)

    4/129

  • 8/8/2019 TEMAS SIS2204(2)

    5/129

    RBOLES BINARIOS DE EXPRESIONES ............................................................................................................. ...... ..113

    GRAFOS .................................................................................................................................115

    7.1 DEFINICIONES. ............................................................................................................................................................115

    7.2 ALMACENAMIENTO DE UN GRAFO EN MEMORIA. ........................................................................................122

    7.3 APLICACIONES. ..........................................................................................................................................................126

    5

  • 8/8/2019 TEMAS SIS2204(2)

    6/129

    TEMA 1

    INTRODUCCION

    OBJETIVOS

    Conceptuar las diferentes etapas por las que atraviesa el procesamiento de datos desde la abstraccin delos mismos hasta la obtencin de los resultados en la computadora.

    CONTENIDO

    1.1 Estructura de Datos1.2 Operaciones Sobre Estructuras de Datos

    1.1 ESTRUCTURA DE DATOS.

    Estructuras de datos y tipos de datos abstractos (TDA)Un tipo de datos es una coleccin de valoresUn tipo de datos abstracto (TDA) es un tipo de datos definido de forma nica mediante un tipo y unconjunto dado de operaciones definidas sobre el tipo.Una estructura de datos es la implementacin fsica de un tipo de datos abstracto.Debido al proceso de abstraccin, el diseo deber realizarse siguiendo tres pasos fundamentales:

    1.- Anlisis de datos y operaciones2.- Eleccin del Tipo de Datos Abstracto3.- Eleccin de la implementacin

    Tipos de datos bsicos

    TDA Entero: tiene como tipo el conjunto de nmeros enteros, y como operaciones la suma, resta,multiplicacin y divisin enteraTDA Real: tiene como tipo el conjunto de nmeros reales y como operaciones la suma, restamultiplicacin y divisinTDA Booleano: tiene como tipo el conjunto de valores booleanos True, False y como operaciones lasdefinidas en el lgebra de Boole (AND, OR, NOT)TDA Carcter: tiene como tipo el conjunto de caracteres definido por un alfabeto dado y comooperaciones todos los operadores relacionales (, =, >=,

  • 8/8/2019 TEMAS SIS2204(2)

    7/129

    Otro tipo de datos son los denominados compuestos, dado que son divisibles en componentes que pueden ser accedidas individualmente. Las operaciones asociadas a los tipos compuestos oestructurados son las de almacenar y recuperar sus componentes individuales.

    Los TDA compuestos bsicos:

    TDA Conjunto: coleccin de elementos tratados con las operaciones unin, interseccin y diferenciade conjuntos.TDA Arreglo: coleccin homognea de longitud fija tal que cada una de sus componentes pueden seraccedidas individualmente mediante uno o varios ndices, que sern de tipo ordinal, y que indican laposicin de la componente dentro de la coleccin.TDA Registro: tipo de datos heterogneo compuesto por un nmero fijo de componentes denominadascampos a las que se accede mediante un selector de campo.El TDA Conjunto no es estructurado ya que no est organizado mediante el modo de acceso a suscomponentes individuales, mientras que el Arreglo y el Registro si lo son. Los registros pueden tenercomo campos tipos de datos simples o arreglos o incluso otros registros.Los TDA bsicos son los utilizados con mayor frecuencia, pero adems cada problema puede requerirla definicin de varios TDA propios. Por ejemplo, un TDA muy utilizado en aplicaciones informticases el TDA lista definido de la siguiente forma:TDA lista (o Secuencia): coleccin homognea de datos, ordenados segn su posicin en ella, tal quecada elemento tiene un predecesor (excepto el primero) y un sucesor (excepto el ltimo) y losoperadores asociados son:

    Insertar: inserta un elemento x, en una posicin p de la lista Localizar: localiza la posicin p en la que se encuentra el dato x Recuperar: encuentra el elemento x que esta en la posicin p Suprimir: elimina de la lista el elemento de la posicin p Suprimir_dato: elimina de la lista cualquier aparicin del elemento x Anula: ocasiona que la lista se vace

    Primero (Fin): proporciona el primer (ltimo) elemento de la lista Imprimir: imprime todos los elementos de la lista en su orden.

    En general el trmino lista se utiliza cuando el TDA se implementa sobre memoria principal mientrasque secuencia suele reservarse para implementaciones sobre memoria secundaria.La lista es una estructura dinmica ya que su longitud depender del nmero de elementos que tenga,aumentar al insertar y se reducir al suprimir. Ahora bien, la lista puede implementarse de formas muydiferentes. Una de ellas es mediante arreglos. As, la lista, que es dinmica independientemente de suimplementacin, se realiza mediante una implementacin esttica.

    Estructura

    Es un conjunto de elementos entrelazados regidos por una serie de leyes. En general, las estructuras quenos presenta el mundo real estn regidas por las leyes fsicas.

    Estructura de Datos

    Una estructura de datos es una coleccin organizada de elementos de datos bajo las leyes de lainformtica. Estos elementos, o ladrillos, son los tipos de datos, con los cuales se forman las estructurasde datos que incluyen los diferentes lenguajes:

    7

  • 8/8/2019 TEMAS SIS2204(2)

    8/129

    Binarios Enteros Reales Caracteres

    o Doble precisino Vectores

    o Arreglos bidimensionaleso Arreglos n-dimensionaleso Registros

    Complejos

    El tipo de dato determina:

    Los rangos de la variable. La cantidad de memoria que se le asigna a la variable. Las operaciones que se pueden realizar.

    Debido a lo limitado de los lenguajes de alto nivel, los programadores estaban insatisfechos por el nivelde abstraccin que lograban.

    Este problema, se ha superado al proveer los nuevos lenguajes con mecanismos que le permiten alprogramador construir sus propias abstracciones con base en su necesidad, a travs de los tipos de datosdefinidos por el usuario.

    El enfoque de los nuevos lenguajes, orientados por objetos, es tener un conjunto fijo de estructuras y unconjunto poderoso de primitivas que permiten su manipulacin, brindandole al usuario la oportunidadde definir datos (atributos) y operaciones (mtodos).

    Estructura Lgica. Es la estructura que define el usuario a nivel de anlisis y parte de diseo, alrelacionar lgicamente los elementos para satisfacer un requerimiento determinado.

    Estructura Fsica. Corresponde a la forma en que a travs de un lenguaje de programacin se crea laestructura lgica, en memoria auxiliar.

    struct ID_CARRO {char placa[6];struct PROPIETARIO prop;struct CARACTER car;

    8

  • 8/8/2019 TEMAS SIS2204(2)

    9/129

    };

    struct PROPIETARIO {char direccion[50];struct NOMBRE nomb;

    };

    struct CARACTERISTICAS {char marca[20];int modelo[2];char color[10];

    };struct NOMBRE {

    char nombre[10];char apellido_1[10];char apellido_2[10];

    };

    1.2 OPERACIONES SOBRE ESTRUCTURAS DE DATOS.

    Son varias las operaciones que se efectan sobre las estructuras de datos, y una vez establecidas sedefinen como funciones.

    Funcin Constructora Son los algoritmos y mecanismos que permiten construir una estructura.Asigna memoria en forma dinmica o espacios en medios magnticos.

    Funcin Destructora Son los algoritmos y mecanismos que desasignan memoria y liberan recursosdel sistema.

    Funcin de Acceso Son los algoritmos a travs de los cuales se llega a una estructura y sus elementos

    Funcin de Prueba Por medio de la funcin de acceso se llega a un elemento y se prueba si poseedeterminado atributo.

    Funcin de Insercin Permite la inclusin de un elemento en una estructura.

    Funcin de Eliminacin Permite la exclusin de un elemento de una estructura.

    Funcin Inversa Las funciones de acceso proveen un nombre o valor. Estas funciones son losmecanismos o procesos, en que dado un valor o un nombre, se determina la posicin del elemento dedato en la estructura.

    9

  • 8/8/2019 TEMAS SIS2204(2)

    10/129

    TEMA 2

    PILAS Y COLAS

    OBJETIVOS

    Emplear y desarrollar aplicaciones empleando estructuras estticas de datos como apoyo a procesosms complejos.

    CONTENIDO

    2.1 Pilas2.2 Colas2.3 Colas Circulares2.4 Aplicaciones de Listas Restringidas2.5 Ejercicios

    En este captulo se introducen dos tipos de listas, pilas y colas, que se pueden actualizar, solo de unamanera muy limitada. Son estructuras bastante importantes utilizadas en multitud de aplicaciones.

    2.1 PILAS.

    Una pila es una lista en donde tanto las inserciones como las supresiones se hacen por el mismoextremo, que se conoce como el tope de la pila.

    Por ejemplo, la pila de carritos de los supermercados, porque el ltimo carro que se coloca es el

    primero que se saca. Esta propiedad de la pila se conoce como LIFO (Last In First Out; ltimo queentra primero que sale).

    PILA SECUENCIAL

    Aqu se trabaja como una lista secuencial de acceso restringido. Para su manejo se requieren dosapuntadores, uno que indica la posicin del ltimo elemento insertado, llamado TOPE de la pila, y otrodenominado BASE que apunta al fondo de la pila. Cuando la pila est vaca, no hay elementos,BASE=TOPE.

    Figura 2.1 Pila, se inserta y se elimina por el mismo extremo. El apuntador TOPE apunta al ltimoelemento de la pila; el apuntador BASE no apunta a ningn elemento de la pila

    10

  • 8/8/2019 TEMAS SIS2204(2)

    11/129

    OPERACIONES CON PILAS

    Las operaciones primitivas que se efectan sobre una pila son:

    1. Iniciar la pila (dejarla en condiciones de pila vaca).2. Probar si la pila est vaca.

    3. Acceder al elemento del tope de la pila.4. Insertar un elemento en el tope de la pila (PUSH).5. Eliminar el elemento tope de la pila (POP).6. Destruir la pila.

    Para la implementacin de esta estructura de datos, se har uso de un arreglo que aqu llamamos PILA,de dimensin M. Esta es la estructura esttica con la que se trabajan estos algoritmos.

    Iniciacin de una pila. En el arreglo PILA, se inicia la lista restringida.

    Precondicin: Que exista el arreglo.

    Poscondicin: Condicin de pila vaca.INIC_PILAInicio

    BASE = 0TOPE = BASE

    Fin

    Aqu, la base apunta al elemento 0 del arreglo, que como se haba determinado, no corresponde aningn elemento de la lista.

    Prueba de Pila Vaca: En general es importante, para todo tipo de estructura, establecer si seencuentra vaca, pues el proceso vara dependiendo de esta condicin.

    Este algoritmo retorna un valor verdadero si la pila est vaca.

    Precondicin: No hay.Poscondicin: Retorna verdadero cuando no hay elementos en la pila. En casocontrario retorna el valor falso.

    ENTERO PILA_VACIA()Inicio

    Si (TOPE==BASE) EntoncesRETORNA VERDADEROSino

    RETORNA FALSOFin-Si

    Fin

    Esta rutina se emplea en el algoritmo ELIM_PILA que saca el elemento que apunta el TOPE de la pila.

    11

  • 8/8/2019 TEMAS SIS2204(2)

    12/129

    Acceder al Elemento Tope de la Pila: Con esta operacin se lee el ltimo elemento de la pila y selleva a DATO.

    Precondicin: Pila vlida.Poscondicin: En DATO queda una copia del elemento que apunta el ndice TOPEsi hay elementos en la pila, en caso contrario DATO queda indefinido.

    ACCE_PILA(DATO,I)Inicio

    I = VerdaderoSi (NO PILA_VACIA()) Entonces

    DATO = PILA[TOPE]Sino

    I = FalsoFin-Si

    Fin

    Insertar un Dato en la Pila: Se coloca DATO en un nodo que queda en el TOPE de la pila. Es posible

    que no se pueda hacer la insercin debido a que no hay nodos disponibles recordemos que con lavariable I se indica si se pudo, o no, hacer la insercin.

    Precondicin: TOPE < MPoscondicin: I verdadero indica que se hizo la insercin de DATO y el ndiceTOPE apunta a DATO.

    INSER_PILA(DATO,I)Inicio

    I = VerdaderoSi (TOPE>=M) Entonces

    I = FalsoSino

    TOPE = TOPE + 1PILA[TOPE] = DATO

    Fin-SiFin

    Figura 2.2 Estado de la pila luego de la insercin

    La condicin de saturacin generalmente es un error y significa que el rea disponible est llena y queaun se tratan de colocar ms datos en ella. La poltica comn es, en primer lugar, tratar de manejardicha condicin para superarla, o rechazar la insercin e informar al sistema operacional para unaterminacin anormal de la tarea.

    12

  • 8/8/2019 TEMAS SIS2204(2)

    13/129

    Eliminar un Elemento de la Pila: En DATO se coloca el elemento que inicialmente apunta al TOPEde la pila. Al disminuir TOPE el elemento anterior permanece en el rea de memoria como basura.

    Precondicin: Pila vlida.Poscondicin: Si se pudo realizar la operacin, I verdadero, DATO queda conelemento que haba en el tope de la pila. Si la pila estaba vaca I es falso y DATO

    indeterminado.ALGORITMO ELIM_PILA(DATO,I)Inicio

    I = VerdaderoSi (NO PILA_VACIA()) Entonces

    DATO = PILA[TOPE]TOPE = TOPE - 1

    SinoI = Falso

    Fin-SiFin

    La condicin de pila vaca se presenta cuando se trata de obtener un elemento inexistente, la cual no esuna condicin de error.

    Esta condicin se puede considerar en el sentido de que hay una serie de recursos disponibles paraprocesar el DATO que se espera, en caso de que no llegue, simplemente se liberan los recursos o seinicia el proceso de los datos anteriores.

    Es semejante a la condicin que se presenta cuando se est procesando un archivo secuencial y se llegaal fin del archivo.

    Destruir la Pila. Se sacan todos los elementos de la lista.

    Precondicin: Pila vlida.Poscondicin: Pila vaca.ALGORITMO DEST_PILAInicio

    I = VerdaderoMientras I Hacer

    ELIM_PILA(DATO,I)Rutina_usa (Dato)

    Fin-M

    Fin

    En muchas aplicaciones es necesario vaciar la pila, para esto se incluye la rutina apropiada que utilizaDATO dentro del ciclo.

    13

  • 8/8/2019 TEMAS SIS2204(2)

    14/129

    DISTRIBUCIN DE PILAS.

    En los lenguajes de programacin, las subrutinas y los diferentes componentes de los sistemasoperacionales requieren la utilizacin de varias pilas, las cuales se pueden disponer de muchas formas,buscando optimizar el uso de la memoria.

    Manejo de Dos Pilas y Operaciones Primitivas.Como se vio en la insercin, el hecho de que haya saturacin implica una terminacin anormal,perdindose todo lo procesado.

    Figura 2.3 Pilas enfrentadas. El rea comn es todo el arreglo con sus M elementos. La base de la

    pila 1 tiene el ndice 0 y el ndice de la base de la pila 2 es M.

    Se debe observar la figura 2.3 y dejar claro cmo se trabajan los ndices y a que nodos apuntan. En lossiguientes algoritmos se incluye la variable IP (indicador de pila) que dir sobre cual de las dos pilas sedebe realizar la operacin.

    Iniciacin de las Pilas.

    Precondicin: Arreglo vlido.

    Poscondicin: Las dos pilas en condicin de pila vaca.INIC2PILASInicio

    BASE1 = 0; TOPE1 = BASE1BASE2 = M; TOPE2 = BASE2

    Fin

    Prueba de Pila Vaca

    Precondicin: IP solo puede timar valores 1 o 2.

    Poscondicin:No hay cambio en la pila. Vaca queda en V si la pila IP est vacasino vaca queda en F.

    ALGORITMO 2PILASVAC(IP,VACIA)Inicio

    Si (IP=1) EntoncesSi (BASE1 = TOPE1)

    VACIA = VSino

    VACIA = F

    14

  • 8/8/2019 TEMAS SIS2204(2)

    15/129

  • 8/8/2019 TEMAS SIS2204(2)

    16/129

    Eliminar un Elemento de una de las Pilas

    Precondicin: IP solo puede tomar los valores 1 o 2.Poscondicin: Se elimina el elemento tope de pila IP.

    ALGORITMO ELIM2PILAS(DATO,IP,I)Inicio

    I = V2PILASVAC(IP,VACIA)Si (NO VACIA) Entonces

    Si (IP = 1) EntoncesDATO = PILA[TOPE1]TOPE1 = TOPE1 - 1

    SinoDATO = PILA[TOPE2]TOPE2 = TOPE2 + 1

    Fin-SiSino

    I = FFin-Si

    Fin

    Destruir una de las Pilas.

    Precondicin:Poscondicin: Se elimina el elemento tope de pila IP.

    ALGORITMO DESTR2PILAS(IP)Incio

    Si (IP = 1) EntoncesMientras I Ejecute

    ELIM_2PILAS(DATO,IP,I)Rutina_Usa(Dato)

    Fin-MSino

    Mientras I EjecuteELIM_2PILAS(DATO,IP,I)Rutina_Usa(Dato)

    Fin-MFin-Si

    Fin

    16

  • 8/8/2019 TEMAS SIS2204(2)

    17/129

    2.2 COLAS.

    Es una lista de proceso restringido en la cual las inserciones se hacen por un extremo llamado "ltimo"y las eliminaciones se hacen por el otro extremo llamado "delantero". Por ejemplo, los aviones queesperan despegar de un aeropuerto forman una cola, el que llega a la pista queda de ltimo y el que va a

    despegar est de delantero en la cola. Se dice que una cola tiene poltica FIFO(First In, First Out) Elprimer elemento en entrar ser el primero en salir.

    COLA SECUENCIAL

    Aqu se trabaja la cola como una lista secuencial de acceso restringido, dentro del arreglo COLA. Parasu manejo se requieren dos ndices, ULTIMO que indica el ltimo elemento insertado en la cola, yDELANTERO que indica el primer elemento de la cola.

    Figura 2.4 Cola, se inserta por el ltimo y se suprime por delante. El apuntador U, ltimo, apunta alltimo elemento insertado. El apuntador D, delantero, apunta al primer elemento en la cola

    OPERACIONES CON COLAS

    Sobre una cola se pueden efectuar las siguientes operaciones primitivas, similares a las operaciones dela pila:

    1. Iniciar una cola2. Probar si la cola est vaca3. Acceder al elemento delantero de la cola4. Insertar un elemento en la cola5. Eliminar el elemento delantero de la cola6. Destruir la cola

    INICIAR COLA.

    Se tiene un arreglo COLA asignado para almacenar la cola, con M posiciones disponibles.

    Precondicin: Arreglo vlidoPoscondicin: Se tiene condicin de cola vaca

    INIC-COLAInicio

    D = 0U = D

    Fin

    17

  • 8/8/2019 TEMAS SIS2204(2)

    18/129

  • 8/8/2019 TEMAS SIS2204(2)

    19/129

    ELIMINAR UN ELEMENTO DE LA COLA.

    Se elimina el elemento que est de delantero en la cola.

    Precondicin: Que haya cola.Poscondicin: Se elimina el primer elemento de la cola, si existe, sino, I = falso.ELIM-COLA(DATO,I)Inicio

    Si (COLA_VACIA()) EntoncesI = F

    SinoDato =Cola [D]I = VSi (D == U) Entonces

    U = 0D = U

    Sino

    D = D + 1Fin-Si

    Fin-SiFin

    DESTRUIR LA COLA

    Precondicin: Cola vlida.Poscondicin: Cola vaca.DESTRU-COLA(IP)Inicio

    I=VMientras I Ejecute

    ELIM-COLA(DATO,I)Rutina-Usa(Dato)

    Fin-MFin

    2.3 COLAS CIRCULARES.

    Observemos que en el numeral anterior, al hacer eliminaciones, se va corriendo el apuntador D, y lasinserciones tambin van desplazando el apuntador U, llegando incluso a condiciones de saturacin,

    cuando hay memoria desperdiciada. Una solucin a este inconveniente es formar una cola circular. Esdecir, hacer un manejo de ndices.

    19

  • 8/8/2019 TEMAS SIS2204(2)

    20/129

    Figura 2.5 Despus de que U = M se U = 1.

    Figura 2.6 Si se presenta una insercin, hay saturacin.

    Los algoritmos de iniciacin, prueba, acceso y destruccin de la cola son similares a los del casoanterior. Los de insercin y eliminacin vara por la condicin inicial: U=0 U=D; y por la condicin desaturacin: D=U.

    INSERCIN EN COLA CIRCULAR

    Aunque es similar al de insercin en colas comunes, se debe considerar, cuando U = M, para enviarlo a0. Tambin se debe tener en cuenta la nueva condicin de saturacin.

    Precondicin:Que haya cola.Poscondicin: D apunta al nuevo nodo, si hay espacio, sino, I =falso.

    INSER-COL-CIR(DATO,I)Inicio

    I = VSi (COLA_VACIA() Entonces

    D = 1U = 1COLA[U] = DATO

    SinoU = U+1Si (U = M) Entonces

    U = 1SinoFin-SiSi (D=U) Entonces

    I = FSino

    COLA[U] = DATOFin-Si

    Fin-SiFin

    ELIMINAR EL NODO DELANTERO DE LA COLA

    20

  • 8/8/2019 TEMAS SIS2204(2)

    21/129

  • 8/8/2019 TEMAS SIS2204(2)

    22/129

    2.4 APLICACIONES DE LISTAS RESTRINGIDAS.

    Son muchas las aplicaciones de estas listas restringidas, en especial en sistemas operativos,compiladores e interpretadores. Vamos a trabajar una aplicacin universal, la evaluacin de unaexpresin.

    ALGORITMO DE NOTACIN INFIJA A POSFIJA

    La gran mayora de lenguajes representa las expresiones aritmticas en la llamada forma INFIJA, en lacual los operadores se encuentran dentro de los operandos. Otra manera de hacerlo es usando notacinPOSFIJA o POLACA. En este tipo de notacin los operadores aparecen despus de los operandos, asse facilita la evaluacin de la expresin.

    Vamos a suponer que se tienen los siguientes operadores, con sus respectivas prioridades.

    ... Operador Prioridad

    Asignacin = 0Suma, Resta + , - 1Multiplicacin,Divisin

    * , / 2

    Potencia ^ 3

    El algoritmo analiza carcter a carcter la expresin infija, de izquierda a derecha y sigue el siguientemanejo:

    1. Todos los operandos pasan directamente a una cola salida.

    2. Los operadores van a una pila. Su posicin depende de los que haya en el tope de la pila:

    Si el operador que entra, tiene mayor prioridad que el operador que est en el tope de la pila, secoloca en el tope de la pila.Si el operador que entra es de prioridad menor o igual al del tope de la pila, la pila se desocupaenviando los operadores a la cola, hasta que el operador tenga mayor prioridad al del tope de lapila.

    3. Si es un parntesis izquierdo "(", se manda a la pila.4. Si es un parntesis derecho ")", se desocupa la pila hasta encontrar el parntesis izquierdo y se

    mandan los operadores a la cola de salida.

    5. Desocupar la pila.

    La expresin infija que se va a convertir a posfija, se encuentra en un arreglo X, con N posiciones,donde X[J], J=1,...,N; es una letra (operando), un parntesis izquierdo o derecho, o uno de losoperadores = , +, -, *, /, ^

    Observaciones sobre la expresin infija.

    1. Se supone que la entrada es una expresin infija vlida.

    22

  • 8/8/2019 TEMAS SIS2204(2)

    23/129

  • 8/8/2019 TEMAS SIS2204(2)

    24/129

    SinoFin-Si

    Termine

    ALGORITMO DE EVALUACIN EN NOTACIN POSFIJA

    En este caso se tiene una expresin aritmtica en notacin posfija se encuentra en un arreglo X. CadaX(J), J=1,...N., puede ser una letra o un operador (

  • 8/8/2019 TEMAS SIS2204(2)

    25/129

  • 8/8/2019 TEMAS SIS2204(2)

    26/129

    TEMA 3

    ARCHIVOS, REGISTROS Y CAMPOSOBJETIVOS

    Estructurar la informacin con el soporte fundamental para el almacenamiento externo de datos.

    Aprovechar de una forma eficiente el medio de almacenamiento secundario de datos.

    CONTENIDO3.1 Archivos3.2 Registros y Campos3.3 Archivos Secuenciales y Directos

    3.1 ARCHIVOS

    Un archivo es un conjunto de registros relacionados entre s, que forman una entidad, que se puedeidentificar y manipular de modo unitario.

    Un archivo almacena grandes volmenes de informacin en unidades externas (Floppy, HD, Cintas ..).

    3.2 TIPOS DE ARCHIVOS.

    ARCHIVOS SECUENCIALES.

    Son aquellos en los que los registros se graban unos a continuacin de otros y el acceso a un registros

    determinado, necesita forzosamente el paso por todas los registros anteriores.

    CAMPOS DE LONGITUD VARIABLE.

    Se realiza este tipo de definicin de campos de longitud variable, con el objetivo principal deahorro de memoria, ya que con campos de longitud fija se realiza un desperdicio de memoria.

    Para la implementacin de este tipo de campos se lo realiza con archivos de tipo texto.Existen dos mecanismos de implementacin:

    USO DE DELIMITACIONES

    DELIMITADOR DE CAMPOS :

    Existe un smbolo especfico para delimitar los campos ( , ; *)

    DELIMITADOR DE REGISTROS :

    Smbolo diferente al delimitador de campo.

    Ejemplo :

    26

  • 8/8/2019 TEMAS SIS2204(2)

    27/129

    Nombre Direccin Edad Lista de Materias

    $CLAUDIA, BALLIVIN@ 17, SIS-2204, SIS-1103$ANA, LA PAZ@17, SIS-1103, MAT- 2207

    SUBCAMPO DE LONGITUDRegistro con un numero constante de campos.

    Ejemplo :

    Nombre Direccin Edad Lista de Materias

    7 CLAUDIA, 9 BALLIVIN, 2 17, 8 SIS-2204, 8 SIS-1103, 8 MAT- 2207

    Para distinguir algunos registros que contienen los mismos campos se recurre a un campo que contiene

    informacin nica o diferente que se le llama clave.

    ARCHIVOS DIRECTOS.

    Son aquellos en los que los registros se pueden localizar mediante una direccin. El acceso a losregistros es directo.

    CAMPOS DE LONGITUD FIJA.

    Los campos definidos de esta manera son almacenados en memoria con una longitud fija de datos,sin importar si se realiza el uso parcial o completo del campo.

    OPERACIONES SOBRE ARCHIVOS

    Creacin. Consiste en la grabacin, por primera vez, en un soporte de los registros de un determinadoarchivo.

    Apertura y Cierre. Un archivo debe poseer las condiciones necesarias para ser abierto, manipularse ytener acceso a los registros. Para evitar deterioros de informacin el archivo es cerrado durante eltiempo que no se utiliza y no debe permitir su acceso.

    Borrado. Es la eliminacin de todo el archivo, se puede hacer prohibiendo definitivamente su acceso o

    destruyendo la informacin que hay en el.

    Ordenamiento o Clasificacin. Es lograr una nueva disposicin en el soporte de los registros de unarchivo, con una secuencia de ubicacin determinada por el valor de sus campos. Este orden puede serascendente o descendente.

    Copiado o Duplicacin. Consiste en crear un archivo idntico a otro y existencte, sin que se afecte eloriginal.

    27

  • 8/8/2019 TEMAS SIS2204(2)

    28/129

    Concatenacin. Consiste en obtener de dos archivos, con la misma estructura, un archivo que contengaambos, de manera que queden uno a continuacin del otro.

    Interseccin. Consiste en formar un nico archivo mediante los registros comunes de dos archivosdistintos.

    Funcin o Intercalacin. Llamada mezcla, consiste en obtener de dos archivos ordenados por unmismo campo y con la misma estructura, otro archivo que contenga los registros de ambos y mantengasu ordenacin.

    Particin. Consiste en dividir un archivo en dos, de acuerdo a alguna caracterstica determinada de susregistros.

    Compactacin o Empaquetamiento. Consiste en reorganizar todos los registros de un archivo,ocupando todos los huecos de memoria existentes entre ellos, dejen libres fuera de la parte de soporteocupada por el archivo todos los espacios correspondientes que hallan sido eliminados del mismo.

    3.3 REGISTROS Y CAMPOS.REGISTROS.

    Un registro es un conjunto organizado de datos del mismo o diferente tipo, que estan relacionados entres por contener informacin relativa a una entidad particular y superior, de la que forman parte y losunifica.

    Los registros estn compuestos por campos. Un campo es una unidad mnima de informacin, dentrodel registro, independiente de las dems. Representa un concepto global en la finalidad unitaria delregistro y se caracteriza por el tipo de datos asociados y el tamao de memoria que necesita para su

    almacenamiento. El campo se puede dividir en subcampos.

    CAMPOS.

    Los componentes de un registro se denominan campos, los campos son los atributos de losobjetos de estudio, cada campo tiene los siguientes atributos.

    Nombre ( identificador ) de campo que es elegido por el programador. Contenido o valor. Ubicacin dentro del registro. Longitud o dimensin.

    TIPOS DE CAMPOS.

    Existen tres tipos de campos

    Longitud fija. Longitud variable Campos mltiples

    28

  • 8/8/2019 TEMAS SIS2204(2)

    29/129

    TIPOS DE REGISTROS

    Registro Lgico. Cada uno de los componentes de un archivo que posee una estructura para almacenarinformacin referente a un tema general del archivo. Diseado por el programador.

    Registro Fsico. Informacin que el sistema puede transferir como una unidad, en una sola operacin deentrada o salida. Registros segn la longitud de sus campos:

    Registros de Longitud Fija. Su tamao no vara. En cuanto a su estructura interna, el registro puedetener el mismo nmero de campos de igual longitud cada uno, o diverso nmero de campos dediferentes longitudes. En ambos casos la suma de las longitudes de los campos es la misma para cadaregistro.

    Registros de Longitud Variable. Su tamao vara de un registro a otro. Su longitud variable puede estardeterminada por un valor mximo o tambin sin ninguna limitacin. Entre las agrupaciones

    estructuradas de registros se tienen los archivos de datos y las bases de datos.OPERACIONES SOBRE REGISTROS.

    Aqu se analizan las operaciones que solo afectan a algunos registros. Todas estas operacionesnecesitan la operacin de bsqueda como preliminar para localizar los registros deseados.

    Recuperacin (Consultas y Listados). Consiste en acceder a los registros de un archivo para obteneruna informacin determinada, almacenada en el.

    Consultas: Se accede a uno o varios registros determinados de un archivo y se visualiza el

    contenido de sus campos, por impresora o pantalla. Listados: La visualizacin de la informacin es una lista ordenada.

    Actualizacin o Mantenimiento. Consiste en introducir nuevos datos en el archivo o en eliminar omodificar los ya existentes.

    Inserciones: Se introducen uno o varios registros en un archivo, ya creado, al final o encualquier lugar del mismo.

    Borrados: Se eliminan uno o varios registros del archivo, borrando su contenido definitivamenteo prohibiendo su acceso.

    Modificaciones: Consiste en cambiar los datos de uno o varios campos de cualquier registro dearchivo.

    29

  • 8/8/2019 TEMAS SIS2204(2)

    30/129

    TEMA 4

    TRATAMIENTO DE ARCHIVOSOBJETIVOS

    Desarrollar las operaciones bsicas sobre la informacin almacenada en un medio secundario.

    Desarrollar nuevos mecanismos de procesamiento de acuerdo a las caractersticas del problema.

    CONTENIDO4.1 Introduccin4.2 Operaciones en Archivos4.3 Particin de Archivos4.4 Mezclas de Archivos4.5 Mtodos Ordenacin Externa

    4.1 INTRODUCCIONUn archivo es una coleccin de registros, donde cada registro esta conformado por un conjunto decampos.

    El objetivo principal del siguiente tema es realizar las siguientes operaciones para el tratamiento dearchivos:

    1. Almacenamiento de informacin.2. Recuperacin de informacin.3. Actualizacin de la informacin.

    Se hace nfasis en la recuperacin de la informacin, debido a que esta es imprescindible para elusuario, para contar con informacin en forma inmediata, para lo cual se toca el tema de mtodos deordenacin externa.

    4.2 OPERACIONES SOBRE ARCHIVOS

    Las operaciones bsicas sobre archivos son:

    1. Adicin de datos

    2. Eliminacin de datos3. Consultas4. Bsquedas

    Existen otras operaciones complejas, las cuales son:

    1. Particin de Archivos2. Mezcla o fusin de Archivos

    30

  • 8/8/2019 TEMAS SIS2204(2)

    31/129

    Estas ltimas son operaciones auxiliares, necesarias para los mtodos de ordenacin externa.

    ADICION DE DATOS

    Una de las tareas mas comunes en archivos es la adicin de datos, se puede aadir datos de dosmaneras a un archivo:

    1. Adicin de datos en desorden2. Manteniendo el orden del archivo

    ADICION DE DATOS EN DESORDEN (al final).

    Pasos a realizar para aadir un registro en un archivo:1. Leer Dato.2. Buscar Dato en el Archivo.3. Si existe entonces:mostrar ' Ya Existe '.

    Si no :Aadir el dato al final del Archivo

    ADICION DE DATOS EN ORDEN

    Para aadir un registro manteniendo el orden del archivo, es necesario el uso de un archivo auxiliar.

    Se deben seguir los siguientes:

    31

  • 8/8/2019 TEMAS SIS2204(2)

    32/129

    ELIMINAR DATOS

    Se puede eliminar datos de dos maneras:

    1. Eliminar lgicamente2. Eliminara fsicamente

    FSICAMENTE:

    En este tipo de eliminacin es necesario usar un archivo Auxiliar, por lo que este proceso es lento, ypor lo tanto no es usado con frecuencia.

    LOGICAMENTE:

    Este tipo de eliminacin ahorra tiempo cuando se usa grandes volmenes de informacin. Ya que secuenta con un campo adicional, que permite marcar el registro como eliminado.

    32

  • 8/8/2019 TEMAS SIS2204(2)

    33/129

    Muchas aplicaciones usan primeramente la eliminacin lgica, y al finalizar el da utilizan laeliminacin de fsica. Esto por ser ms rpida la eliminacin lgica que la eliminacin fsica.

    CONSULTAS DE DATOS

    Se recupera la informacin sin alterar el estado del registro, para lo cual debe existir un criterio deseleccin de la informacin.

    CRITERIOS DE SELECCIN

    Consulta Simple:

    Cuando la clave del registro es especfica y hace referencia a un solo registr.Ejemplo:

    Mientras no eof (F) y reg

  • 8/8/2019 TEMAS SIS2204(2)

    34/129

  • 8/8/2019 TEMAS SIS2204(2)

    35/129

  • 8/8/2019 TEMAS SIS2204(2)

    36/129

    PARTICION POR CONTENIDO

    Se debe establecer un criterio de particin, para determinar que registros de F1 se destinan al archivoF2.

    Donde el archivo F1 es solo lectura y el archivo F2 para escritura.

    Ejemplo: Crear un archivo llamado CARRERA seleccionando Clave = 'SIS' del Archivo FNI.

    ALGORITMOInicioLeer ClaveAbrir FNI (Lectura)Abrir Carrera (Escritura)Mientras no eof (FNI) Hacer

    Leer (FNI, Reg)Si Reg = Clave Entonces

    Grabar (Carrera, Reg)Fin si

    Fin MientrasCerrar (FNI)Cerrar (Carrera)

    Fin

    PARTICION POR UNA SECUENCIA " P " DADA

    Se establece un numero entero P que ndica las secuencias para realizar la particin. Se copia 'P'registros de Arch a Arch1, luego los siguientes 'P' registros de Arch a Arch2, esto se repite hastaterminar de leer el archivo Arch

    Ejemplo:Realizar la particin del archivo ARCH en dos archivos ARCH1 y ARCH2, utilizando la secuencia departicin (P = 2).

    36

  • 8/8/2019 TEMAS SIS2204(2)

    37/129

    ALGORITMOInicio

    Leer (P)Abrir Arch(Lectura)Abrir Arch1(Escritura)Abrir Arch2(Escritura)Mientras no eof (Arch) Hacer

    Copiar_Secuencia(Arch, Arch1, P)

    Si no eof (Arch) EntoncesCopiar_Secuencia(Arch, Arch2, P)

    Fin siFin MientrasCerrar (Arch)Cerrar (Arch1)Cerrar (Arch2)

    Fin

    Copiar_Secuencia (Var x, y : Archivo; P: entero)Inicio

    Cont = 0

    Mientras (no eof (x)) y (cont < P ) HacerLeer (x, Reg)Grabar (y, Reg)Cont = Cont +1

    Fin mientrasFin

    PARTICIN DE ARCHIVOS POR TRAMOS ORDENADOS

    Se toma primeramente un tramo ordenado del archivo C y se copia al archivo A, luego se toma otrotramo ordenado del archivo C para copiarlo al archivo B este proceso se repite hasta que finalice de leertodo el archivo C.

    Ejemplo: Particionar el archivo C en dos archivos A y B por secuencias ordenadas.

    ALGORITMOInicio

    Abrir A (Lectura)Abrir B (Lectura)Abrir C (Escritura)Mientras no eof (C) Hacer

    Copiar_Tramo (C, A )Si no eof (C) Entonces

    Copiar_Tramo (C, B )

    37

  • 8/8/2019 TEMAS SIS2204(2)

    38/129

    Fin siFin MientrasCerrar (A)Cerrar (B)Cerrar (C)

    Fin

    Copiar_Tramo (Var x, y : Archivo)

    InicioRepetir

    Copiar_Dato ( x, y )Hasta Fin_Tramo

    Fin

    Copiar _Dato ( Var x, y :Archivo)Inicio

    Si eof (x) EntoncesFin_Tramo = TRUE

    Si noLeer (x, Reg)Grabar (y, Reg)

    Si eof (x) EntoncesFin_Tramo = TRUESi no

    Pos = File Pos (x)Leer (x, Reg1)Seek (x, Pos)Fin_Tramo = Reg > Reg1

    Fin siFin si

    Fin

    4.4 MEZCLAS DE ARCHIVOS

    El proceso de unir dos o ms archivos se le denomina mezcla de archivos.

    Existen tres tipos al igual que en particiones:1. Mezcla por Contenido Total.2. Mezcla por Secuencias " P ".3. Mezcla por Secuencias Ordenadas.

    38

  • 8/8/2019 TEMAS SIS2204(2)

    39/129

    MEZCLA POR CONTENIDO TOTAL

    Se procede a la unin de dos archivos A, B en un archivo C, este proceso se los realiza primeramentecopiando toda la informacin de A al C y posteriormente B al C.

    Ejemplo:

    Mezclar los Archivos A, B en un tercer archivo C.

    ALGORITMOInicio

    Abrir A (Lectura)Abrir B (Lectura)Abrir C (Escritura)Mientras no eof (A) Hacer

    Leer (A, Reg)Grabar (C, Reg)

    Fin MientrasMientras no eof (B) Hacer

    Leer (B, Reg)Grabar (C, Reg)

    Fin MientrasCerrar (A)

    Cerrar (B)Cerrar (C)

    Fin

    MEZCLA POR SECUENCIAS " P "

    Se establece un numero entero 'P', que indica las secuencias para realizar la mezcla de dos archivos. Elresultado de la mezcla es una secuencia ordenada de datos.

    Ejemplo: Realizar la Mezcla de A, B en un tercer archivo C, utilizando las secuencias P = 2 pararealizar dicha operacin.

    39

  • 8/8/2019 TEMAS SIS2204(2)

    40/129

    ALGORITMOInicio

    Leer (P)Abrir A (Lectura)

    Abrir B (Lectura)Abrir C (Escritura)

    Mientras no eof (A) y no eof (B) HacerMezclar_SecP

    Fin MientrasMientras no eof (A) Hacer

    Copiar_SecP (A, C, P)Fin MientrasMientras no eof (B) Hacer

    Copiar_SecP (B, C, P)Fin Mientras

    Cerrar (A)Cerrar (B)Cerrar (C)

    Fin

    Mezclar_SecPInicio

    SecA =0; SecB=0Repetir

    PosA = FilePos(A);Leer(A, RegA);Seek (A, PosA)PosB = FilePos(B);Leer(B, RegB);Seek (B, PosB)

    Si RegA < RegB EntoncesCopiar_SecP (A, C,P)SecA=SecA+1Si SecA=P Entonces

    Copiar_SecP (B, C,P-SecB)SecB =P

    Fin SiSi no

    Copiar_SecP (B, C,P)SecB=SecB+1Si SecB=P Entonces

    Copiar_SecP(A, C,P-SecA)SecA =P

    Fin siFin si

    Hasta SecA=P y SecB=PFin

    Copiar_SecP (Var x, y : Archivo; P : Entero)Inicio

    Cont = 0Mientras no eof (x) y Cont < P Hacer

    Leer (x, Reg); Grabar (y, Reg)Cont = Cont +1

    Fin MientrasFin

    40

  • 8/8/2019 TEMAS SIS2204(2)

    41/129

    MEZCLA POR TRAMOS ORDENADAS

    Se realiza la mezcla los archivos A y B en el archivo C, tomando tramos ordenados. Es decir se realizala mezcla del primer tramo ordenado de A con la de B.

    Ejemplo: Realizar la mezcla A y B en un tercer archivo C, utilizando las secuencias ordenadas.

    ALGORITMOInicio

    Abrir A (Lectura)Abrir B (Lectura)Abrir C (Escritura)Mientras no eof (A) y no eof (B) Hacer

    Mezclar_TramoFin MientrasMientras no eof (A) Hacer

    Copiar_Tramo (A, C)Fin MientrasMientras no eof (B) Hacer

    Copiar_Tramo (B, C)Fin MientrasCerrar (A)

    Cerrar (B)Cerrar (C)

    Fin

    Mezclar_TramoInicio

    RepetirPosA = FilePos (A)

    Leer (A, RegA)Seek (A, PosA)

    PosB = FilePos (B)Leer (B, RegB)Seek (B, PosB)

    Si Reg1 < Reg2 EntoncesCopiar_Dato (A, C)Si Fin_Tramo Entonces

    Copiar_Tramo (B, C)Fin Si

    41

  • 8/8/2019 TEMAS SIS2204(2)

    42/129

    Si noCopiar_Dato (B, C)Si Fin_Tramo Entonces

    Copiar_Tramo (A, C)Fin si

    Fin siHasta Fin _Tramo

    Fin

    Copiar_Tramo ( Var x, y : Archivo)Inicio

    RepetirCopiar_Dato (x, y)

    Hasta Fin_TramoFin

    Copiar_Dato (Var x, y: Archivo)Inicio

    Si eof (x) Entonces

    Fin_Tramo = TRUESi noLeer (x, Reg)Grabar (y, Reg)Si eof (x) Entonces

    Fin_Tramo = TRUESi no

    Pos = File Pos (x)Leer (x, Reg1)Seek (x,Pos)

    Fin_Tramo = Reg > Reg1Fin si

    Fin si

    Fin

    4.5 ORDENACIN EXTERNA

    Debido a la limitacin en memoria interna y a la enorme informacin que es almacenada en losarchivos, no es posible utilizar los mtodos de ordenacin interna. Para lo cual existen distintosmtodos de ordenacin externa exclusivos que son las siguientes:

    Ordenacin por Mezcla Directa. Ordenacin Von Newman. Ordenacin por Mezcla Equilibrada.

    Ordenacin por Dgitos.

    Todos estos mtodos hacen el uso de archivos auxiliares, para realizar el proceso de ordenacin dearchivos.

    ORDENACIN POR MEZCLA DIRECTA

    El mtodo solo funciona con archivos donde su longitud sea mltiplo de 2n, hace el uso de lossiguientes archivos:

    42

  • 8/8/2019 TEMAS SIS2204(2)

    43/129

    C Archivo a ordenarA,B Archivos auxiliares

    Se deben seguir los siguientes pasos para ordenar:

    1. Partir el archivo C en la mitad, copiar la primera mitad del archivo C en el archivo A, y la otra

    mitad en el archivo B.2. Mezclar los archivos auxiliares A y B por secuencias de 2n. Donde: n = 0,1,2,3...3. Repetir los pasos 1 y 2 hasta que la secuencia sea mayor que la mitad del archivo a ordenar

    (secuencia{2n}> long(C)/2)

    Ejemplo:

    Ordenar los siguientes datos.

    ALGORITMOInicioSec = 1Abrir C (Lectura)Repetir

    Abrir B (Escritura)Abrir A (Escritura)Seek (C, 0)ParticionarSeek (A, 0); Seek (B, 0); Seek (C, 0)Mezclar

    43

  • 8/8/2019 TEMAS SIS2204(2)

    44/129

    Cerrar A; Cerrar BSec = Sec * 2

    Hasta Sec > (Filesize (C) Div 2)Cerrar C

    Fin

    ParticionarInicio

    Max = Filesize (C) Div 2Para J = 1 Hasta Max Hacer

    Leer C, RegGrabar A, Reg

    Fin ParaPara J = 1 Hasta Max Hacer

    Leer C, RegGrabar B, Reg

    Fin ParaFin

    MezclarInicio

    Mientras no eof (A) y no eof (B) HacerMezclar_SecFin Mientras

    Fin

    Mezclar_SecInicio

    SecA = 0; SecB = 0Repetir

    PosA = FilePos (A); Leer A, RegA; Seek (A, PosA)PosB = FilePos (B); Leer B, RegB; Seek (B, PosB)Si RegA < RegB Entonces

    Leer A, RegGrabar C, Reg

    SecA =SecA + 1Si SecA = Sec Entonces

    Copiar_SecP (B, C, Sec-SecB);SecB = Sec

    Fin siSi no

    Leer B, RegGrabar C, RegSecB = SecB + 1

    Si SecB = Sec EntoncesCopiar_SecP (A, C, Sec-SecA);SecA = Sec

    Fin si

    Fin siHasta (SecA = Sec) y (SecB = Sec)Fin

    Copiar_SecP (Var x, y : Archivo; Sec : Entero)Inicio

    Cont = 0Mientras no eof (x) y (Cont < Sec) Hacer

    Leer (x, Reg)Grabar (y, Reg)Cont = Cont +1;

    44

  • 8/8/2019 TEMAS SIS2204(2)

    45/129

    Fin MientrasFin

    ORDENACIN POR VON NEWMAN

    El mtodo solo funciona con archivos donde su longitud sea mltiplo de 2n, hace el uso de lossiguientes archivos:

    C Archivo a ordenarA,B Archivos auxiliares

    Se deben seguir los siguientes pasos para ordenar:

    1. Partir el archivo C en secuencias de 2n, copiar intercaladamente las secuencias del archivo C,primeramente en el archivo A, y luego en el archivo B.

    2. Mezclar los archivos auxiliares A y B por secuencias de 2n. Donde: n = 0,1,2,3...3. Repetir los pasos 1 y 2 hasta que la secuencia sea mayor que la mitad del archivo a ordenar

    (secuencia{2n}> long(C)/2)

    Ejemplo:

    Ordenar los siguientes datos.

    45

  • 8/8/2019 TEMAS SIS2204(2)

    46/129

    ALGORITMOInicio

    Sec = 1Abrir C (Lectura)Repetir

    Abrir B (Escritura)Abrir A (Escritura)Seek (C, 0)

    ParticionarSeek (A, 0); Seek (B, 0); Seek (C, 0)MezclarCerrar A; Cerrar BSec = Sec * 2

    Hasta Sec > (Filesize (C) Div 2)Cerrar C

    Fin

    ParticionarInicio

    Mientras no eof (C) HacerCopiar_SecP (C, A, Sec)

    Si no eof (C) EntoncesCopiar_SecP(C,B,Sec)

    Fin siFin mientras

    Fin

    Copiar_SecP (Var x, y : Archivo; Sec : Entero)Inicio

    Cont = 0Mientras no eof (x) y (Cont < Sec) Hacer

    Leer (x, Reg)Grabar (y, Reg)Cont = Cont +1;

    Fin MientrasFin

    MezclarInicio

    Mientras no eof (A) y no eof (B) HacerMezclar_Sec

    Fin MientrasFin

    Mezclar_Sec

    InicioSecA = 0; SecB = 0Repetir

    PosA = FilePos (A)Leer A, RegASeek (A, PosA)

    PosB = FilePos (B)Leer B, RegBSeek (B, PosB)

    46

  • 8/8/2019 TEMAS SIS2204(2)

    47/129

    Si RegA < RegB EntoncesLeer A, RegGrabar C, RegSecA =SecA + 1Si SecA = Sec Entonces

    Copiar_SecP (B, C, Sec-SecB);SecB = Sec

    Fin si

    Si noSecB = SecB + 1Si SecB = Sec Entonces

    Copiar_SecP (A, C, Sec-SecA);SecA = Sec

    Fin siFin si

    Hasta (SecA = Sec) y (SecB = Sec)Fin

    ORDENACIN POR MEZCLA EQUILIBRADA

    El mtodo funciona con todo tipo de archivos, hace el uso de los siguientes archivos:C Archivo a ordenarA,B Archivos auxiliares

    Se deben seguir los siguientes pasos para ordenar:

    1. Partirel archivo C en secuencias ordenadas, copiar intercaladamente las secuencias ordenadasdel archivo C, primeramente en el archivo A, y luego en el archivo B.

    2. Mezclarlos archivos auxiliares A y B por secuencias ordenadas.3. Repetir los pasos 1 y 2 hasta que la mezcla de secuencias sea igual a uno (n_tramos=1).

    Ejemplo: Ordenar los siguientes datos.

    47

  • 8/8/2019 TEMAS SIS2204(2)

    48/129

  • 8/8/2019 TEMAS SIS2204(2)

    49/129

    Mientras no ef (A) HacerCopiar_Tramo (A, C)Num_Tramos = Num_Tramos + 1

    Fin Mientras

    Mientras no ef (B) HacerCopiar_Tramo (B, C)

    Num_Tramos = Num_Tramos + 1Fin Mientras

    Fin

    Mezclar_TramoInicio

    RepetirPosA = File Pos (A);

    Leer (A, RegA);Seek (A, PosA)

    PosB = File Pos (B);Leer (B, RegB);

    Seek (B, PosB)Si RegA < RegB EntoncesCopiar_Dato (A, C)Si Fin_Tramo Entonces

    Copiar_Tramo (B, C)Fin Si

    Si noCopiar_Dato (B, C)Si Fin_Tramo Entonces

    Copiar_Tramo (A, C)Fin si

    Fin siHasta Fin _Tramo

    Fin

    ORDENACIN POR DIGITOS

    El mtodo funciona solo con archivos que almacenan datos numricos con cifras elevadas, hace el usode los siguientes archivos:

    C Archivo a ordenarA0, A1..., A9 Archivos auxiliares

    Se deben seguir los siguientes pasos para ordenar:

    1. Partirel archivo C de acuerdo al digito inspeccionado, ejemplo si el digito inspeccionado es 1este dato debe copiarse al archivo A1. Se debe empezar inspeccionando por la posicion de launidad, decena, centena...etc.

    2. Mezclar los 10 archivos auxiliares A0..A9 en orden, empezando del archivo A0 y finalizandoen el archivo A10.

    3. Repetir los pasos 1 y 2 hasta que se haya inspeccionado todos los dgitos, es decir unidades,decenas, centenas, etc.

    49

  • 8/8/2019 TEMAS SIS2204(2)

    50/129

    Ejemplo:Ordenar los siguientes datos.

    ALGORITMOFUNCION PRINCIPAL

    Var Arch : [0....9] of ArchivoInicio

    Abrir C (Lectura)Dig = 0Repetir

    Abrir_ArchivosSeek (C, 0)ParticionarPara I = 0 Hasta 9 Hacer Seek (Arch [ i ], 0)

    Seek (C, 0)MezclarDig = Dig + 1Cerrar_Archivos

    Hasta Dig > 4Cerrar C

    Fin

    ParticionarInicio

    Mientras no eof (C) Hacer

    50

  • 8/8/2019 TEMAS SIS2204(2)

    51/129

    Leer C, RegAux = Reg Div (Exp(Dig * Ln (10)))Pos = Aux Mod 10Grabar Arch [Pos], Reg

    Fin MientrasFin

    Mezclar

    InicioPara I = 0 Hasta 9 Hacer

    Mientras no eof (Arch [I]) HacerLeer Arch [I], RegGrabar C, Reg

    Fin MientrasFin Para

    Fin

    Abrir_ArchivosInicio

    Para I = 0 Hasta 9 HacerNOMBRE = 'DATOS'+ CHR(48 + i)+ '.DAT'

    Abrir Arch [i] (Escritura)Fin ParaFin

    Cerrar_ArchivosInicio

    Para I = 0 Hasta 9 HacerCerrar Arch [ i ]

    fin ParaFin

    51

  • 8/8/2019 TEMAS SIS2204(2)

    52/129

    TEMA 5

    LISTAS ENCADENADASOBJETIVOS

    Emplear estructuras dinmicas de datos en el procesamiento de la informacin.

    Desarrollar algoritmos para optimizar las operaciones bsicas que se llevan a cabo en proceso deejecucin en estructuras lineales.

    CONTENIDO5.1 Introduccin5.2 Lista Simplemente Enlazada5.3 Listas Simplemente Enlazadas Circulares5.4 Listas Doblemente Enlazadas5.5 Listas Doblemente Enlazadas Circulares

    5.1 LISTAS ENCADENADAS

    Las listas enlazadas son estructuras de datos lineales, que constan de una secuencia de nodos que seencuentran enlazados uno con otro, mediante un enlace o puntero.

    La adicin / eliminacin en estas estructuras de datos, se realiza en tiempo de ejecucin y en formadinmica.

    La cantidad de nodos que una lista enlazada puede contener esta limitada por la memoria delcomputador.

    TIPOS DE LISTAS.

    Existen los siguientes tipos de listas enlazadas:

    Listas simplemente enlazadas

    52

  • 8/8/2019 TEMAS SIS2204(2)

    53/129

    Listas simplemente enlazadas circulares

    Listas doblemente enlazadas

    Listas doblemente Enlazadas circulares

    5.2 LISTAS SIMPLEMENTE ENLAZADASUna lista simplemente enlazada se representa tal como se muestra en la siguiente grafica:

    Donde:

    El nodo Raz es un puntero al primer elemento de la lista.

    Cada elemento (nodo) de la lista simplemente enlazada debe tener dos campos:

    Un campo informacin (info) que contiene el valor de ese elemento y puede contenercualquier tipo estndar o definido por el usuario.

    Un campo enlace (o puntero) que indica la posicin del siguiente elemento de la lista.

    NODO

    53

  • 8/8/2019 TEMAS SIS2204(2)

    54/129

  • 8/8/2019 TEMAS SIS2204(2)

    55/129

    Mostar Actual^.infFin Mientras

    Fin.

    BUSQUEDA

    Para realizar la bsqueda en una lista simple, es necesario el uso de un puntero auxiliar ACT, con la

    cual se busca empezando por la RAIZ y finalizando cuando el puntero ACT apunta al elementobuscado o a NIL.

    ALGORITMO:

    Buscar(Dato:Integer)Inicio

    Actual = RazMientras(ActualNil) y (Actual^.infDato) hacer

    Actual =Actual^.sigFin MientrasSi Actual^.inf = Dato entonces

    Mostar "El Dato Esta en la Lista"Sino

    Mostrar "No Existe el Dato"Fin si

    Fin.

    INSERCION DE DATOS

    Existen distintas formas de adicin de nodos a una lista simple, de acuerdo a los propsitos de uso deestos, entre las cuales se tiene:

    Insertar cuando lista esta vaca Insertar al principio Insertar al final Insertar al medio de dos nodo

    En todas ellas se realiza una tarea comn:

    Crear una nuevo nodo Almacenar el elemento Agregar los enlaces respectivos

    INSERTAR CUANDO LISTA ESTA VACIA:

    55

  • 8/8/2019 TEMAS SIS2204(2)

    56/129

    Insertar(5)

    New(Nuevo) Nuevo^.inf= 5 Raiz = nuevo (1) Nuevo^.sig= nil(2)

    INSERTAR AL PRINCIPIO:

    Insertar(3)

    New(Nuevo) Nuevo^.inf= 3 Nuevo^.sig = Raiz(1) Raiz = Nuevo (2)

    INSERTAR AL FINAL:

    Insertar(13)

    56

  • 8/8/2019 TEMAS SIS2204(2)

    57/129

    New(Nuevo)

    Nuevo^.inf= 13 ant^.sig =Nuevo(1) Nuevo^.sig =Nil(2)

    INSERTAR AL MEDIO DE DOS NODOS:

    Insertar(7)

    New(Nuevo) Nuevo^.inf= 7 Nuevo^.sig =Act(1)

    Ant^.sig = Nuevo(2)

    ALGORITMO :

    Insertar (Dato:Entero)Inicio

    New(Nuevo)Nuevo^.inf = DatoSi Raiz = Nil Entonces

    Raiz = NuevoNuevo^ sig = Nil

    Si no

    Anterior = RaizActual = RaizMientras (Actual Nil) y (Dato> Actual^.Inf) Hacer

    Anterior = ActualActual = Actual^.sig

    Fin MientrasSi Anterior =Actual Entonces

    Nuevo^.sig = RaizRaiz = Nuevo

    Si noNuevo^.sig = Actual

    57

  • 8/8/2019 TEMAS SIS2204(2)

    58/129

    Anterior^.sig = NuevoFin si

    Fin siFin.

    ELIMINAR DATOS

    Para eliminar un dato de una lista simple, es necesario buscarlo en la lista primeramente.

    La bsqueda se realiza con dos punteros auxiliares ANT y ACT, si el dato se encuentra en la lista, elpuntero ACT apunta a ella y el puntero ANT apunta al anterior elemento.

    Existen dos casos que se presentan al eliminar un dato:

    1. Eliminar el primer elemento2. Eliminar un elemento distinto del primero

    ELIMINAR EL PRIMER ELEMENTO

    Dada la siguiente lista:

    Eliminar(5)

    Raiz= act^.sig(1) Dispose(act)

    ELIMINAR UN ELEMENTO DISTINTO DEL PRIMERO

    Dada la siguiente lista:

    Eliminar(9)

    58

  • 8/8/2019 TEMAS SIS2204(2)

    59/129

    ant^.sig = act^.sig Dispose(act)

    ALGORITMO:

    Eliminar (Dato:Entero)Inicio

    Si Raiz = nil thenMostrar No existe Datos

    Si noAnterior = RaizActual = RaizMientras (Actual Nil) y (Actual^.inf Dato) Hacer

    Anterior = ActualActual =Actual^.sig

    Fin MientrasSi Actual^.inf = Dato entonces

    Si Anterior = Actual entoncesRaiz = Actual^.sig

    SinoAnterior^.sig = Actual^.sig

    Fin siDispose(Actual)

    SinoImprimir "No Existe el Dato"

    Fin siFin si

    Fin.

    5.3 LISTAS SIMPLEMENTE ENLAZADAS CIRCULARES.

    Una lista circular es aquella en la cual el puntero siguiente del ltimo elemento apunta hacia el primerelemento. Por lo cual en estas listas no existe ni primero ni ltimo elemento, aunque se debe elegirobligatoriamente un puntero para referenciar la lista.

    Esta lista presenta la gran ventaja de que cada nodo en una lista circular es accesible desde cualquiernodo. Tiene el inconveniente de que requiere un diseo cuidadoso para evitar caer en un bucle infinito.

    Existen dos tipos de listas enlazadas simples circulares:

    59

  • 8/8/2019 TEMAS SIS2204(2)

    60/129

    Listas simples circulares sin nodo cabecera

    Listas simples circulares con nodo cabecera

    El manejo de la primera es complejo, de tal modo que solo se usaremos las listas enlazadas con nodocabecera, debido a su fcil manejo.

    OPERACIONES EN LISTAS SIMPLEMENTE ENLAZADAS CIRCULARES

    Como cualquier estructura de datos, en las listas simplemente enlazadas circulares se puede realizar lassiguientes operaciones bsicas:

    Insercin Eliminacin Bsqueda Recorrido

    RECORRIDO

    Para realizar el recorrido en una lista simple circular, es necesario el uso de un puntero auxiliar ACT,con la cual se visita toda la lista, empezando por la RAIZ y finalizando cuando el puntero ACT apuntaa NIL.

    ALGORITMO:

    Recorrido(Dato:Integer)Inicio

    Actual = Raz^.sigMientras(Actual Raiz) hacer

    Actual =Actual^.sigMostarc Actual^.inf

    60

  • 8/8/2019 TEMAS SIS2204(2)

    61/129

    Fin MientrasFin.

    BUSQUEDA

    Para realizar la bsqueda en una lista simple, es necesario el uso de un puntero auxiliar ACT, con lacual se busca empezando por la RAIZ y finalizando cuando el puntero ACT apunta al elementobuscado o a NIL.

    ALGORITMO :

    Buscar(Dato:Integer)Inicio

    Actual = Raz^.sigMientras(Actual Raiz) y (Actual^.inf Dato) hacer

    Actual =Actual^.sigFin MientrasSi Actual^.inf = Dato entonces

    Mostar "El Dato Esta en la Lista"Sino

    Mostrar "No Existe el Dato"Fin si

    Fin.

    INSERCION DE DATOS

    Existen distintas formas de adicin de nodos a una lista simple circular, de acuerdo a los propsitos deuso de estos. Entre las cuales se tiene:

    Insertar cuando lista esta vaca Insertar al medio de dos nodos

    En todas ellas se realiza una tarea comn, que es el de crear una nuevo nodo para almacenar alelemento que ser agregado a la lista.

    INSERTAR CUANDO LISTA ESTA VACIA:

    Insertar(5)

    61

  • 8/8/2019 TEMAS SIS2204(2)

    62/129

    New(Cab) New(Nuevo) Nuevo^.inf= 5 Raiz = Cab (1) Cab^.sig= nuevo (2) Nuevo^.sig= Raiz (3)

    INSERTAR AL MEDIO DE DOS NODOS:

    Insertar(7)

    New(Nuevo) Nuevo^.inf= 7 Nuevo^.sig = Act (1) Ant^.sig = Nuevo (2)

    ALGORITMO :

    Insertar (Dato:Entero)Inicio

    New(Nuevo)Nuevo^.inf = DatoSi Raiz = Nil Entonces

    New(Cab)Raiz = CabCab^.sig =NuevoNuevo^.sig = Raiz

    Si noAnterior = RaizActual = Raiz^ sigMientras (Actual Raiz) y (Dato> Actual^.Inf) Hacer

    62

  • 8/8/2019 TEMAS SIS2204(2)

    63/129

    Anterior = ActualActual = Actual^.sig

    Fin MientrasNuevo^.sig = ActualAnterior^.sig = Nuevo

    Fin siFin.

    ELIMINAR DATOS

    Para eliminar un dato de una lista simple circular, es necesario buscarlo en la lista primeramente. Labsqueda se realiza con dos punteros auxiliares ANT y ACT, si el dato se encuentra en la lista, elpuntero ACT apunta a ella y el puntero ANT apunta al anterior elemento.

    Existen dos casos que se presentan al eliminar un dato:

    Eliminar l ultimo elemento de la lista Eliminar un elemento distinto del ultimo

    ELIMINAR EL ULTIMO ELEMENTO DE LA LISTA

    Dada la siguiente lista:

    Eliminar(9)

    Para eliminar el ultimo elemento, es necesario liberar la memoria de los nodos que apuntan a ANT yACT.

    Dispose(ant) Dispose(act) Raiz = nil (1)

    ELIMINAR UN ELEMENTO DISTINTO DEL ULTIMO

    Dada la siguiente lista:

    63

  • 8/8/2019 TEMAS SIS2204(2)

    64/129

    Eliminar(5)

    ant^.sig = act^.sig Dispose(act)

    ALGORITMO:

    Eliminar (Dato:Entero)Inicio

    Si Raiz = nil thenMostrar No existe Datos

    Si noAnterior = RaizActual = Raiz^.sigMientras (Actual Raiz) y (Actual^.inf Dato) Hacer

    Anterior = Actual

    Actual =Actual^.sigFin MientrasSi Actual^.inf Raiz entonces

    Si Anterior = Actual^.sig entoncesDispose(Anterior)Raiz = Nil

    SinoAnterior^.sig = Actual^.sig

    Fin siDispose(Actual)

    SinoImprimir "No Existe el Dato"

    Fin si

    Fin siFin.

    5.4 LISTAS DOBLEMENTE ENLAZADAS.

    En muchas aplicaciones se requiere recorrer la lista en dos direcciones. Estos recorridos se puedenconseguir manteniendo dos campos de enlace en cada nodo en lugar de uno.

    64

  • 8/8/2019 TEMAS SIS2204(2)

    65/129

    Estos enlaces(punteros) se utilizan para denotar la direccin del predecesor y sucesor de un nodo dado.El predecesor se llama enlace izquierdo y el sucesor enlace derecho.

    Donde:

    Nodo Inicio es un puntero al primer elemento de la lista. Nodo Fin es un puntero al ultimo elemento de la lista. Una lista cuya Estructura de Nodo,contiene dos campos de enlace se denominar lista lineal

    doblemente enlazada.

    NODO

    Donde:

    campo enlace ant. apunta al anterior nodo de la lista. campo info contiene cualquier tipo estndar de datos. campo enlace sig. apunta al siguiente nodo de la lista.

    Existe una marca para fin de lista, que es la constante NIL, tambin representada por una barrainclinada o el signo elctrico de tierra.

    Declaracin de un nodo usando el lenguaje Pascal:

    Typepnodo = ^nodonodo = record

    info : Integer;Ant, Sig :pnodo;

    End;

    Declaracin de un nodo usando el lenguaje C:

    Struct nodo{

    int info;struct nodo *Ant, * Sig;

    };

    OPERACIONES EN LISTAS DOBLEMENTE ENLAZADAS.

    Las operaciones bsicas para manipular listas doblemente enlazadas son:

    65

  • 8/8/2019 TEMAS SIS2204(2)

    66/129

    Insercin Eliminacin Recorrido Bsqueda

    RECORRIDO

    En una lista doble circular es posible realizar dos tipos de recorridos, esto debido a que en estas listasexisten enlaces en ambas direcciones.

    Recorrido en forma ascendente Recorrido en forma descendente

    RECORRIDO EN FORMA ASCENDENTE

    Este recorrido se inicia cuando el puntero apunta a INICIO y se recorre de nodo a nodo con el punteroSIG hasta que el nodo apunte a NIL.

    ALGORITMO:

    InicioActual = InicioMientras Actual NIL hacer

    Mostrar Actual^.infActual = Actual^.sigFin Mientras

    Fin.

    RECORRIDO EN FORMA DECENDENTE

    Este recorrido se inicia cuando el puntero apunta a FIN y se recorre de nodo a nodo con el punteroANT hasta que el puntero apunte a NIL.

    ALGORITMO:

    InicioActual = Fin}Mientras Actual Nil Hacer

    Mostrar Actual^.inf

    66

  • 8/8/2019 TEMAS SIS2204(2)

    67/129

    Actual = Actual^.antFin Mientras

    Fin.

    INSERCION DE DATOS

    Existen distintas formas de adicin de nodos a una lista doble, de acuerdo a los propsitos de uso de

    estos. Entre las cuales se tiene:

    Insertar cuando lista esta vaca Insertar al principio Insertar al final Insertar al medio de dos nodos

    En todas ellas se realiza una tarea comn, que es el de crear una nuevo nodo para almacenar alelemento que ser agregado a la lista.

    INSERTAR CUANDO LISTA ESTA VACIA:

    Dada la siguiente lista:

    Insertar(5)

    New(Nuevo) Nuevo^.inf= 5 Inicio = nuevo (1) Fin = nuevo (2) Nuevo^.ant= nil (3) Nuevo^.sig= nil (4)

    INSERTAR AL PRINCIPIO

    Dada la siguiente lista:

    Insertar(3)

    67

  • 8/8/2019 TEMAS SIS2204(2)

    68/129

    New(Nuevo) Nuevo^.inf= 3 Inicio = Nuevo(1) Nuevo^.sig = Act(2) Act^.ant = Nuevo(3) Nuevo^.ant = Nil(4)

    INSERTAR AL FINAL:

    Dada la siguiente lista:

    Insertar(13)

    New(Nuevo) Nuevo^.inf= 13 ant^.sig = Nuevo(1) Nuevo^.sig = Nil(2) Fin = Nuevo(3) Nuevo^.ant = Ant(4)

    INSERTAR AL MEDIO DE DOS NODOS:

    Dada la siguiente lista:

    68

  • 8/8/2019 TEMAS SIS2204(2)

    69/129

    Insertar(7)

    New(Nuevo) Nuevo^.inf= 7 Ant^.sig = Nuevo(1) Nuevo^.sig = Act(2) Act^.ant = Nuevo(3) Nuevo^.ant = Ant (4)

    ALGORITMO:

    Insertar (Dato:Entero)Inicio

    New(Nuevo)Si Inicio = Nil Entonces

    Inicio = Nuevo; Final = NuevoNuevo^.ant = Nil;Nuevo^.sig = Nil

    Si noAnterior = InicioActual = InicioMientras (Actual Nil) y( Actual^.inf < Dato) Hacer

    Anterior = ActualActual =Actual^.sig

    Fin MientrasSi Actual = Anterior Entonces

    Nuevo^.sig = InicioInicio^.ant = NuevoInicio = NuevoNuevo^.ant = Nil

    Si noSi Actual = Nil Entonces

    Final = NuevoSi no

    Actual^.ant = NuevoFin siNuevo^.sig = ActualAnterior^.sig = Nuevo

    Nuevo^.ant = AnteriorFin si

    Fin siFin.

    ELIMINAR DATOS

    Para eliminar un dato de una lista doble, es necesario buscarlo en la lista primeramente.

    69

  • 8/8/2019 TEMAS SIS2204(2)

    70/129

    La bsqueda se realiza con dos punteros auxiliares ANT y ACT, si el dato se encuentra en la lista, elpuntero ACT apunta a ella y el puntero ANT apunta al anterior elemento.

    Existen dos casos que se presentan al eliminar un dato:

    Eliminar el primer elemento

    Eliminar un elemento distinto del primero Eliminar l ultimo elemento

    ELIMINACIN AL PRINCIPIO:

    Dada la siguiente lista:

    Eliminar(5)

    1. Inicio = Inicio^.sig2. Inicio^.ant = Nil

    Dispose(act)

    ELIMINACIN AL MEDIO:

    Dada la siguiente lista:

    Eliminar(8)

    70

  • 8/8/2019 TEMAS SIS2204(2)

    71/129

    1. Ant .sig = Act .sig2. Act .sig^.ant = Ant

    Dispose(act)

    ELIMINACIN AL FINAL:

    Dada la siguiente lista:

    Eliminar (9)

    1. Ant .sig = Act .sig = nil2. Final = Ant

    Dispose(act)

    ALGORITMO:

    Eliminar (Valor: Entero)Inicio

    Anterior = InicioActual = InicioMientras (Actual Nil) y (Actual^.inf Valor) hacer

    Anterior = ActualActual =Actual^.sig

    Fin MientrasSi Actual^.inf Valor Entonces

    Mostrar "No Existe el Elemento"Si no

    Si Actual=Anterior EntoncesSi Actual^.sig Nil Entonces

    Inicio = Inicio^.sigInicio^.ant = NilSi no

    Final = NilInicio = Nil

    Fin siSi no

    Si Actual^.sig Nil entoncesActual^.sig^.Ant = Anterior

    Si noFinal = Anterior

    71

  • 8/8/2019 TEMAS SIS2204(2)

    72/129

    Fin siAnterior^.sig = Actual^.sig

    Fin siFin si

    Fin.

    5.5 LISTAS CIRCULARES DOBLEMENTE ENLAZADAS.

    Una lista doble circular es aquella en la cual el puntero siguiente del ltimo elemento apunta hacia elprimer elemento. En estas listas no existe ni primero ni ltimo elemento, aunque se debe elegirobligatoriamente un puntero para referenciar la lista.

    Esta lista presenta la gran ventaja de que cada nodo en una lista doble circular es accesible desdecualquier nodo. Tiene el inconveniente de que requiere un diseo cuidadoso para evitar caer en unbucle infinito.

    Existen dos tipos de listas enlazadas simples circulares:

    Listas dobles circulares sin nodo cabecera

    Listas dobles circulares con nodo cabecera

    El manejo de la primera es complejo, de tal modo que solo se usaremos las listas enlazadas con nodocabecera, debido a su fcil manejo.

    72

  • 8/8/2019 TEMAS SIS2204(2)

    73/129

    OPERACIONES EN LISTAS DOBLEMENTE ENLAZADAS CIRCULARES.

    Las operaciones bsicas para manipular listas doblemente enlazadas son:

    Insercin Eliminacin

    Recorrido Bsqueda

    RECORRIDO

    En una lista doble circular es posible realizar dos tipos de recorridos, esto debido a que en estas listasexisten enlaces en ambas direcciones.

    Recorrido en forma ascendente Recorrido en forma descendente

    RECORRIDO EN FORMA ASCENDENTE

    Este recorrido se inicia cuando el puntero apunta a Raiz^.sig y se recorre de nodo a nodo con el punteroSIG hasta llegar al nodo Raiz.

    ALGORITMO:

    InicioActual = Raiz^.sigMientras Actual Raiz hacer

    Mostrar Actual^.infActual = Actual^.sig

    Fin MientrasFin.

    RECORRIDO EN FORMA DECENDENTE

    Este recorrido se inicia cuando el puntero apunta a Raiz^.ant y se recorre de nodo a nodo con el punteroANT hasta llegar al nodo Raiz.

    73

  • 8/8/2019 TEMAS SIS2204(2)

    74/129

    ALGORITMO:

    InicioActual = Raiz^.antMientras Actual Raiz Hacer

    Mostrar Actual^.infActual = Actual^.ant

    Fin MientrasFin.

    INSERCION DE DATOS

    Existen dos formas de insercin de datos a una lista doblemente enlazada circular:

    Insercin en una lista vaca Insertar al medio de dos nodos

    INSERCIN EN UNA LISTA VACIA

    Insertar(9)

    New(Cab) New(nuevo) nuevo^.inf=9 Raiz = Cab (1) Cab^.sig = Nuevo (2) Nuevo^.sig = Cab (3) Cab^.ant = Nuevo (4) Nuevo^.ant = Cab (5)

    74

  • 8/8/2019 TEMAS SIS2204(2)

    75/129

    INSERTAR AL MEDIO DE DOS NODOS:

    Insertar(6)

    New(Cab) New(nuevo) nuevo^.inf=6 Ant^.sig = Nuevo(1) Nuevo^.sig = Act(2) Act^.ant = Nuevo(3) Nuevo^.ant = Ant(4)

    ALGORITMO:

    Insertar (dato:entero)Inicio

    New(Nuevo)Nuevo^.inf = DatoSi Raiz = Nil Entonces

    New(NodoC)Raiz = NodoCNodoC^.sig = NodoCNodoC^.ant = NuevoNuevo^.ant = NodoC

    Si noAnterior = Raiz

    Actual = Raiz^.sigMientras (Actual Raiz) y (Actual^.inf < dato) HacerAnterior = ActualActual =Actual^.sig

    Fin MientrasNuevo^.sig = ActualActual^.sig = NuevoNuevo^.ant = AnteriorActual^.ant = Nuevo

    Fin siFin.

    75

  • 8/8/2019 TEMAS SIS2204(2)

    76/129

  • 8/8/2019 TEMAS SIS2204(2)

    77/129

    Ant^.sig = Act^.sig(1) Act^.sig ^.ant = Ant(2) Dispose(act)

    ALGORITMO:

    Eliminar (Valor:Entero)Inicio

    Anterior = RaizActual = Raiz^.sigMientras (Actual Raiz) y (Actual^.inf Valor) Hacer

    Anterior = Actual

    Actual =Actual^.sigFin MientrasSi (Actual^.inf Valor) Entonces

    Mostrar "No Existe el Elemento"Si no

    Si Actual^.sig = Anterior) EntoncesDispose(Anterior)Raiz = Nil

    Si noAnterior^.sig = Actual^.sigActual^.sig ^.ant= Anterior

    Fin siDispose(Actual)

    Fin siFin.

    77

  • 8/8/2019 TEMAS SIS2204(2)

    78/129

  • 8/8/2019 TEMAS SIS2204(2)

    79/129

    Estructura dinmica pura.

    MATRIZ DE ADYACENCIA

    Es un array [1..n,1..n] OF BOOLEAN donde n es el nmero de nodos que tiene el rbol y cada posicinde la matriz indicar si existe un enlace entre dos nodos. Esto es normal hacerlo en lenguajes en que no

    pueden crearse componentes dinmicamente, y referenciales por medio de punteros.

    Ejemplo:

    LISTA DE ADYACENCIA

    Es una tabla de 1 a n, siendo n el nmero de nodos, donde cada elemento de la tabla representa cadauno de los nodos del rbol y de cada uno de los elementos sale un puntero a una lista que est formadapor todos los nodos que estn enlazados con l.

    Ejemplo:

    ESTRUCTURA DINMICA PURA

    En ella, todos los componentes o nodos, se representan por punteros explcitos.

    Vamos a tener un tipo como:

    PNodo=^Nodo;Nodo=RECORD

    Info:Tinfo;Enlace1,..., EnlaceN: PNodo;

    END;

    79

  • 8/8/2019 TEMAS SIS2204(2)

    80/129

    6.2 CONCEPTOS ASOCIADOS

    A continuacin veremos algunos conceptos asociados a los Arboles.

    Nodo:Cada uno de los elementos de un rbol.

    Rama: Es cada uno de los enlaces que existe entre los nodos de un rbol.

    Raz: Es aquel nodo que no tiene antecesores, es decir, todos son descendientes directos o indirectosde el.

    Subrbol: Se llama subrbol de raz m al conjunto de nodos que dependen directa o indirectamentede l, as como al propio m.

    Antecesor o padre: Es un nodo del que cuelga algn otro, llamado descendiente o hijo.

    Grado de un nodo: Es el nmero de descendientes directos que tiene, el grado de un rbol es igualal del nodo con mayor grado.

    Nivel : Es el nmero de ramas que hay que recorrer para llegar a l desde la raz, tendiendo en cuentaque la raz tiene nivel uno.

    80

  • 8/8/2019 TEMAS SIS2204(2)

    81/129

    Nodo terminal u hoja: Es aquel que tiene grado cero, es decir, que no tiene ningn descendiente.

    Nodo interno: Es aquel que no es hoja.

    Longitud de camino interno de un arbol: Es la suma de las longitudes de camino de todos susnodos.

    LCI = 1+2+2+3+3+3 = 14

    Longitud de camino externa: Es la suma de las longitudes de camino de todos los NodosEspeciales (Es aquel que se hace colgar de aquellos nodos que no tienen completo el cupo dedescendientes).

    LCE = 3+4+4+4+4+4+4 = 27

    Longitud de camino interna media: Es la longitud de camino interna partido del nmero denodos

    6.3 ARBOL BINARIO

    Los rboles de grado 2 tienen una especial importancia. Se les conoce con el nombre de rbolesbinarios.

    Se define un rbol binario como un conjunto finito de elementos (nodos) que bien est vaci o estformado por una raz con dos rboles binarios disjuntos, llamados subrbol izquierdo y derecho de laraz.

    81

  • 8/8/2019 TEMAS SIS2204(2)

    82/129

    En los apartados que siguen se considerarn nicamente rboles binarios y, por lo tanto, se utilizar lapalabra rbol para referirse a rbol binario. Los rboles de grado superior a 2 reciben el nombre derboles multicamino.

    DEFINICION

    Los rboles binarios se utilizan frecuentemente para representar conjuntos de datos cuyos elementos seidentifican por una clave nica.

    Si el rbol est organizado de tal manera que la clave de cada nodo es mayor que todas las claves delsubrbol izquierdo, y menor que todas las claves del subrbol derecho se dice que este rbol es un rbolbinario de bsqueda.

    Ejemplo:

    OPERACIONES BASICAS

    Una tarea muy comn a realizar con un rbol es ejecutar una determinada operacin con cada uno delos elementos del rbol. Esta operacin se considera entonces como un parmetro de una tarea msgeneral que es la visita de todos los nodos o, como se denomina usualmente, del recorrido del rbol.

    Si se considera la tarea como un proceso secuencial, entonces los nodos individuales se visitan en unorden especfico, y pueden considerarse como organizados segn una estructura lineal.

    Existen dos formas bsicas de recorrer un rbol:

    o Recorrido en amplitud.o Recorrido en profundidad.

    RECORRIDO EN AMPLITUD.

    En el recorrido por amplitud se visitan los nodos por niveles. Para ello se utiliza una estructura auxiliartipo "cola" en la que despus de mostrar el contenido del nodo, empezando por el nodo raz, sealmacenan los punteros correspondientes a sus hijos izquierdo y derecho.

    De esta forma si recorremos los nodos de un nivel, mientras mostramos su contenido, almacenamos enla cola los punteros a todos los nodos del nivel siguiente.

    82

  • 8/8/2019 TEMAS SIS2204(2)

    83/129

    Resultado:

    20, 10, 30, 5, 15, 25

    El algoritmo:

    AmplitudInicio

    Ptr = raiz

    Cima = 1Inicio=1Pila[cima] = Ptr

    Mientras Inicio

  • 8/8/2019 TEMAS SIS2204(2)

    84/129

    Las tres etapas bsicas en el recorrido de un rbol binario recursivamente son:

    - Visitar el nodo (Raiz)- Recorrer el subrbol izquierdo (izq.)- Recorrer el subrbol derecho (der.)

    RECORRIDO PREORDENSi el rbol no esta vaci, el mtodo implica los siguientes pasos:

    - Visitar el nodo (Raiz)- Recorrer el subrbol izquierdo (izq.)- Recorrer el subrbol derecho (der.)

    El algoritmo usando recursividad:

    preorden (var p:pnodo)

    iniciosi p nil entoncesescribir p^.infpreorden (p^.izq)preorden (p^.der)

    fin sifin

    En el rbol, los nodos se han numerado en el orden que son visitados en el recorrido preorden

    .

    Primero se visita el nodo raz A.

    Despus se visita el subrbol izquierdo. Este consta de los nodos (B, D y E), por lo que siguiendo con

    el orden (Raiz, izq., der.), se visita primero B, luego D y por ultimo E. Por ultimo se visita el subrbol derecho que consta de los nodos (C, F y G). Siguiendo el orden (Raiz,izq., der.), se visita primero C, luego F y por ultimo G.

    El recorrido es: A-B-D-E-C-F-G

    El algoritmo sin usar recursividad:

    84

  • 8/8/2019 TEMAS SIS2204(2)

    85/129

    PreordenInicio

    Cima = 1Pila[cima] = nilPtr = raiz

    Mientras ptr nil hacer

    Mostrar ptr^.inf

    Si ptr^der nil entoncesCima=cima+1Pila[cima] = ptr^.der

    Fin_si

    Si ptr^.izq nil entoncesPtr = ptr^.izq

    SinoPtr = pila[cima]Cima=cima-1

    Fin_si

    Fin_mientrasFin.

    RECORRIDO INORDENSi el rbol no esta vaci, el mtodo implica los siguientes pasos:

    - Recorrer el subrbol izquierdo (Izq)- Visitar el nodo (Raiz)- Recorrer el subrbol derecho (Der)

    El algoritmo usando recursividad:

    inorden (var p:pnodo)inicio

    si p nil entoncesinorden (p^.izq)escribir p^.infinorden (p^.der)

    fin sifin

    En el rbol, los nodos se han numerado en el orden que son visitados en el recorrido enorden.

    .

    85

  • 8/8/2019 TEMAS SIS2204(2)

    86/129

    El primer recorrido es el subrbol izquierdo del nodo raz. Este consta de los nodos (B, D y E), por loque siguiendo con el orden (Izq, Raiz, Der), se visita primero D, luego B y por ultimo E.

    Despus se visita el nodo raz A.

    Por ultimo se visita el subrbol derecho que consta de los nodos (C, F y G). siguiendo el orden (Izq,

    Raiz, Der), se visita primero F, luego C y por ultimo G.

    El recorrido es: D-B-E-A-F-C-G

    El algoritmo sin usar recursividad:

    InordenInicio

    Cima = 1Pila[cima]=nilPtr = raiz

    Mientras ptr nil hacerMientras ptr nil hacer

    Cima=cima+1Pila[cima] = ptrPtr = ptr^.izq

    Fin_mientras

    Ptr = pila[cima]Cima=cima-1Tieneder =false

    Mientras Ptr nil y no tieneder hacer

    Mostrar ptr ^.infSi ptr^.der nil entonces

    Ptr = ptr^.derTieneder = true

    SinoPtr = pila[cima]Cima=cima-1

    Fin_siFin_mientras

    Fin_mientrasFin.

    RECORRIDO POSTORDEN

    Si el rbol no esta vaci, el mtodo implica los siguientes pasos:- Recorrer el subrbol izquierdo (Izq)- Recorrer el subrbol derecho (Der)- Visitar el nodo (Raiz)

    El algoritmo usando recursividad:

    postorden (var p:pnodo)

    86

  • 8/8/2019 TEMAS SIS2204(2)

    87/129

    iniciosi p nil entonces

    postorden (p^.izq)postorden (p^.der)escribir p^.inf

    fin sifin

    En el rbol, los nodos se han numerado en el orden que son visitados en el recorrido preorden.

    .

    Primero se visita el subrbol izquierdo. Este consta de los nodos (B, D y E), por lo que siguiendo conel orden (Izq, Der, Raiz), se visita primero D, luego E y por ultimo B.

    Por ultimo se visita el subrbol derecho que consta de los nodos (C, F y G). Siguiendo el orden (Izq,Der, Raiz), se visita primero F, luego G y por ultimo C.

    Por ultimo se visita el nodo raz A.

    El recorrido es: D-E-B-F-G-C-A

    El algoritmo sin usar recursividad:

    PostordenInicio

    Cima = 1Pila[cima]=nilPtr = raizMientras ptr nil hacerMientras ptr nil hacer

    Cima=cima+1Pila[cima] = ptr

    Si ptr^.der nil entoncesCima = cima+1Pila[cima]= -ptr^.der

    Fin_siPtr = ptr^.izq

    Fin_mientras

    Ptr = pila[cima]Cima = cima-1Salir = false

    87

  • 8/8/2019 TEMAS SIS2204(2)

    88/129

    Mientras ptr nil y no salir hacerSi prt > 0 entonces

    Mostrar prt^.infPtr = pila[cima]Cima = cima-1

    SinoPtr = -ptrSalir=true

    Fin_siFin_mientras

    Fin_mientrasFin.

    INSERCIN DE DATOS

    La insercin de datos en un arbol binario de bsqueda, se realiza de acuerdo al valor que se debeinsertar, si el dato es menor que la raz es insertada en el subrbol izquierdo, si el dato es mayor que laraz es insertada en el subrbol derecho.

    Insertar(Var raiz:pnodo;dato:entero)

    InicioSi raiz = nil entoncesNew(raiz)Raiz^.inf = datoRaiz^.izq = nilRaiz^.der = nil

    SinoSi dato > raiz^.inf entoncesInsertar (raiz^.der,dato)

    SinoInsertar(raiz^.izq,dato)

    Fin_siFin_si

    Fin.

    ELIMINAR UN DATO

    Existen varios casos de eliminacin en un arbol binario de bsqueda:

    Nodo que no tiene hijos:

    Solucin : Ptr = nil

    Nodo que tiene un hijo:

    88

  • 8/8/2019 TEMAS SIS2204(2)

    89/129

    Solucin : Ptr = ptr^.der

    Solucin : Ptr = ptr^.izq

    Nodo que tiene dos hijos:

    En este caso existen dos posibilidades de reemplazo, donde el nodo a ser eliminado puede serreemplazado por los siguientes nodos:

    caso a).- El nodo del subrbol izquierdo que se encuentra mas a la derecha

    caso b).- El nodo del subrbol derecho que se encuentra mas a la izquierda

    89

  • 8/8/2019 TEMAS SIS2204(2)

    90/129

    ALGORITMO :

    Eliminar(dato:integer;Var ptr:pnodo)InicioSi ptr = nil entoncesMostrar "no existe el elemento"

    SinoSi dato > ptr^.inf entocesEliminar (dato,ptr^.der)

    SinoSi dato < ptr^.inf entoncesEliminar(dato,ptr^.izq)

    SinoAux =ptrSi aux^.izq=nil entoncesPtr =aux^.der

    SinoSi aux^.der = nil entoncesPtr=aux^.izq

    SinoReemplazar(aux^.izq)

    Fin_siFin_si

    Free(aux)

    Fin_siFin_si

    Fin_siFin.

    Reemplazar(Var Ader:pnodo)InicioSi Ader^.der nil entonces

    Reeplazar(Ader^.der)SinoPtr^.inf = Ader^.infaux = AderAder = Ader^.izq

    Fin_siFin.

    BSQUEDA DE DATOS

    La bsqueda de un nodo comienza en el nodo raz y sigue estos pasos:

    La clave buscada se compara con la clave del nodo raz. Si las claves son iguales, la bsqueda se detiene, o si el subrbol esta vaci. Si la clave buscada es mayor que la clave raz, la bsqueda se reanuda en el subrbol derecho. Si la clave buscada es menor que la clave raz, la bsqueda se reanuda en el subrbol izquierdo.

    6.4 RBOLES BINARIOS DE EXPRESIONES

    Los rboles binarios se utilizan para almacenar expresiones. Por ejemplo, elarbol de la figura representa la expresin (A+B)*C. Las expresiones

    90

  • 8/8/2019 TEMAS SIS2204(2)

    91/129

    matemticas se pueden escribir segn diversos tipos de notaciones. La notacin infija es la empleadahabitualmente y requiere el uso de parntesis, pero nicamente cuando es necesario modificar laprioridad entre los distintos operadores.

    CONSTRUCCIN A PARTIR DE UNA EXPRESIN EN NOTACIN

    CONVENCIONAL

    Para construir se utilizaran, como estructura de datos auxiliares, una pila de punteros a los nodos deun rbol y otra pila de operadores para retenerlos temporalmente hasta que llegue el momento deincorporarlos al rbol. Los pasos a seguir son lo siguientes.1. Cuando se lee un OPERANDO se crea un rbol de un nodo y se mete el apuntador a el en

    correspondiente pila.2. Cuando se lee un OPERADOR se retiene en la pila de operadores. Los operadores se van poniendo

    en esta pila hasta encontrar uno con mayor o igual prioridad, en cuyo caso se sacan los que hubieraen la pila de mayor o igual prioridad y se coloca en ella este ultimo operador leido.

    3. Cuando se lee un PARNTESIS IZQUIERDO se retiene en la pila de operadores.4. Cuando se lee un PARNTESIS DERECHO se sacan los OPERADORES que hubiera en la pila deoperadores hasta encontrar el parntesis izquierdo.

    5. El proceso termina cuando se acaba la entrada y la pila de operadores queda vaca.Nota: Al sacar de la pila de operadores uno de ellos, extraer de la pila de punteros los dos ltimosapuntadores. Con estos tres elementos, se forma un nuevo rbol cuya raz almacena el operador ylos punteros anteriores. El apuntador a este nuevo rbol se coloca ahora en la pila de apuntadores.

    Ejemplo: Sea la expresin :Q = 4 + 5 ^ ( 2 * 3 ) + 8

    1.-

    2.- El ) saca los operadores de la pila hasta el (

    91

  • 8/8/2019 TEMAS SIS2204(2)

    92/129

    3.- El + saca de la pila todos los operadores con mayor prioridad que el y l continuacin se coloca el

    4.-

    5.-

    6.5 RBOLES EQUILIBRADOS O AVL

    Es una suavizacin de las restricciones para formar rboles perfectamente equilibrados. Un rbol AVL(llamado as por las iniciales de sus inventores: Adelson-Velskii y Landis) es un rbol binario de

    92

  • 8/8/2019 TEMAS SIS2204(2)

    93/129

    bsqueda en el que para cada nodo, las alturas de sus subrboles izquierdo y derecho no difieren enms de 1.

    El algoritmo para mantener un rbol AVL equilibrado se basa en reequilibrados locales, de modo queno es necesario explorar todo el rbol despus de cada insercin o borrado.

    DEFINICINLa definicin no slo es simple, sino que adems conduce a un procedimiento de reequilibradorelativamente sencillo, y a una longitud de camino media prcticamente idntica a la del rbolperfectamente equilibrado.

    En un rbol AVL, se pueden realizar en O(lon n) unidades de tiempo, incluso en el peor de los casos,las siguientes operaciones:

    Encontrar un nodo con una clave dada.Insertar un nodo con una clave dada.

    Borrar un nodo con una clave dada.Vamos a aadir un campo nuevo a la declaracin del tipo TArbol, que se llamar factor de equilibrio(equ), este factor de equilibrio (equ) es la diferencia entre las alturas del rbol derecho y el izquierdo:

    FE = altura subrbol derecho - altura subrbol izquierdo;

    Por definicin, para un rbol AVL, este valor debe ser -1, 0 1.

    Condiciones para variar equ:

    o La insercin se hace en las hojaso Cuando creamos un nuevo nodo el campo de equilibrio vale 0, ya que la altura delsubrbol izquierdo es igual que la del derecho.

    o Cuando insertamos por la derecha incrementamos el valor del campo de equilibrio.o Cuando insertamos por la izquierda decrementamos el valor del campo de equilibrio.

    INSERCIN EN AVL

    La insercin se hace siempre en las hojas, y vamos a tener un campo de equilibrio, adems una variableglobal llamada crecido de tipo BOOLEAN, que en el momento de insertar lo vamos a poner a TRUEpara despus controlar si se ha desequilibrado o no.

    Se sube restando o sumando 1 hasta llegar a un cero. Si a la hora de sumar o restar un uno se sale delrango hay que reequilibrar.

    DESEQUILIBRIOS Y REEQUILIBRIOS

    Al insertar un nuevo nodo en un rbol equilibrado se pueden producir desequilibrios, que quedarnrepresentados en los casos mostrados a continuacin.

    93

  • 8/8/2019 TEMAS SIS2204(2)

    94/129

    En las figuras, las cajas rectangulares representan subrboles, y la altura aadida por la insercin seindica con cruces. Simples transformaciones restauran el equilibrio deseado.

    DESEQUILIBRIO IZQUIERDA - IZQUIERDA SIMPLE.

    Dado el siguiente Arbol Balanceado, donde se observa que el nodo B ya se encuentra crecido en 1 nivel

    en su subarbol izquierdo.

    Se aade al subarbol izquierdo del nodo A un nuevo dato "X", lo que causa un desequilibrio en el