TEMAS SIS2204(2)
-
Upload
marcelo-quiroz-alcocer -
Category
Documents
-
view
216 -
download
0
Transcript of TEMAS SIS2204(2)
-
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