You are on page 1of 14

1. UNIDAD 3: PILAS Definicin, especificaciones y tipo de pilas implementadas con arreglos y punteros.

Una pila (stack en ingls) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del ingls Last In First Out, ltimo en entrar, primero en salir) que permite almacenar y recuperar datos. Para el manejo de los datos se cuenta con dos operaciones bsicas: apilar (push), que coloca un objeto en la pila, y su operacin inversa, retirar (o desapilar, pop), que retira el ltimo elemento apilado. En cada momento slo se tiene acceso a la parte superior de la pila, es decir, al ltimo objeto apilado (denominado TOS, Top of Stack en ingls). La operacin retirar permite la obtencin de este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el nuevo TOS. Por analoga con objetos cotidianos, una operacin apilar equivaldra a colocar un plato sobre una pila de platos, y una operacin retirar a retirarlo. Las pilas suelen emplearse en los siguientes contextos:

Evaluacin de expresiones en notacin postfija (notacin polaca inversa). Reconocedores sintcticos de lenguajes independientes del contexto Implementacin de recursividad.

Operaciones Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las que en las implementaciones modernas de las pilas se suelen aadir ms de uso habitual. Crear: se crea la pila vaca. (constructor) Tamao: regresa el nmero de elementos de la pila. (size) Apilar: se aade un elemento a la pila.(push) Desapilar: se elimina el elemento frontal de la pila.(pop) Cima: devuelve el elemento que esta en la cima de la pila. (top o peek) 1

Vaca: devuelve cierto si la pila est vaca o falso en caso contrario (empty).

Implementacin Implementacin en C++ Implementacin en Python Implementacin en Java Implementacin en Visual Basic Implementacin en Maude

Para resumir realizaremos la Implementacin en Python y en C++ Implementacin en C++


#ifndef PILA #define PILA // define la pila template <class T> class Pila { private: struct Nodo { T elemento; Nodo* siguiente; // coloca el nodo en la segunda posicion }* ultimo; unsigned int elementos; public: Pila() { elementos = 0; } ~Pila() { while (elementos != 0) pop(); } void push(const T& elem) { Nodo* aux = new Nodo; aux->elemento = elem; aux->siguiente = ultimo; ultimo = aux; ++elementos; } void pop() { Nodo* aux = ultimo; ultimo = ultimo->siguiente; delete aux; --elementos; } T cima() const { return ultimo->elemento; }

bool vacia() const { return elementos == 0; } unsigned int altura() const { return elementos; } }; #endif

Implementacin en Python
class Stack(object): def __init__(self): self.stack_pointer = None def push(self, element): self.stack_pointer = Node(element, self.stack_pointer) def pop(self): e = self.stack_pointer.element self.stack_pointer = self.stack_pointer.next return e def peek(self): return self.stack_pointer.element def __len__(self): i=0 sp = self.stack_pointer while sp: i += 1 sp = sp.next return i class Node(object): def __init__(self, element=None, next=None): self.element = element self.next = next if __name__ == '__main__': # small use example s = Stack() for i in range(10):s.push(i) for i in range(len(s)):print(s.pop())

2. UNIDAD 4: COLAS Definicin, especificaciones y Tipo de colas implementadas con arreglos. Una cola (tambin llamada fila) es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operacin de insercin push se realiza 3

por un extremo y la operacin de extraccin pop por el otro. Tambin se le llama estructura FIFO (del ingls First In First Out), debido a que el primer elemento en entrar ser tambin el primero en salir. Tipos de colas Colas circulares (anillos): en las que el ltimo elemento y el primero estn unidos. Colas de prioridad: En ellas, los elementos se atienden en el orden indicado por una prioridad asociada a cada uno. Si varios elementos tienen la misma prioridad, se atendern de modo convencional segn la posicin que ocupen. Hay 2 formas de implementacin: Aadir un campo a cada nodo con su prioridad. Resulta conveniente mantener la cola ordenada por orden de prioridad. Crear tantas colas como prioridades haya, y almacenar cada elemento en su cola. Bicolas: son colas en donde los nodos se pueden aadir y quitar por ambos extremos; se les llama DEQUE (Double Ended QUEue). Para representar las bicolas lo podemos hacer con un array circular con Inicio y Fin que apunten a cada uno de los extremos. Hay variantes: Bicolas de entrada restringida: Son aquellas donde la insercin slo se hace por el final, aunque podemos eliminar al inicio al final. Bicolas de salida restringida: Son aquellas donde slo se elimina por el final, aunque se puede insertar al inicio y al final Operaciones Bsicas Crear: se crea la cola vaca. Encolar (aadir, entrar, insertar): se aade un elemento a la cola. Se aade al final de esta. Desencolar (sacar, salir, eliminar): se elimina el elemento frontal de la cola, es decir, el primer elemento que entr. Frente (consultar, front): se devuelve el elemento frontal de la cola, es decir, el primer elemento que entr. Implementacin Implementacin en C++ Implementacin en Python Implementacin en Java Implementacin en Visual Basic Implementacin en Maude

Colas en C++
#ifndef COLA

#define COLA // Define la cola template <class T> class Cola{ private: struct Nodo{ T elemento; struct Nodo* siguiente; // coloca el nodo en la segunda posicin }* primero; struct Nodo* ultimo; unsigned int elementos; public: Cola(){ elementos = 0; } ~Cola(){ while (elementos != 0) pop(); } void push(const T& elem){ Nodo* aux = new Nodo; aux->elemento = elem; if (elementos == 0) primero = aux; else ultimo->siguiente = aux; ultimo = aux; ++elementos; } void pop(){ Nodo* aux = primero; primero = primero->siguiente; delete aux; --elementos; } T consultar() const{ return primero->elemento; } bool vacia() const{ return elementos == 0; } unsigned int size() const{ return elementos; } }; #endif

3. UNIDAD 5: RBOLES rboles Generales y binarios. rboles Generales. Un rbol general ( a veces es llamado rbol ) se define como un conjunto, finito no vaci T de elementos, llamados nodos, tales que: 1. T contiene un elemento distinguido R, llamado raz de T. 2. Los restantes elementos de T forman una coleccin ordenada de cero o mas rboles disjuntos T1, T2,.., Tm..

rboles Binarios Un rbol binario es un rbol en el que cada nodo no puede tener mas de dos hijos o descendientes. Es un conjunto finito de nodos, el cual puede ser vaco o un conjunto que consta de un nodo raz enlazado a dos rboles binarios disjuntos denominados subrbol izquierdo y subrbol derecho.

Estructura y representacin de un rbol binario. Representacin de los rboles Generales como Binarios Los pasos que se deben aplicar para lograr la conversin del rbol general a binario son los siguientes: o Deben enlazarse los hijos de cada nodo en forma horizontal (los hermanos). o Debe enlazarse en forma vertical el nodo padre con el hijo que se encuentra ms a la izquierda. o Debe rotarse el diagrama resultante, aproximadamente 45 grados hacia la izquierda y as se obtendr el rbol binario correspondiente.

Conversin de un rbol general en un rbol binario. (a) rbol general. (b) rbol binario luego de aplicar pasos 1 y 2. (c) rbol binario luego de aplicar el paso 3.

Todo rbol binario obtenido a partir de un rbol general, debe cumplir lo siguiente: o En la rama derecha de cada nodo, excepto el nodo raz, si sta es distinta de vaco se encuentra un nodo que era hermano de ste en el rbol general.

o En la rama izquierda de cada nodo (si sta es distinta de vaco), se encuentra un nodo que era hijo de ste en el rbol generado. Representacin de rboles binarios en memoria Existen dos formas tradicionales de representar un rbol binario en memoria. Por medio de listas enlazadas, variables dinmicas. Por medio de arreglos.

Representacin de rboles binarios en memoria por medio de listas enlazadas. Los nodos del rbol binario sern representados como registros, que contendrn como mnimo tres campos. En un campo se almacenar la informacin del nodo. Los dos restantes se utilizarn para apuntar los subrboles izquierdo y derecho respectivamente del nodo en cuestin. Dado el siguiente nodo T:

Donde: IZQ: campo donde se almacena la direccin del subrbol izquierdo del nodo T. INFO: campo donde se almacena la informacin de inters del nodo. DER: campo donde se almacena la direccin del subrbol derecho del nodo La definicin de un rbol binario en lenguaje algortmico es como sigue: Enlace = nodo Nodo = registro IZQ: tipo enlace INFO: tipo dato DER: tipo enlace

{Fin de la definicin}

Representacin de rboles binarios en memoria por medio de arreglos.

Para calcular el nmero de elementos de un rbol es: 2 n-1. n = nivel de profundidad.

rboles de expresin. Los rboles binarios se utilizan para representar expresiones en memoria, esencialmente en compiladores de lenguajes de programacin. Construccin de rboles de expresin Los parntesis no se almacenan en el rbol pero estn implicados en la forma del rbol. Si se supone que todos los operadores tienen dos operandos, se puede representar una expresin por un rbol binario cuya raz contiene un operador y cuyos subrboles izquierdo y derecho son los operandos izq. y der. respectivamente.

Cada operando puede ser una letra o una subexpresin representada como un subrbol. Todos los operandos letras se almacenan en nodos. Ejemplo 1: Dada la expresin (X+Y) * (A-B) construir el rbol de expresin.

Recorrido de un rbol. Recorridos en rboles binarios Recorrer un rbol binario significa visitar los nodos del rbol en forma sistemtica, de tal manera que todos los nodos del mismo sean visitados una sola vez. Existen tres formas diferentes de efectuar el recorrido (todos de forma recursiva) los cuales son: Recorrido en Preorden Recorrido en Inorden Recorrido en Posorden

Recorrido en Preorden 1. Visitar raz (escribir la informacin del nodo). 2. Recorrer el subrbol izquierdo en preorden. 3. Recorrer el subrbol derecho en preorden.

10

Algoritmo:
Preorden (nodo) Si nodo S Nil entonces { Visitar el nodo (escribir nodo_Info) Regresar a Preorden con (nodo_Izq) Regresar a Preorden con (nodo_der) } Fin.

El valor en cada nodo es procesado conforme se pasa por cada nodo. Despus de que se procese el valor de un nodo dado, son procesados los valores del subrbol izquierdo y a continuacin los valores en el subrbol derecho. Recorrido en Inorden 1. Recorrer el subrbol izquierdo en Inorden 2. Visitar raz (procesar el valor en el nodo). 3. Recorrer el subrbol derecho en Inorden

Algoritmo:

11

Inorden (nodo) Si nodo S Nil entonces { Regresar a Inorden (nodo_Izq) Visitar el nodo (escribir nodo_Info) Regresar a Inorden con (nodo_der) } Fin.

El valor en un nodo no es procesado en tanto no sean procesados los valores de su subrbol izquierdo. Recorrido en Posorden 1. Recorrer el subrbol izquierdo en Posorden 2. Recorrer el subrbol derecho en Posorden 3. Visitar raz (procesar el valor en el nodo).

Algoritmo:
Posorden (nodo) Si nodo S Nil entonces { Regresar a Posorden (nodo_Izq) Regresar a Posorden con (nodo_der) Visitar el nodo (escribir nodo_Info) } Fin. El valor en cada nodo no se imprime hasta que son impresos los valores de sus hijos.

rboles binarios de bsqueda: operaciones Un rbol binario de bsqueda (que no tiene los valores duplicados de nodos) tienen la caracterstica que los valores en cualquier subrbol izquierdo son menores que el valor en sus nodos padres y los valores en cualquier subrbol derecho son mayores que el valor en sus nodos padres.

12

Recorrido del rbol Preorden: 47 25 11 7 17 43 31 44 77 65 68 93 Inorden: 7 11 17 25 31 43 44 47 65 68 77 93 Posorden: 7 17 11 31 44 43 25 68 65 93 77 47 Creacin de un rbol binario de bsqueda Supongamos que se desea almacenar los nmeros: 8 3 1 20 10 5 4 en un rbol binario de bsqueda. Siguiendo la regla, dado un nodo en el rbol todos los datos a su izquierda deben ser menores que todos los datos del nodo actual, mientras que todos los datos a ala derecha deban ser mayores, que dichos datos. Inicialmente el rbol esta vaco y se le debe insertar el 8.

A continuacin viene el 3. Ya que 3 es menor que 8, el 3 debe ir en el subrbol izquierdo.

A continuacin se ha de insertar 1 que es menor que 8 y que 3; por lo tanto ir a la izquierda y debajo de 3.

13

Cada nuevo elemento se inserta como una hoja del rbol. Los restantes elementos se pueden situar fcilmente.

Una propiedad de los rboles binarios de bsqueda es que no son nicos para los datos dados.

14

You might also like