You are on page 1of 46

Prof.

Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

PILAS
REPRESENTACION DE PILAS Arreglos Listas OPERACIONES CON PILAS Insertar un elemento - Push - en la pila. Eliminar un elemento - Pop - en la pila. Operaciones auxiliares Pila_vaca Pila_llena

Pila _ vaca Este algoritmo verifica si una estructura tipo pila PILA est vaca, asignando a BAND el valor de verdad correspondiente. La pila se implementa en un arreglo unidimensional. TOPE es un parmetro de tipo entero. BAND es un parmetro de tipo booleano Pila _ vaca (PILA, TOPE, BAND) Si (tope = o) (verifica si no hay elementos almacenados en la pila) entonces Band verdadero (la pila est vaca) Sino Band falso (la pila no est vaca) Fin si

Pila _llena Este algoritmo verifica si una estructura tipo pila PILA est llena asignando a BAND el valor de verdad correspondiente. La pila se implementa en un arreglo unidimensional de MAX elementos. Tope es un parmetro tipo entero. BAND es un parmetro booleano Pila _llena (PILA, TOPE, MAX, BAND) Si (tope = max) entonces Band verdadero Sino Band falso Fin si

(la pila est llena) (la pila est vaca)

Recopilacin de material de Estructura de Datos

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

INSERTAR Este algoritmo agrega el elemento DATO en una estructura tipo pila PILA ; si la misma no est llena actualiza el valor de TOPE, MAX, representa el numero mximo de elementos que puede almacenar pila. Tope es un parmetro tipo entero Insertar (PILA, TOPE, MAX, DATO) Llamar Pila _ llena (PILA, TOPE, MAX, BAND) Si BAND = Verdadero entonces Imprimir desbordamiento (la pila esta llena) Sino TOPE TOPE + 1 PILA (TOPE) DATO Fin si QUITAR Este algoritmo saca un elemento _ dato de una estructura tipo pila_pila, si esta no se encuentra vaca. El elemento que se elimina es el que se encuentra en la posicin indicada por TOPE. Quitar (PILA, TOPE, DATO) Llamar a PILA _ VACA (PILA, TOPE, BAND) Si BAND = Verdadero entonces Imprimir Subdesbordamiento_pila vaca) Sino DATO PILA (TOPE) TOPE TOPE - 1 Fin si

APLICACIONES DE PILAS Llamadas a subprogramas Recursividad Tratamiento de expresiones aritmticas Ordenacin

CONVERSIN DE NOTACIN INFIJA A POSTFIJA

CONVERSIN DE NOTACIN INFIJA A PREFIJA


Recopilacin de material de Estructura de Datos 2

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

EI: expresin infija EPRE: expresin prefija Conv_Prefija(EI,EPRE) Tope 0 Mientras EI < > cadena vaca Tomar el smbolo ms a la derecha de EI Recortar la expresin Si el smbolo es parntesis derecho entonces (Insertar el smbolo a la pila) Llamar a Insertar (Pila, Tope, Max, Simbolo) Sino Si smbolo es parntesis izquierdo entonces Mientras (Pila(TOPE), < > Parntesis derecho entonces Llamar a Sacar (PILA, TOPE, DATO) EPRE EPRE + DATO Fin mientras (Sacamos el parntesis derecho de pila y no se agrega a EPRE) Llamar a Sacar (PILA, TOPE, DATO) Sino Si smbolo es un operando entonces Agregar smbolo a EPRE Sino (Es un operador) Llamar Pila_vacia (PILA, TOPE, BAND) Mientras (BAND = falso y (la prioridad del operador sea menor que la prioridad del operador que est en la cima de la Pila)) Llamar a Sacar (PILA, TOPE, DATO) EPRE EPRE + DATO Llamar a Pila_vacia (PILA, TOPE, BAND) Fin mientras Llamar Insertar (PILA, TOPE, MAX, SMBOLO) Finsi Finsi Finsi Fin mientras Llamar Pila_vacia (PILA, TOPE, BAND) Mientras BAND = falso Llamar a Sacar (PILA, TOPE, DATO) EPRE EPRE + DATO Llamar a Pila_vacia (PILA, TOPE, BAND) Fin mientras Imprimir EPRE en forma invertida LA CLASE PILA
Recopilacin de material de Estructura de Datos 3

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

COLAS
Estructura lineal de datos en las que los elementos se introducen por un extremo y los que ya existentes se eliminan por el otro. Se eliminan ene. Mismo orden que fueron insertados, esta caractersticas hace que el nombre de la estructura sea (FIFO) REPRESENTACION DE COLA Las pilas y las colas son estructuras de datos estndar en programacin. Este tipo de estructuras se puede representar mediante Arreglos Listas OPERACIONES CON COLAS Insertar un elemento en la cola. Eliminar un elemento en la cola. Operaciones auxiliares Cola_vaca Cola_llena Inserta_cola Este algoritmo inserta elemento dato al final de una estructura tipo cola. FRENTE Y FINAL son los parmetro que indica, respectivamente, el inicio y fin de COLA. La primera vez FRENTE Y FINAL tiene valor cero, ya que la cola esta vaca. MAX es el mximo nmero de elemento que puede almacenar la cola Inserta_cola (COLA, MAX, FRENTE, FINAL, DATO) Si FINAL < MAX entonces - verifica que hay espacio libre FINAL FINAL + 1 (actualiza FINAL) COLA(FINAL) DATO Si FINAL = 1 entonces (se insert el primer elemento de COLA) FRENTE 1 Fin si Si no Imprimir desbordamiento - Cola llena Fin si

Recopilacin de material de Estructura de Datos

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Elimina_cola Este algoritmo elimina el primer elemento de una estructura tipo cola y la almacena en DATO. FRENTE Y FINAL son los punteros que indican respectivamente el inicio y fin de cola Elimina_cola (COLA, FRENTE, FINAL, DATO) Si FRENTE < > 0 entonces (verifica que la cola no este vaca) DATO = COLA (FRENTE) Si FRENTE = FINAL entonces (verifica si hay un solo elemento) FRENTE 0 FINAL 0 Si no

(indica cola vaca)

FRENTE FRENTE + 1 Fin si Si no Imprimir desbordamiento cola_vacia Fin si Cola_vacia Este algoritmo determina si una estructura de dato tipo cola esta vaca, asignando a BAND el valor de verdad correspondiente. Cola_vacia (COLA, FRENTE, BAND) Si FRENTE = 0 entonces BAND verdadero Si no BAND falso Fin si Cola _ llena Este algoritmo determina si una estructura tipo cola esta llena, asignando a BAND el valor de verdad correspondiente, donde MAX es el numero mximo de elemento que puede almacenar cola Cola _ llena (COLA, FINAL, MAX, BAND) Si FINAL = MAX entonces BAND verdadero Si no BAND falso Fin si

Recopilacin de material de Estructura de Datos

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

COLAS CIRCULARES
Inserta_Circular Este algoritmo inserta el elemento DATO al final de una estructura tipo colacircular COLACIR-.FRENTE y FINAL, son los punteros que indican, respectivamente el inicio y el final de la Cola Circular. MAX, es el nmero mximo de elementos que puede tener COLACIR. Inserta_Circular (COLACIR, MAX, FRENTE, FINAL; DATO) Si ((FINAL=MAX) y (FRENTE=1)) o ((FINAL+1)=FRENTE) Entonces. IMPRIMIR desbordamiento Cola Llena Sino Si (FINAL=MAX) Entonces. FINAL 1 Sino FINAL FINAL + 1 Finsi COLACIR (FINAL) DATO Si (FRENTE=0) Entonces. FRENTE 1 Finsi Finsi Elimina_Circular Este algoritmo elimina el primer elemento de una estructura tipo Colacircular COLACIR- y lo almacena en DATO. FRENTE y FINAL, son punteros que indican, respectivamente el inicio y el final de la estructura. MAX, es el tamao de COLACIR. Elimina_Circular (COLACIR, MAX, FRENTE, FINAL, DATO) Si (FRENTE = 0) Entonces Verifica si esta vaca IMPRIMIR Desbordamiento Cola vaca Sino DATO COLACIR (FRENTE) Si (FRENTE = FINAL) Entonces. Verifica si hay un solo elemento FRENTE 0 FINAL 0 Sino Si (FRENTE = MAX) Entonces. FRENTE 1 Sino FRENTE FRENTE +1 Finsi Finsi Finsi
Recopilacin de material de Estructura de Datos 6

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

APLICACIONES DE COLAS Colas de impresin (una sola impresora para atender a varios usuarios). Sistemas de tiempo compartido (compartir recursos como CPU y memoria, los procesos se asignan a una cola de espera, suponiendo que todos tienen una misma prioridad) LA CLASE COLA

RECURSIVIDAD
Factorial_rec (N) Si N = 0 entonces Factorial_rec Sino Factorial_rec Fin si Este algoritmo calcula el factorial de un nmero N en forma recursiva, donde N es un valor numrico entero, positivo o nulo. Cuando se realiza una llamada recursiva, se utiliza en forma implcita una estructura tipo pila para almacenar las instrucciones pendientes de ejecutar con todos los valores que tienen la variable o constante en ese momento. Cuando se termin la ejecucin se llega al estado bsico, se toma la instruccin que se encuentra en TOPE de la pila y se contina operando. Esta accin se repite hasta que la pila queda vaca. Ejemplos iterativos N* Factorial_rec(N-1) (llamada paso recursivo)

- (Paso Bsico)

Factorial_ite(N) FACT 1 Mientras (N > 0) FACT N * FACT N N1 Fin Mientras Imprimir FACT Este algoritmo calcula la factorial de un nmero N en forma iterativa donde N es un valor numrico entero, positivo o nulo. FACT es una variable de tipo entero.
Recopilacin de material de Estructura de Datos 7

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Factorial2_ite (N) FACT 1 Desde X = 2 hasta N FACT FACT * X Fin Desde Imprimir FACT Este algoritmo calcula el factorial de un nmero N en forma iterativa donde N es un valor numrico entero, positivo o nulo. FACT y X son variables de tipo entero. FIBONACCI Fibonacci_rec (N) Si ((N = 0) o (N = 1)) entonces ) Fibonacci_rec < N Sino Fibonacci_rec < Fibonacci_rec (N - 1) + Fibonacci_rec (N - 2) -llamadas recursivas Fin si Este algoritmo (Fibonacci_rec (N) ) calcula el nmero Fibonacci correspondiente a N en forma recursiva, donde N es un valor numrico entero, positivo o nulo. Fibonacci_ite (N) Si ((N= 0) o (N = 1)) entonces FIBO Sino FIBA 0 FIBB 1 X 2 Fin si Mientras (X < = N) FIBO FIBB + FIBA FIBA FIBB FIBB FIBO X X+1 Fin Mientras Imprimir FIBO
Recopilacin de material de Estructura de Datos 8

Paso Bsico

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Recursividad en rboles. Los rboles son estructuras inherentemente recursivas. Recursividad en Ordenacin y Bsqueda.

LISTAS
Las listas son colecciones de elementos llamados nodos; el orden entre stos se establece por medio de un tipo de dato denominado puntero, apuntadores, direcciones o referencias a otros nodos. Es importante distinguir entre un dato de tipo apuntador y el dato contenido en la celda al cual ste apunta. La notacin P ^D indica que P es un apuntador al nodo D. Crear (P) seala el proceso de asignacin de memoria al nodo P. Quitar (P) seala el proceso inverso, es decir, cuando se libera una posicin de memoria apuntada por P.

LISTAS SIMPLEMENTE LIGADAS

OPERACIONES CON LISTAS SIMPLEMENTE LIGADAS Recorrido de la lista. Insercin de un elemento. Borrado de un elemento. Bsqueda de un elemento. OPERACIN DE INSERSIN SIMPLEMENTE LIGADA Insertar un nodo al inicio de la lista Insertar un nodo al final de la lista Insertar un nodo antes que otro cuya informacin es X Insertar un nodo despus que otro cuya informacin es X

No se considera en estos algoritmos que la lista est vaca, se considerar que la lista en la que se va a insertar ya existe, es decir que ya tiene un nodo.

a) Insercin al inicio de la Lista Simplemente Ligada Inserta _ Inicio Este algoritmo agrega un nodo al inicio de una lista simplemente ligada. P es el apuntador al nodo de la misma y DATO es la informacin que se almacenar en el nuevo nodo. Q es una variable de tipo apuntador. INFO y LIGA son los campos de cada nodo de la lista.
Recopilacin de material de Estructura de Datos 9

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Inserta _ inicio (P, DATO) Crear (Q) Q^.INFO Q^.LIGA P Q

DATO P

b) Insercin al final de una Lista Simplemente Ligada Inserta _ Final Este algoritmo inserta un nodo al final de una lista. P es el apuntador al primer nodo de la lista y DATO es la informacin que se almacenar en el nuevo nodo. Q y P son variables de tipo puntero. INFO y LIGA son los campos de cada nodo. Inserta _ Final (P, DATO) T P Mientras (T^.LIGA <> NIL) recorre la lista hasta llegar al ltimo elemento T T^.LIGA Fin Mientras Crear (Q) Q^.INFO DATO Q^.LIGA NIL T^.LIGA Q c) Insercin de un nodo antes que otro en una Lista Simplemente Ligada Inserta _ Antes _ X Este algoritmo inserta un nodo antes de un nodo dado como referencia en una lista simplemente ligada. P es el apuntador al primer nodo se la lista. DATO indica la informacin que se almacena en el nuevo nodo, y X representa el contenido informacin del nodo dado como referencia. Q, X, T son variables de tipo apuntador. INFO, LIGA son los campos de los nodos de la lista. BAND es una variable de tipo entero.

Recopilacin de material de Estructura de Datos

10

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Inserta _ Antes _ X (P, DATO, X) Q P BAND 1 Mientras (Q^.INFO <> X) Y (BAND = 1) Si (Q^.LIGA <> NIL) entonces T Q Q Q^.LIGA Sino BAND 0 Fin Si Fin Mientras Si (BAND = 1) entonces CREAR (X) X^.INFO DATO Si (P = Q) entonces el nodo dado como referencia es el primero X^.LIGA P P X Sino P^.LIGA X X^.LIGA Q Fin Si Sino Imprimir El nodo como referencia no se encuentra en la lista Fin Si d) Insercin de un nodo despus que otro en una Lista Simplemente Ligada Inserta _ Despus _ X Este algoritmo inserta un nodo despus de otro nodo dado como referencia en una lista simplemente ligada. P es el apuntador al primer nodo de la lista. DATO indica la informacin que se almacenar en un nuevo nodo, X representa el .contenido informacin del nodo dado como referencia. Q, T son variables de tipo apuntador. INFO, LIGA son los campos de los nodos de la lista. BAND es una variable tipo entero.

Recopilacin de material de Estructura de Datos

11

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Inserta _ Despus _ X (P, DATO, X) Q P BAND 1 Mientras (Q^.INFO<>X) Y (BAND = 1) Si (Q^.LIGA <> NIL) entonces Q Q^.LIGA Sino BAND 0 Fin Si Fin Mientras Si (BAND = 1) entonces CREAR (T) T^.INFO DATO T^.LIGA Q^.LIGA Q^.LIGA T Sino Imprimir El nodo dado como referenciado NO se encuentra en la lista Fin Si ELIMINACIN EN LISTAS SIMPLEMENTE LIGADAS Eliminar el primer nodo. Eliminar el ltimo nodo Eliminar un nodo con informacin X. Eliminar el nodo anterior al nodo con informacin X. Eliminar el nodo posterior al nodo con informacin X. a) Eliminar el primer nodo de una Lista Simplemente Ligada Este algoritmo permite eliminar el primer nodo de una lista simplemente ligada. P es el apuntador al primer nodo de la lista. Q es una variable de tipo apuntador. INFO, LIGA son los campos de los nodos de la lista Elimina _ inicio (P) QP (si la lista tuviera solo un elemento entonces a P se le asignara NIL que es el valor de Q^.LIGA en caso contrario quedara con la direccin del siguiente nodo) P Q^.LIGA (Redefine al puntero a inicio de la lista) Quitar (Q) b) Eliminar el ltimo nodo de una Lista Simplemente Ligada Este algoritmo permite eliminar el ltimo nodo de una Lista Simplemente Ligada.

Recopilacin de material de Estructura de Datos

12

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

P es el apuntador al primer nodo de la lista.Q, T son variables del tipo apuntador. INFO, LIGA son los campos de los nodos de la lista. Elimina_ ultimo (P) QP Si (P^.LIGA= NIL) entonces (se verifica si la lista tiene un solo elemento) P NIL Sino (no es solo un elemento) Mientras Q^.LIGA < > NIL TQ Q Q^.LIGA Fin mientras T^.LIGA NIL Fin si Quita (P) c) Eliminar un nodo con informacin X de una Lista Simplemente Ligada Este algoritmo elimina un nodo con informacin X de una Lista Simplemente Ligada. P es el apuntador al primer nodo de la lista. Q, T son variables del tipo apuntador. BAND es una variable de tipo entero. INFO, LIGA son los campos de los nodos de la lista. Elimina_ X (P, X) QP BAND 1 Mientras (Q^.LIGA < > X) y (BAND =1) Si (Q^.LIGA < > NIL) entonces TQ Q Q^.LIGA Sino BAND 0 Fin si Fin mientras Si BAND = 0 entonces Imprimir el elemento con informacin X no se encuentra en la lista Sino Si (P=Q) entonces (se verifica si el elemento a eliminar es el primero) P Q^.LIGA Sino T^.LIGA Q^.LIGA Fin si Quitar (Q) Fin si

Recopilacin de material de Estructura de Datos

13

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

d) Eliminar el nodo anterior al nodo con informacin X en una Lista Simplemente Ligada Elimina_antes_ X (P, X) Este algoritmo elimina el nodo anterior al nodo con informacin X de una Lista Simplemente Ligada. P es el apuntador al primer nodo de la lista. Q, T y R son variables del tipo apuntador. BAND es una variable de tipo entero. INFO, LIGA son los campos de los nodos de la lista. Si (P^.INFO = X) entonces Imprimir No existe un nodo que preceda al que contiene informacin X Sino Q P T P BAND 1 Mientras (Q^.INFO < > X) y (BAND = 1) Si (Q^.LIGA < > NIL) entonces R T T Q Q Q^.LIGA Sino BAND 0 Fin si Fin mientras Si BAND = 0 entonces Imprimir el elemento no se encuentra en la lista Sino Si (P^.LIGA = Q) entonces (se verifica si el elemento a eliminar es el primero) P Q Sino R^.LIGA Q Fin si Quitar (T) Fin si Fin si LISTAS CIRCULARES LISTAS DOBLEMENTE LIGADAS OPERACIONES CON LISTAS DOBLEMENTE LIGADAS

Recopilacin de material de Estructura de Datos

14

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Recorrido de la lista Insercin de un elemento Borrado de un elemento

INSERCIN EN LISTAS DOBLEMENTE LIGADA Al inicio de la lista doblemente ligada Al final de la lista doblemente ligada Antes/despus de un nodo con informacin X

a) Insercin al inicio de la lista doblemente ligada Este algoritmo inserta un nodo al inicio de una lista doblemente ligada. P es el puntador al primer nodo de la lista y DATO es la informacin que se almacenar en el nuevo nodo. Q es una variable de tipo apuntador. INFOR, LIGADER, LIGAIZQ son los campos de cada nodo de la lista. Inserta_princicpio (P, DATO) Crear (Q) Q^.INFOR DATO Q^.LIGADER P P^.LIGAIZQ Q Q^.LIGAIZQ NIL P Q b) Insercin al final de la lista doblemente ligada En este caso el nuevo nodo se coloca al final de la lista doblemente ligada, convirtindose en el ltimo. Este algoritmo inserta un nodo al final de una lista doblemente ligada. F es el puntador al ltimo nodo de la lista y DATO es la informacin que se almacenar en el nuevo nodo. Q es una variable de tipo puntero. INFOR, LIGADER, LIGAIZQ son los campos de cada nodo de la lista. Inserta_final (F, DATO) Crear (Q) Q^.INFOR DATO F^.LIGADER Q Q^.LIGAIZQ F Q^.LIGADER NIL F Q
Recopilacin de material de Estructura de Datos 15

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

c) Insercin de un nodo antes que otro en una lista doblemente ligada En este caso el nuevo nodo se coloca precediendo a otro dado como referencia. Este algoritmo inserta un nodo antes que otro dado como referencia, con informacin X P es el puntador al primer nodo de la lista y DATO es la informacin que se almacenar en el nuevo nodo. Q, T y R son variables de tipo puntero. INFOR, LIGADER, LIGAIZQ son los campos de cada nodo de la lista. Inserta_antes_X (P, DATO, X) Q P Mientras ( (Q^:LIGADER < > NIL ) y ( Q^.INFOR < > X ) Q Q^.LIGADER Fin Mientras Si ( Q^.INFOR = X ) entonces Crear T - se crea el nuevo nodo T^.INFOR DATO T^.LIGADER Q R Q^.LIGAIZQ Q^.LIGAIZQ T Si ( P = Q ) entonces P T T^.LIGAIZQ NIL Sino R^.LIGADER T T^.LIGAIZQ R Fin Si Sino Imprimir El elemento no se encuentra en las lista Fin Si

ELIMINACIN EN LISTAS DOBLEMENTE LIGADA Eliminar el primer nodo Eliminar el ltimo nodo Eliminar el nodo con informacin X Eliminar el nodo anterior/posterior con informacin X Para los casos de borrado de un elemento de la lista, no se considerar que sta se encuentre vaca. a) Eliminar el primer nodo de una lista doblemente ligada Consiste en quitar el primer nodo de la lista, cualquiera sea su informacin, redefiniendo el puntero al inicio de la misma.
Recopilacin de material de Estructura de Datos 16

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Este algoritmo elimina el primer nodo de una lista doblemente ligada. P y F son los apuntadores al primer y ltimo nodo de la lista, respectivamente. Q es una variable de tipo puntero. INFOR, LIGADER, LIGAIZQ son los campos de cada nodo de la lista. Elimina_inicio ( P, F ) Q P Si (Q^:LIGADER < > NIL ) entonces - verifica si la lista tiene un solo nodo P Q^.LIGADER P^.LIGAIZQ NIL Sino P NIL F NIL Fin Si Quitar (Q) b) Eliminar el ltimo nodo de una lista doblemente ligada Este algoritmo elimina el ltimo elemento de una lista doblemente ligada. P y F son los apuntadores al primer y ltimo nodo de la lista, respectivamente. Q es una variable de tipo puntero. INFOR, LIGADER, LIGAIZQ son los campos de cada nodo de la lista. Elimina_ultimo ( P, F ) Q F Si (Q^:LIGAIZQ < > NIL ) entonces - verifica si la lista tiene un solo nodo PF Q^.LIGAIZQ P^.LIGADER NIL Sino F NIL P NIL Fin Si Quitar (Q)

c) Eliminar un nodo con informacin X Este algoritmo elimina el nodo con informacin X de una lista doblemente ligada. P y F son los apuntadores al primer y ltimo nodo de la lista, respectivamente. Q, T y R son variables de tipo apuntador. INFOR, LIGADER, LIGAIZQ son los campos de cada nodo de la lista.

Recopilacin de material de Estructura de Datos

17

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Elimina_X ( P, F, X ) Q P Mientras ( (Q^:LIGADER < > NIL ) y ( Q^.INFOR < > X ) Q Q^.LIGADER Fin Mientras Si ( Q^.INFOR = X ) entonces Si (( Q = P ) y ( Q = F )) entonces P NIL F NIL Sino Si ( Q = P ) - es el primero P Q^.LIGADER P^.LIGAIZQ NIL Sino Si ( Q = F ) - es el ltimo F Q^.LIGAIZQ F^.LIGADER NIL Sino - es u nodo intermedio T Q^.LIGAIZQ R Q^.LIGADER T^.LIGADER R R^.LIGAIZQ T Finsi Finsi Finsi Sino Imprimir El elemento con informacin X no se encuentra en las lista Finsi

d) Eliminar el nodo anterior al nodo con informacin X

Este algoritmo elimina, si se puede, el nodo anterior a aquel que contiene la informacin X de una lista doblemente ligada. P es el apuntador al primer nodo de la lista. Q, T y R son variables de tipo apuntador. INFOR, LIGADER, LIGAIZQ son los campos de cada nodo de la lista.

Recopilacin de material de Estructura de Datos

18

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Elimina_antes_X ( P, X ) Q P Mientras ( (Q^:LIGADER < > NIL ) y ( Q^.INFOR < > X ) Q Q^.LIGADER Fin Mientras Si ( Q^.INFOR = X ) entonces Si ( P = Q ) entonces Imprimir No existe nodo anterior al primero Sino T Q^.LIGAIZQ Si ( P = T ) entonces - es el primer nodo de la lista P Q P^.LIGAIZQ NIL Sino R T^.LIGAIZQ Q^.LIGAIZQ R R^.LIGADER Q Finsi Quitar (T) Finsi Sino Imprimir El elemento con informacin X no se encuentra en las lista Finsi

LISTAS DOBLEMENTE LIGADAS CIRCULARES En las listas doblemente ligadas circulares, el campo liga izquierda del primer nodo de la lista apunta al ltimo, y el campo liga derecha de ste apunta al primero.

Simplemente ligadas circulares Simplemente ligadas LISTAS Doblemente ligadas Doblemente ligadas circulares

LA CLASE LISTA
Recopilacin de material de Estructura de Datos 19

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

RBOLES
RBOLES BINARIOS OPERACIONES EN RBOLES BINARIOS Crea _ rbol Esta algoritmo crea un rbol en memoria APNODO es una variable de tipo ENLACE puntero a un nodo- . La primera vez APNODO se crea en el programa principal. INFO, IZQ, DER son campos del registro NODO. INFO es de tipo carcter. IZQ, DER es de tipo apuntador. Las variables RESP y OTRO son de tipo carcter y de tipo ENLACE respectivamente. Crea_ rbol (APNODO) Leer APNODO^.INFO ` (lee la informacin y se guarda en el nodo) Ingresar existe nodo por la izquierda: SI /NO, RESP Si RESP= SI entonces Crea (OTRO) ` (se crea un nuevo nodo) APNODO^.IZQ OTRO Regresa a crea _ rbol con APNODO^.IZQ ` (llamada recursiva) Sino APNODO^.IZQ NIL Fin si Ingresar existe nodo por la derecha: SI /NO, RESP Si RESP= SI entonces Crea (OTRO) ` (se crea un nuevo nodo) APNODO^.DER OTRO Regresa a crea _ rbol con APNODO^.DER ` (llamada recursiva) Sino APNODO^.DER NIL Fin si PREORDEN Este algoritmo realiza el recorrido en preorden de un rbol binario. APNODO es un registro de tipo ENLACE puntero a un nodo INFO, IZQ, DER son campos del registro nodo, INFO es un variable tipo carcter; IZQ, DER, son de tipo puntero. PREORDEN (APNODO) Si (APNODO NIL) entonces Visitar el APNODO Imprimir APNODO^.INFO Regresar a Preorden con APNODO^.IZQ ` (llamada recursiva a preorden con la rama izquierda del nodo en cuestin) Regresar a Preorden con APNODO^.DER ` (llamada recursiva a preorden con la rama derecha del nodo en cuestin) Fin si
Recopilacin de material de Estructura de Datos 20

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Observacin: Cabe destacar que el trmino visitar se puede reemplazar por cualquier otra instruccin valida por ejemplo: Imprimir, sumar o comparar la informacin del nodo. Esta aclaracin se aplica tambin para los otros tipos de recorrido. IN ORDEN Este algoritmo realiza el recorrido in orden de un rbol binario. APNODO es un registro de tipo enlace puntero a un nodo INFO, IZQ Y DER son los campos del registro nodo. INFO es una variable de tipo carcter IZQ Y DER son variables del tipo puntero IN ORDEN (APNODO) Si APNODO <> NIL entonces Regresar IN ORDEN con APNODO^.IZQ - llamada Recursiva a InOrden con la rama izquierda del nodo en cuestinVisitar el APNODO Imprimir APNODO^.INFO Regresar a IN ORDEN con APNODO^.DER Llamada Recursiva a In Orden con la rama derecha del nodo en cuestin Fin Si POST ORDEN (APNODO) Este algoritmo realiza el recorrido post orden de un rbol binario. APNODO es un registro de tipo enlace puntero a un nodo INFO, IZQ Y DER son los campos del registro nodo. INFO es una variable de tipo carcter IZQ Y DER son variables del tipo puntero Si APNODO <> NIL entonces Regresar POSTORDEN con APNODO^.IZQ - llamada Recursiva a Post Orden con la rama izquierda del nodo en cuestinRegresar a POST ORDEN con APNODO^.DER Llamada Recursiva a Post Orden con la rama derecha del nodo en cuestin Visitar el APNODO Imprimir APNODO^.INFO Fin Si
Recopilacin de material de Estructura de Datos 21

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

RBOLES BINARIOS DE BSQUEDA

Este algoritmo localiza el nodo del rbol binario de bsqueda que contiene la informacin INFOR, que se esta buscando. APNODO es un parmetro de tipo enlace la primera vez apunta a la raz del rbol - . Se asume que el rbol no es vaco Bsqueda_ABB (APNODO, INFOR) Si (INFOR < APNODO^.INFO) entonces Si APNODO^.IZQ = NILL entonces Imprimir La informacin no se encuentra en el rbol Sino Regresar a Bsqueda_ABB (APNODO^.IZQ e INFOR) llamada recursiva Fin Si Sino Si (INFOR > APNODO^.INFO) entonces Si (APNODO^.DER = NIL) entonces Imprimir La informacin no se encuentra en el rbol Sino Regresar a Bsqueda_ABB (APNODO^.DER e INFOR) Llamada recursiva Fin Si Sino Imprimir La informacin est en el rbol Fin Si Fin Si Otra forma de escribir el algoritmo de bsqueda es la siguiente (es variante contempla el caso que el rbol esta vaco)

Recopilacin de material de Estructura de Datos

22

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

BSQUEDA DE UNA INFORMACIN EN UN RBOL BINARIO Este algoritmo localiza el nodo del rbol binario de bsqueda que contiene cierta informacin INFOR - parmetro de tipo entero APNODO es una variable de tipo ENLACE. La primera vez, apunta a la raz del rbol. Bsqueda_V1_ABB (APNODO, INFOR) Si (APNODO <> NILL) entonces Si (INFOR< APNODO^.INFO) entonces Regresar a Bsqueda_V1_ABB con APNODO^.IZQ e INFOR llamada recursiva Sino Si (INFOR > APNODO^.INFO) entonces Regresar a Bsqueda_V1_ABB con APNODO^.DER e INFOR llamada recursiva Sino Imprimir La informacin se encuentra en el rbol Finsi Fin Si Sino Imprimir La informacin NO se encuentra en el rbol

Fin si

Recopilacin de material de Estructura de Datos

23

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

INSERCIN EN UN RBOL BINARIO DE BSQUEDA El algoritmo realiza la insercin de un nodo en un rbol binario de bsqueda. APNODO es una variable de tipo puntero y la primavera vez debe ser distinta de vaca. INFOR es un parmetro de tipo entero que contiene la informacin que se quiere insertar en un nuevo nodo. Se utiliza adems, como auxiliar, la variable OTRO de tipo puntero Insercin_ABB (APNODO, INFOR) Si (INFOR < APNODO^.INFO) entonces Si (APNODO^.IZQ= NILL) entonces Crear (OTRO) OTRO^.IZQ < NIL OTRO^.DER < NIL OTRO^.INFO < INFOR APNODO^.IZQ < OTRO Sino Regresar a Insercin_ABB con APNODO^.IZQ e INFOR llamada recursiva Fin Si Sino Si (INFOR > APNODO^.INFO) entonces Si (APNODO^.DER=NILL) entonces Crear (OTRO) - Se crea un nuevo nodo OTRO^.IZQ < NIL OTRO^.DER < NIL OTRO^.INFO < INFOR APNODO^.DER < OTRO Sino Regresar a Insercin_ABB con APNODO^.DER e INFOR llamada recursiva Fin Si Sino Imprimir El nodo ya se encuentra en el rbol Fin Si Fin Si
Recopilacin de material de Estructura de Datos 24

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

INSERCIN EN UN RBOL BINARIO DE BSQUEDA CON UNA VARIANTE El Algoritmo realiza la insercin de un elemento en un rbol binario de bsqueda. APNODO es una variable de tipo ENLACE, la primera vez apunta a la raz del rbol. INFOR es un parmetro de tipo entero que contiene la informacin del elemento que se quiere insertar. Insercin_V1_ABB (APNODO, INFOR) Si (APNODO <> NILL) entonces Si (INFOR < APNODO ^.INFO) entonces Regresar a Insercin_V1_ABB con APNODO^.IZQ e INFOR llamada recursiva Sino Si (INFOR > APNODO^.INFO) entonces Regresar a Insercin_V1_ABB con APNODO^.DER e INFOR llamada recursiva Sino Imprimir La informacin ya se encuentra en el rbol Fin si Fin Si Sino Crear (OTRO) - Se crea un nuevo nodo OTRO^.IZQ < NIL OTRO^.DER < NIL OTRO^.INFO < INFOR APNODO < OTRO Fin Si

ELIMINACIN EN UN RBOL BINARIO DE BSQUEDA

Recopilacin de material de Estructura de Datos

25

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

ORDENACIN
ORDENACION INTERNA Ordenacin Quicksort. Ordenacin Heapsort (montculo). ORDENACION EXTERNA En la actualidad es muy comn procesar tales volmenes de informacin que los no se pueden almacenar en la memoria principal de la computadora. Estos datos, organizados en archivos, se guardan en dispositivos de almacenamiento secundarios como cintas, discos, etc. El proceso de ordenar los datos almacenados en varios archivos se conoce como fusin o mezcla, se entiende por este concepto a la combinacin o intercalacin de dos a ms secuencias ordenadas en una nica secuencia ordenada Se debe hacer hincapi que solo se colocan en la memoria principal de la computadora los datos que se pueden acceder en forma directa Por intercalacin de archivos se entiende la unin o fusin de dos o ms archivos, ordenados de acuerdo a un determinado campo clave, en un solo archivo Ordenacin Externa: Intercalacin de archivos. Ordenacin por mezcla directa

ORDENACION INTERNA ORDENACION POR EL METODO QUICK SORT El mtodo de ordenacin Quick Sort es el ms eficiente de ordenacin interna. Es tambin conocido como el mtodo rpido y de ordenacin por particin. Este algoritmo ordena los elementos del arreglo unidimensional utilizado por el mtodo rpido de manera recursiva. A es un arreglo unidimensional de N elementos. INI, y FIN representan las posiciones del extremo izquierdo y derecho, respectivamente, del conjunto de elementos a ordenar. IZQ, DER, POS y AUX son variables de tipo entero. BAND es una variable tipo booleano.

Recopilacin de material de Estructura de Datos

26

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Rpido_ Recursivo(A, N) Llamar a Reduce _ recursivo (1, N)

Reduce_ Recursivo (INI, FIN) IZQ INI DER FIN POS INI BAND VERDADERO Mientras BAND = VERDADERO BAND FALSO Mientras ([A (POS) A (DER)] y [POS<>DER]) DER DER-1 Fin mientras Si POS < > DER entonces AUX A (POS) A (POS) A (DER) A (DER) AUX POS AUX Mientras ([A (POS) A (IZQ)] y [POS<>IZQ]) IZQ IZQ+1 Fin mientras Si POS < > IZQ entonces BAND VERDADERO AUX A (POS) A (POS) A (IZQ) A (IZQ) AUX POS AUX Fin si Fin si Fin mientras Si ([POS-1] INI) entonces Regresar a Reduce_ Recursivo (INI, [POS-1]) Fin si Si (FIN> [POS+1]) entonces Regresar a Reduce_ Recursivo ([POS+1] FIN) Fin si

Recopilacin de material de Estructura de Datos

27

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

RAPIDO _ ITERACTIVO Este algoritmo ordena los elementos de un arreglo unidimensional (vector). Utilizando el mtodo rpido (Quick Sort) de manera iterativa. A es una arreglo unidimensional de N elementos. TOPE, INI, FIN POS son variables de tipo entero. PILA MENOR, PILA MAYOR son arreglos unidimensionales (vectores) que funciona como pilas. Rpido_ iterativo (A, N) TOPE 1 PILA MENOR 1 PILA MAYOR N Mientras TOPE > 0 INI PILA MENOR (TOPE) FIN PILA MAYOR (TOPE) TOPE TOPE 1 Llamar a Reduce _ iterativo (INI, FIN, POS) Si INI < (POS 1) entonces TOPE TOPE + 1 PILA MENOR (TOPE) INI PILA MAYOR (TOPE) (POS 1) Fin Si Si FIN > (POS + 1) entonces TOPE TOPE + 1 PILA MENOR (TOPE) (POS + 1) PILA MAYOR (TOPE) FIN Fin Si Fin Mientras

REDUCE _ ITERATIVO INI, FIN representan las posiciones de los extremos izquierdo y derecho, respectivamente, de elementos a evaluar. POS es una variable donde se almacenara el resultado de este algoritmo. IZQ, DER, AUX son variables de tipos enteros. BAND es una variable de tipo booleano.

Recopilacin de material de Estructura de Datos

28

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Reduce _ iterativo (INI, FIN, POS) IZQ INI DER FIN POS INI BAND VERDADERO Mientras BAND= VERDADERO Mientras ([A (POS) <= A (DER)] y [POS< >DER]) DER DER-1 Fin Mientras Si POS= DER entonces BAND FALSO Si No AUX A (POS) A (POS) A (DER) A (DER) AUX POS DER Mientras ([A (POS) >= A (IZQ)] y [POS< >IZQ]) IZQ IZQ+1 Fin mientras Si POS = IZQ entonces BAND FALSO Si No AUX A (POS) A (POS) A (IZQ) A (IZQ) AUX POS AUX Fin si Fin si Fin mientras

ORDENACION POR MONTICULO (Heapsort) INSERTA _MONTICULO El algoritmo inserta los elementos en n montculo representado como arreglo. A es un arreglo unidimensional de N elementos. X, K y AUX son variables de tipo entero. BAND es una variable de tipo booleano. IND es un ndice.

Recopilacin de material de Estructura de Datos

29

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

INSERTA_MONTICULO(A,N) DESDE X = Z HASTA N K X BAND VERDADERO MIENTRAS [ ( K>1 ) Y ( BAND = VERDADERO ) ] BAND FALSO IND INT( K/2) SI A(K) > A(IND) ENTONCES AUX A(IND) A(IND) A(K) A(K) AUX K INT(K/2) BAND VERDADERO FIN SI FIN MIENTRAS FIN DESDE

ELIMINA_MONTICULO El algoritmo elimina la raz del montculo en forma repetida. A es un arreglo unidimensional de N elementos. X, AUX, IZQ, DER, K y APE son variables de tipo entero. BOOL es una variable tipo booleano
ELIMINA_MONTICULO(A,N) DESDE X = N HASTA 2 EN PASOS DE -1 AUX A(X) A(X) A(1) IZQ 2 DER 3 K 1 BOOL VERDADERO MIENTRAS [ ( IZQ < X ) Y ( BOOL = VERDADERO ) ] MAYOR A(IZQ) AP IZQ SI ( MAYOR < A(DER) Y DER <> X ) MAYOR A(DER) AP DER FIN SI SI ( AUX < MAYOR ) ENTONCES A(K) A(AP) K A(AP) SINO BOOL FALSO FIN SI IZQ K x 2 DER IZQ + 1 FIN MIENTRAS A(K) AUX FIN DESDE Recopilacin de material de Estructura de Datos 30

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

MONTICULO El algoritmo ordena los elementos del arreglo utilizando el mtodo montculo. A es un arreglo unidimensional de N elementos MONTICULO (A,N) LLAMAR AL ALGORITMO INSERTA _ MONTCULO(A,N) LLAMAR AL ALGORITMO ELIMINA _ MONTCULO(A,N)

ORDENACION EXTERNA INTERCALACIN DE ARCHIVOS Analicemos el ejemplo: F1: 06 09 18 20 35 F2: 10 10 25 66 - 82 87 Supongamos que se tienen dos archivos F1 y F2 ordenados segn campo clave determina se debe producir en el archivo F3 la mezcla de ambos archivos F1 y F2 Si 06 < 10 si pasa 06 a F3 06 < 10 si pasa 09 a F3 18 < 10 no pasa 10 a F3 18 < 16 16 18 < 20 18 20 < 25 20 25 < 35 25 35 < 66 si 35 El proceso continua hasta que en uno u otro archivo se detecte su final en tal caso se tendr que copiar la informacin del archivo no vaci al archivo de salida F3. el resultado final de la intercalacin de los archivos F1 y F2 Intercalacin (F1, F2, F3) El algoritmo intercala los elementos de dos archivos ya ordenados F1 y F2 y almacena el resultado en el archivo F3. R1 y R2 son las variables de tipo entero. BAND 1 y BAND 2 son variables de tipo BOOLEANA

Recopilacin de material de Estructura de Datos

31

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Abrir el archivo F1 en modo lectura Abrir el archivo F2 en modo lectura BAND 1 verdadero BAND 2 verdadero Mientras (NO EOF (F1) o BAND 1 = falso) y (NO EOF (F2) o BAND 2 = falso) Si (BAND1 = verdadero) entonces (Se debe leer R1 de F1) Leer R1 de F1 BAND 1 falso Fin si Si (BAND2 = verdadero) entonces (Se debe leer R2 de F2) Leer R2 de F2 BAND 2 falso Fin si Si (R1 < R2) entonces Imprimir R1 en F3 BAND 1 verdadero Sino Imprimir R2 en F3 BAND 2 verdadero Fin si Fin Mientras Verifica si se ley un elemento de F1 y no se copio en F3 Si BAND 1 = Falso entonces Imprimir R1 en F3 Mientras (NO EOF (F1)) Leer R1 en F1 Imprimir R1 en F3 Fin mientras Fin si Verifica si se ley un elemento de F2 y no se copio en F3 Si BAND 2 = Falso entonces Imprimir R2 en F3 Mientras (NO EOF (F2)) Leer R2 en F2 Imprimir R2 en F3 Fin mientras Fin si Cerrar archivo F1 Cerrar archivo F2 Cerrar archivo F3
Recopilacin de material de Estructura de Datos 32

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

MTODOS DE BSQUEDA Se concluye que la operacin de bsqueda se puede llevar a cabo sobre elementos ordenados o desordenados. Cabe destacar que la bsqueda es ms fcil y ocupa menos tiempo cuando los datos se encuentran ordenados. Los mtodos de bsqueda se pueden clasificar en internos y externos, segn la ubicacin de los datos sobre las cuales se realizaran las bsquedas. Se denomina bsqueda interna cuando todos los elementos se encuentran en la memoria principal de la computadora; por ejemplo, almacenados en arreglos, listas ligadas a rboles. Es bsqueda externa si los elementos estn en la memoria secundaria; es decir, si hubiera archivos en dispositivo como cintas y discos magnticos. BUSQUEDA INTERNA

Secuencial o lineal Binaria Por transformacin de claves rboles de bsqueda

BUSQUEDA SECUENCIAL La bsqueda secuencial consiste en revisar elemento tras elemento hasta encontrar el dato buscado, o llegar al final del conjunto de datos disponible. Primero se tratar sobre la bsqueda secuencial en arreglos y luego en listas enlazadas. En el primer caso, se debe distinguir entre arreglos ordenados y desordenados.

Esta ltima consiste, bsicamente en recorrer, el arreglo de izquierda a derecha hasta que se encuentre el elemento buscado o se termine el arreglo, lo que ocurra primero. Normalmente cuando una funcin bsqueda concluye con xito, interesa conocer en que posicin fue hallado el elemento que se estaba buscando. Esta idea se puede generalizar para todos los mtodos de bsqueda.

A continuacin se presenta el algoritmo de bsqueda secuencial de arreglos desordenados. Secuencial_desordenado Este algoritmo busca secuencialmente el elemento X en un arreglo unidimensional desordenado V, de N componentes.[Z es una variable de tipo entero]

Recopilacin de material de Estructura de Datos

33

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Secuencial_desordenado (V, N, X) Z 1 Mientras ((Z N) y (V(Z) < >X) Z Z+1 Fin Mientras Si (Z >N) Entonces Imprimir La informacin no esta en el arreglo Si no Imprimir La informacin se encuentra en la posicin, Fin Si

Secuencial_desordenado_recursivo Este algoritmo busca secuencialmente, y de forma recursiva, al elemento X en el arreglo unidimensional desordenado V, de N componente Z es un parmetro de tipo entero que inicialmente se encuentra en 1

Secuencial_desordenado_recursivo (V,N,X,I) Si ( Z >N ) Entonces Imprimir La informacin no se encuentra en arreglo Si no Si (V[Z]=X) Entonces Imprimir La informacin se encuentra en la posicin, Z Si no Regresar a Secuencial desordenado_recursivo con V, N, X y Z + 1 Fin Si Fin Si

Secuencial ordenado Este algoritmo busca secuencialmente el elemento x en un arreglo unidimensional ordenado v, de N componentes. V se encuentra ordenado crecientemente: V[1] V[2] V[N] Z es una variable de tipo entero.

Recopilacin de material de Estructura de Datos

34

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Secuencial ordenado (V,N,X) Z 1 Mientras ((Z N) y (X > V [Z])) Z Z +1 Fin Mientras Si ((Z>N) o (X< V[Z])) Entonces Imprimir La informacin no se encuentra en el arreglo Si no Imprimir La informacin se encuentra en la posicin, Z Fin Si Secuencial Ordenado Recursivo Este algoritmo busca en forma secuencial y recursiva al elemento X en un arreglo unidimensional ordenado v, de N componentes. V se encuentra ordenado de manera creciente: V[1] V[2] V[N]. Z inicialmente tiene un valor de 1 Secuencial_Ordenado_Recursivo (V,N,X,Z) Si ((Z N) y ( X > V [Z])) Entonces Llamar a Secuencial_Ordenado_Recursivo con V, N, X, y Z + 1 Si no Si (( Z > N) o ( X < V [Z])) Entonces Imprimir La informacin no se encuentra en el arreglo Si no Imprimir La informacin se encuentra en la posicin, Z Fin Si Fin Si Secuencial_Lista_desordenada Este algoritmo busca en forma secuencial al elemento X en una lista simplemente ligada, que almacena informacin que esta desordenada. P es un apuntador al primer nodo de la lista INFO y LIGA son los campos de cada nodo. Q es una variable de tipo apuntador Secuencial_Lista_desordenada (P, X) Q P Mientras ((Q < > NIL) y (Q^.INFO < > X) Q Q^.LIGA Fin Mientras Si (Q = NIL) Entonces Escribir La informacin no se encuentra en la lista Si no Escribir La informacin se encuentra en la lista Fin Si
Recopilacin de material de Estructura de Datos 35

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Si la lista estuviera ordenada se modificara este algoritmo, incluyendo una condicin similar a la que se escribi en algoritmo 9.3. Estos ltimos con el objetivo de disminuir el nmero de comparaciones. A continuacin se presenta la variante recursiva de este algoritmo de bsqueda secuencial en listas simplemente ligadas desordenadas. Secuencial_Lista_Desordenada_Recursivo (Este algoritmo busca de manera secuencial y en forma recursiva al elemento X en una lista simplemente ligada, que almacena informacin que esta desordenada. P es un apuntador al primer nodo de la lista INFO y LIGA son los campos de cada nodo) Secuencial_Lista_Desordenada_Recursivo (P, X)

Si ((P < > NIL) y (P^. INFO < > X)) Entonces Regresar a Secuencial_Lista_desordenada_Recursivo con P^.LIGA y Si no Si (P = NIL) Entonces Escribir La informacin no se encuentra en la lista Si no Escribir La informacin se encuentra en la lista Fin Si Fin Si

BUSQUEDA BINARIA La bsqueda binaria consiste en dividir el intervalo de bsqueda en dos partes, comparando el elemento buscado con el que ocupa la posicin central en el arreglo. Para el caso de que no fueran iguales se redefinen los extremos del intervalo, segn el elemento central sea mayor o menor que el elemento buscado, disminuyendo de esta forma el espacio de bsqueda. El proceso concluye cuando el elemento es encontrado, o cuando el intervalo de bsqueda se anula, es vaco. El mtodo de bsqueda binaria funciona exclusivamente con arreglos ordenados. No se puede con listas simplemente ligadas, no podramos retroceder para establecer intervalo de bsqueda, ni con arreglos desordenados. Con cada interaccin del mtodo del espacio de bsqueda se reduce a la mitad; por lo tanto, el nmero de comparaciones a realizar disminuye notablemente. Esta disminucin resulta significativa cuando mas grande sea el tamao del arreglo. A continuacin se presenta el algoritmo de bsqueda binaria

Recopilacin de material de Estructura de Datos

36

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Binaria Este algoritmo busca al elemento X en un arreglo unidimensional ordenado V de N componentes. IZQ, CEN y DER son variable de tipo entero. BAN es una variable de tipo booleano BINARIA (V,N,X) IZQ 1 DER N BAN FALSO CEN INT(N/2) Mientras (IZQ DER) y (BAN = FALSO)) Si (X = V [CEN]) Entonces BAN VERDADERO Si no - (se define el intervalo de bsqueda) Si (X > V [CEN]) Entonces IZQ CEN + 1 Si no DER CEN 1 Fin Si CEN INT ((IZQ + DER)/2) Fin Si Fin Mientras Si (BAN = VERDADERO) Entonces Imprimir La informacin no esta en la posicin, CEN Si no Imprimir La informacin no se encuentra en el arreglo Fin Si Binaria sin Bandera Este algoritmo busca al elemento X en el arreglo unidimensional ordenado V de N componentes (IZQ, DER, y CEN son variables de tipo entero)

Recopilacin de material de Estructura de Datos

37

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

BINARIA_SIN_BANDERA (V, N, X) IZQ 1 DER N CEN INT(N/2) Mientras (( IZQ DER) y (X < > V[CEN])) Si X > V[CEN] Entonces IZQ CEN + 1 Si no DER = CEN - 1 Fin Si CEN INT ((IZQ + DER)/2) Fin Mientras Si (IZQ > DER) Entonces Escribir La informacin se encuentra en la posicin, CEN Fin Si A continuacin se presenta una versin recursiva de este algoritmo de bsqueda binaria Binaria Recursivo Este algoritmo busca al elemento X en el arreglo unidimensional ordenado V de N componentes. IZQ ingresa inicialmente al algoritmo con el valor de 1. DER, por otra parte, ingresa con el valor de N CEN es una variable de tipo entero BINARIA_RECURSIVO (V, IZQ, DER, X)

Si ( IZQ DER) Entonces Escribir X, No se encuentra en el arreglo Si no CEN INT ((IZQ + DER)/2) Si (X = V[CEN]) Entonces Escribir El dato buscado se encuentra en la posicin, CEN Si no Si (X > V[CEN]) Entonces Regresar a Binaria_Recursivo con V, CEN 1, X Fin Si Fin Si Fin Si

Recopilacin de material de Estructura de Datos

38

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

FUNCIN HASH POR MODULO: DIVISIN La Funcin Hash por modulo (divisin) consiste tomar el residuo de la divisin de la clave entre los nmeros de los componentes del arreglo, Suponer por ejemplo que se tiene de N elemento y K es la clave del dato a buscar. La Funcin Hash que defina por la siguiente frmula: H (K) = (K MOD. N) + 1 En esta formula se observa el residuo de la divisin se le suma uno, esta ultima con el objetivo de obtener un valor comprendido entre 1 y N. Para lograr mayor uniformidad en la distribucin es importante que N sea un nmero primo o divisible entre el mismo numero. Por lo tanto si N no es un nmero primo, se debe considerar el nmero primo ms cercano. Ejemplos: suponer que N es igual a 100 es el tamao del arreglo y las direcciones que se deben asignar a los elementos (al guardarlo o recuperarlo) son los nmeros del 1 al 100, considerar adems, K1 = 7259 y K2 = 9359 son las dos claves a que se la deben asignar posiciones en el arreglo. Si aplicamos la formula con N = 100 para calcular las direcciones correspondientes a K1 y K2 obtenemos una colisin como H (K1) = H (K2) y K1 K2, se est ante una colisin que se debe resolver porque a los dos elementos le corresponde una misma direccin. Observar, sin embargo, que si se aplica la frmula con un numero primo cercano a N, el resultado cambiaria. H (K1) = (7259 mod. 97) = 82. H (K2) = (9359 mod. 97) = 48. Con N = 97 se ha eliminado la colisin. ENCADENAMIENTO El mtodo de encadenamiento consiste en que cada elemento del arreglo tenga un apuntador a una lista ligada, la cual seguir generando y almacenara los valores que colisiona. Es el mtodo mas eficiente debido al dinamismo propio de las listas cualquiera sea el numera de colisiones que se presentes ser puede resolver sin inconvenientes. Como desventaja del mtodo de encadenamiento se menciona que el hecho de que ocupa espacio adicional de la tabla y que exige el manejo de las listas ligadas, Adems si las listas crecen demasiado se perder la facilidad de acceso directo del mtodo Hash.
Recopilacin de material de Estructura de Datos 39

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

A continuacin se muestra la estructura de datos necesarios para resolver colisiones V 80 K H (K) 25 43 56 35 54 13 80 104 Solucin de colisiones con arreglo anidados

43 54 25 56

13 104 35

a) Arreglos anidados.

b) Tabla con H (K)

Solucin de Colisiones por Encadenamiento

Recopilacin de material de Estructura de Datos

40

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Este algoritmo busca el dato con clave K en el arreglo unidimensional V de N elementos. Resuelve las colisiones por medio de encadenamiento en las listas ligadas. SIG e INFO son los campos de cada nodo de la lista. D es una variable de tipo entero. Q es una variable de tipo puntero. Encadenamiento (V, N, K) D H (K) - genera DireccinSi ((V (D) <> vaco) y (V (D) = K) entonces Imprimir La informacin esta en la posicin, D Sino Q V (D). SIG -apuntador a la listaMientras ((Q<> vaco) Y (Q^.INFO <>K) Q Q^.SIG Fin_Mientras Si (Q = vaco) entonces Imprimir La informacin no se encuentra en la lista Sino Imprimir La informacin se encuentra en la lista Fin s Fin s

Recopilacin de material de Estructura de Datos

41

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

GRFICAS
Introduccin Antes hemos estudiado las estructuras de datos tipos rboles, en donde cada nodo o elemento puede tener como mximo un nodo que le precede o raz. Si embargo, en la prctica existen problemas o situaciones en que la informacin que se debe almacenar no corresponde con una estructura de este tipo. Para estos problemas se necesita de una estructura en la cual se puedan representar otras relaciones entre los datos o componentes de la misma. En esta seccin estudiaremos las grficas.

Las grficas son estructuras de datos no lineales donde cada componente puede tener uno o ms predecesores y sucesores. En una grfica se distinguen dos elementos: los nodos, mejor conocidos como vrtices, y los arcos, llamados aristas, que conectan un vrtice con otro. Los vrtices almacenan informacin y las aristas representan relaciones entre dicha informacin. Estas estructuras tienen aplicaciones en diferentes dominios, entre ellos transporte, terrestre, areo y martimo-, redes de computadoras, mapas-, ubicacin geogrfica de varias ciudades-, asignacin de tareas, etc. Considere por ejemplo, la grfica de la figura 7.1 donde se observan alguna de las principales capitales sudamericanas y la conexin entre ellas. En este caso los vrtices representan a las ciudades, mientras que las aristas a las carreteras o algn otro medio de conexin entre ellas. Algunas aristas estn etiquetadas, el valor que aparece en ellas constituye la distancia que existe entre las ciudades. En general, una etiqueta en la arista que une, por ejemplo, los vrtices i y j se usa para representar el costo de ir del vrtice i al vrtice j. En la figura 7.2 se presentas dos ejemplos de graficas. La primera a) tiene cuatro vrtices (a, b, c, d ) y cinco aristas ((a ,b), (b, c), (c, d), (d, a), (b, d)); mientras que la segunda b) tiene seis vrtices (a, b, c, d, e, f) y seis aristas ((a, b), (b, c), (c, d), (d, a), (d, e), (e, f)).

Recopilacin de material de Estructura de Datos

42

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

DEFINICION DE GRFICAS

Una grfica G consta de dos conjuntos: V (G), A(G). El primero lo integra elementos llamados nodos o vrtices; el segundo, arcos o aristas. Por lo tanto, podemos denotar una grafica G como:

Figura 7.1 Ejemplo de grfica.

G = (V, A) Donde V representa el conjunto de vrtices de G y A representa el conjunto de aristas de G. Si no se hace ninguna especificacin, los conjuntos V y A son finitos. Cada arista esta identificada por un nico par de nodos del conjunto de vrtices, que puede o no estar ordenado. Una arista que va desde el vrtice u al v se denota mediante una expresin a= (u, v), donde u y v son vrtices adyacentes y los extremos de de a. En este caso, u y v estn conectados por a i se dice que a es incidente de u y v.

Recopilacin de material de Estructura de Datos

43

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Figura 7.2 Elementos de una grfica.

CONCEPTOS BSICOS DE GRFICAS A continuacin se presentas algunos de los conceptos ms importantes relacionados con la teora de graficas: Grado de un vrtice: El grado de un vrtice v, escrito como grado (v), es el nmero de aristas que contiene a v; es decir, que tienen a v como extremo. Si el grado(v) = O (v no tiene aristas), se dice que v es un nodo aislado. Lazo o bucle: Un lazo o bucle es una arista que conecta a un vrtice consigo mismo, es decir, a= (u, u).

Camino: Un camino P de longitud n se define como la secuencia de n vrtices que se debe seguir para llegar al vrtice v, --origenal vrtice v --destino P = ( v , .., V ) De tal modo que v , es adyacente a v para i = 1, 2, n 1 i+

Recopilacin de material de Estructura de Datos

44

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Camino cerrado: El camino p es cerrado si el primero y ltimo vrtices son iguales; es decir, si v1 = vn Camino Simple: El camino es simple si todos sus nodos son distintos, con acepcin del primero y del ltimo, que pueden ser iguales; es decir, P es simple si v1 v2 , son distintos. Ciclo: Un ciclo es un camino simple cerrado de longitud 3 o mayor. Un ciclo de longitud K se llama K-ciclo. Grfica conexa: Se dice que una grafica es conexa si existe un camino simple entre cualesquiera dos de sus nodos. Grfica rbol: Se dice que una grfica G es de tipo rbol o rbol libre si G es una grfica conexa sin ciclos. Grfica completa: Se dice que una grfica es completa si cada vrtice v de G es adyacente a todos los dems vrtices de G. Una grafica completa de n vrtices tendr n (n-1)/2 aristas. Grfica etiquetada: Se dice que una grfica G est etiquetada si sus aristas tienen asignado un valor. Es decir, si cada arista a tiene un valor numrico no negativo c(a), llamado costo, peso o longitud de a, entonces G tiene peso o est etiquetada. En este caso, cada camino P de G tendr asociado un peso o longitud que ser la suma de los pesos de las aristas que forman el camino P. Multigrfica: Una grfica se denomina multigrfica si al menos dos de sus vrtices estn conectados entre si por medio de dos aristas. En este caso, las aristas reciben el nombre de aristas mltiples o paralelas. Subgrfica: Dada la grfica G = ( V, A), G= (V, A) se denomina subgrfica de G si V , V V y A A, donde cada arista de A es incidente con vrtices de v Grfica 7.3 Conceptos de grficas.

Recopilacin de material de Estructura de Datos

45

Prof. Jamie Gill

UNIVERSIDAD COLUMBIA

Octubre/2008

Luego de observar la figura 7.3 se pueden realizar las siguientes afirmaciones:

a) Todos los vrtices tienen cuatro grados. b) Un camino P para llegar del nodo A al nodo D puede ser A- B- C- D. Otros pueden ser A- E- D o A- D. c) El camino A- C- D- A es un camino cerrado, el A- C- D no lo es.

d) El camino A- C- D- A es un camino simple, el A- C- B- D- C no lo es. e) El camino A- C- D- A es un ciclo. f) Es una grfica conexa, pues todos los nodos tienen al menos un camino a otro nodo. g) Es una grfica completa, pues todos los nodos se conectan con los dems. Luego observa la figura 7.4 se pueden realizar las siguientes afirmaciones: a) La grfica de la figura 7.4, existe un lazo o bucle en el vrtice d. Es decir, a = (d, d). b) La grfica de la figura 7.4b, es una multigrfica, ya que hay dos aristas que unen los vrtices c y d. Es decir, la aristas a1 = (c, d) y a2 = (c, d) son aristas mltiples o aristas paralelas.

Recopilacin de material de Estructura de Datos

46

You might also like