Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Pilas y Colas
Objetivos
El objetivo general de este tema es presentar algunas de las estructuras de datos lineales ms utilizadas:
La EDAs Pila, que proporciona una gestin LIFO (Last In First Out) de los datos La EDAs Cola, que proporciona una gestin FIFO (First In First Out) de los datos
Estructura de Datos I
Agenda
Pilas
Colas
Estructura de Datos I
PILA
Definicin
Es una lista lineal en que todas las inserciones, eliminaciones y, generalmente, todos los accesos son hechos en apenas un extremo de la lista. Los items son colocados uno sobre el otro. El item insertado ms recientemente est en el fondo. El modelo intuitivo es el de varios platos colocados uno encima del otro, siendo conveniente retirar o adicionar platos en la parte superior
Estructura de Datos I
PILAS
Propiedades y Aplicaciones
Propiedad: el ltimo item insertado es el primer item que puede ser retirado de la lista. Son llamadas listas lifo (last-in, first-out). Existe un orden lineal para pilas, del .ms reciente para el menos reciente. Es ideal para el procesamiento de estructuras anidadas de profundidad imprevisible.
Estructura de Datos I
PILAS
Propiedades y Aplicaciones
Cuando es necesario explorar en conjuntos de datos y guardar una lista de cosas a realizar posteriormente. El control de secuencias de llamadas a subprogramas. La sintaxis de expresiones aritmticas.
Las pilas ocurren en estructuras de naturaleza recursiva (como rboles). Ellas son utilizadas para implementar la recursividad
Estructura de Datos I
TAD PILA
Conjunto de Operaciones
push : colocar un elemento pop: eliminar un elemento top: Recupera el elemento del Tope/cima de la pila inicializaStack: inicializa la pila en un estado inicial vacoTAD Pila destroyStack: Elimina todos los elementos, dejando la pila vaca isEmptyStack: verifica si la pila esta vaca isFullStack: verifica si la pila esta llena
Estructura de Datos I
TAD PILA
Implementacin
Existen varias opciones de estructuras de datos que pueden ser usadas para representar pila. Las dos representaciones ms utilizadas:
Estructura de Datos I
TAD PILA
Implementacin con arreglos
Como las inserciones y eliminaciones ocurren en la cima de la pila, un cursor llamado tope es utilizado para controlar la posicin del item en la cima de la pila
Una representacin sencilla de los datos de un Pila genrica es un array genrico en el que se mantenga una referencia al tope
Estructura de Datos I
LA CLASE StackType
Atributos
arrayStack, un array genrico para almacenar de forma contigua los datos de la Pila. Para apilar en tiempo constante se debe insertar siempre en la primera posicin libre del array maxStackSize, define la capacidad inicial del array stackTop, un int que seala la posicin en el array del dato situado en el tope de la Pila
10
LA CLASE StackType
Implementacin con arreglos
template<class E> class StackType: public listDinamicType<E>{ public: void initializeStack(); void destroyStack(); void push(const E& newItem); E top(); void pop(); StackType(int ); StackType(StackType<E>& otherStack); ~StackType(); };
11
Estructura de Datos I
LA CLASE StackType
Implementacin con arreglos
template<class E> void StackType<E>::push(E& newItem){ insert(newItem) } template<class E> void StackType<E>::pop(){ if(!isEmpty()) lenght--; else cout<<Pila esta vaca."<<endl; } template<class E> StackType<E>::~StackType() :listDinamicType<E>::~listDinamicType(){ }
12
Estructura de Datos I
LA CLASE StackType
Implementacin con arreglos
template<class E> E StackType<E>::top(){ assert(lenght != 0); return list[lenght - 1]; } template<class E> StackType<E>::StackType(int stackSize) :listDinamicType<E>::listDinamicType(stackSiz e){}
13
Estructura de Datos I
TAD PILA
Implementacin con estructuras auto referenciadas
Hay un nodo cabeza en la cima/tope para facilitar la implementacin de las operaciones empilar y desempilar. Para desempilar el item xn , desligar el nodo cabeza de la lista y el nodo que contiene xn-1 pasa a ser el nodo cabeza. Para empilar un nuevo item, crear un nuevo nodo cabeza y colocar el nuevo item antes de aquel que era cabeza.
fondo
14
Estructura de Datos I
LA CLASE StackType
Implementacin con estructuras auto referenciadas
template<class E> class StackType : public LEG<E>{ public: StackType(); void push(E); void pop(); E top(); void destroyStack(); ~StackType(); };
15
Estructura de Datos I
LA CLASE StackType
Implementacin con estructuras auto referenciadas
template<class E> void StackType<E>::StackType(): LEG<E>::LEG(){}
template<class E> void StackType<E>::destroyStack() { NodoLEG<E> *tem; while(primero){ tem=primero; primero=primero->siguiente; delete tem; } }
16 Estructura de Datos I
LA CLASE StackType
Implementacin con estructuras auto referenciadas
template<class E> StackType<E>::~StackType() { destroyStack(); } template<class E> void StackType<E>::push(E item) { insertar(item); } template<class E> void StackType<E>::pop() { assert(primero!=NULL); NodoLEG<E> *tem=primero; primero=primero->siguiente; delete tem; }
17
Estructura de Datos I
LA CLASE StackType
Implementacin con estructuras auto referenciadas
template<class E> E StackType<E>::top() { assert(primero!=NULL); return primero->dato; }; template<class E> bool StackType<E>::isEmpty() { return (primero==NULL); };
18
Estructura de Datos I
Ejercicios
copia entre pilas: 1. Por medio de arreglos 2. Por medio de listas enlazadas
void topeBase(), que intercambia el dato que ocupa el tope/cima de la Pila con el que ocupa su base
Estructura de Datos I
19
Pilas: aplicaciones
Expresiones aritmticas Una expresin aritmtica incluye constantes y operaciones: Notacin infija:
Aquella expresin en que los operadores se colocan en medio de los operandos. P.e.: A+B C-D (A+B)*C A+(B*C)
Aquella en que los operadores se colocan delante de los operandos. P.e.: +AB -CD *+ABC +A*BC
Estructura de Datos I
20
Pilas: aplicaciones
Expresiones aritmticas Ejemplos (A + B) * C = [+ A B] * C = * + A B C A + (B * C) = A + [* B C] = + A * B C (A +B) / (C - D) = [+ A B] / [- C D] = / + A B C D
Propiedad:
Orden en que se realizan las operaciones est completamente determinado por las posiciones de los operandos y las operadores (no se requiere parntesis)
Estructura de Datos I
21
Pilas: aplicaciones
Expresiones aritmticas Notacin polaca inversa (postfija / sufija):
Se refiere a la notacin anloga en la que el operador se coloca tras sus dos operandos. P.e.: AB+ CD - AB+C* ABC*+
22
Ejercicios
Dadas las siguientes expresiones infijas, hallar por inspeccin la expresin equivalente: prefija: (AB)*(D/E) postfija. (A+BD)/(EF)+G postfija: A*(B+D)/EF*(G+H/K) Sea la siguiente expresin infija Q: 5 * ( 6 + 2) ( 12 / 4)
Hallar, por inspeccin, su equivalente expresin postfija Hallar, por inspeccin, el resultado de la expresin postfija
23
Pilas: aplicaciones
Expresiones aritmticas El computador evala una expresin aritmtica en notacin infija:
1.
2.
24
Estructura de Datos I
Sacar los dos elementos de PILA (A, B). b) Hacer Y = B A c) Poner el resultado Y a la PILA [Fin del condicional]
a)
P:
5 6 2 + * 12 4 / -
Estructura de Datos I
b)
Repetidamente sacar de PILA y aadir a P, cada operador que tenga la misma o mayor precedencia que . Aadir a PILA
Q:
A + ( B * C ( D / E F ) * D ) * H
Estructura de Datos I
b)
Repetidamente sacar de PILA y aadir a P cada operador hasta que se encuentre un parntesis izquierdo (. Eliminar el parntesis izquierdo (
27
Q:
A + ( B * C ( D / E F ) * D ) * H
Estructura de Datos I
COLAS
COLAS
Definicin
Es una lista lineal en que todas las inserciones son realizadas en un extremo de la lista, y todas las eliminaciones, y generalmente los accesos, son hechos en el otro extremo de la lista. El modelo intuitivo de una cola es de una fila de espera de personas. Estas estructuras se las llaman listas fifo (first-in, first-out).
29
Estructura de Datos I
COLAS
Definicin
Existe un orden lineal para las filas que es el orden de llegada. Son utilizadas cuando deseamos procesar items de acuerdo con el orden primero-que-llega, primeroatendido Sistemas operativos, utilizan colas para regular el orden en el cual las tareas deben recibir procesamiento y para ver que recursos deben ser atribuidos a los procesos.
Estructura de Datos I
30
Los items son almacenados en posiciones continuas de la memoria. La operacin Inserta hace que la parte posterior de la cola se expanda. La operacin Elimina hace que la parte del frente de la fila se contraiga. La cola tiende a caminar por la memoria, ocupando espacio en la parte posterior y descartando espacio en el frente.
Estructura de Datos I
31
Con pocas inserciones y eliminaciones, la cola hace uso de la memoria separada para ella Solucin: imagina un arreglo como un crculo. La primera posicin sigue a la ltima.
La cola se encuentra en posiciones continuas de memoria, delimitada por los apuntadores frente y final. Para insertar, basta con mover el apuntador final. Para eliminar, se debe de mover el apuntador frente.
Estructura de Datos I
32
33
Estructura de Datos I
Estructura de Datos I
Estructura de Datos I
template<class <E> void QueueType<E>::addQueue(const E& newElement){ if(!isFullQueue()) { queueRear = (queueRear + 1) % maxQueueSize; count++; list[queueRear] = newElement; } else cout<<"Cannot add to a full queue"<<endl; }
36
Estructura de Datos I
37
Estructura de Datos I
Hay dos apuntadores First y Last que facilitan la implementacin de las operaciones de insercin y eliminacin. Para insertar un nuevo item, basta crear un nuevo nodo y ligarlo despus del nodo que contiene xn y colocar en l el nuevo item. Para eliminar el item x1 basta desligar el nodo que se encuentra al inicio de la lista. x2 pasa a ser First.
last
first
X1
38
X2
X3
...
Xn
NULL
Estructura de Datos I
Ejercicios
Escriba los mtodos que manipulen una cola por medio de listas autoreferenciadas:
39
Estructura de Datos I
Colas de Prioridad
Colas de prioridad (Priority Queues) son conjuntos de elementos donde a cada uno de los elementos se les asigna una prioridad. Son procesados de la siguiente manera:
El elemento de mayor prioridad es procesado al principio Dos elementos con la misma prioridad son atendidos de acuerdo al orden en el que llegaron
40
Estructura de Datos I
41
Estructura de Datos I
Crear cola Insertar datos Remover el item con mayor prioridad Remover un item
42
Estructura de Datos I
La operacin de insercin es igual que en las colas La operacin de eliminacin es ejecutada encontrando primero el elemento de mayor prioridad e intercambindolo con el elemento que est al inicio de la cola. En este caso la operacin de insercin es O(1) y la de eliminacin es O(n).
43
44
Estructura de Datos I
45
Estructura de Datos I
Heap: es un objeto arreglo que puede ser visto como un rbol binario completo (completamente lleno en todos los niveles, quizs, excepto en el nivel ms bajo).
La raz del rbol representada por el heap es A[1] y, dado el ndice i de un nodo, los ndices del PADRE(i), del hijo izquierdo IZQUIERDA(i) y del hijo derecho DERECHA(i) son:
PADRE(i)
return i/2 ;
IZQUIERDA(i)
return 2i;
DERECHA(i)
return 2i + 1;
47 Estructura de Datos I