Sie sind auf Seite 1von 43

Pilas y Colas

n Una pila representa una estructura lineal de datos en que se


puede agregar o quitar elementos nicamente por uno de los
dos extremos. En consecuencia, los elementos de una pila se
eliminan en el orden inverso al que se insertaron. Debido a est
caracterstica, se le conoce como estructura LIFO (last input,
first output).

n Existen muchos casos prcticos en los que se utiliza la idea de


pila:
n Ejemplo; pila de platos, en el supermercado latas.
n Las pilas con estructuras lineales como los arreglos, ya que
sus componentes ocupan lugares sucesivos en la ED y c/u
tienen un nico sucesor/predecesor, con excepcin del
primero/ltimo.
Definicin de Pila
Una coleccin de datos a los cuales se
les puede acceder mediante un extremo,
que se conoce generalmente como tope.
u Se utilizan arreglos. Es importante definir el
tamao de la mximo de la pila, as como una
variable auxiliar que se denomina TOPE. Est
variable se utiliza para indicar el ltimo elemento
que se insert en la pila.
PILAS
Representacin de pilas
n Al utilizar arreglos para implementar pilas se
tiene la limitacin de que se debe reservar el
espacio en memoria con anticipacin. Una
vez dado un mximo de capacidad a la pila
no es posible insertar un nmero de
elementos mayor que el mximo establecido.
Si esto ocurre, en otras palabras si la pila
esta llena y se intenta insertar un nuevo
elemento, se producir un error conocido
como desbordamiento overflow
Posibles soluciones
n Una posible solucin a este tipo de
inconvenientes consiste en definir pilas de
gran tamao, pero esto resultar ineficiente y
costoso si solo se utilizarn algunos
elementos. No siempre es viable saber con
exactitud el nmero de elementos a tratar, y
siempre existe la posibilidad de que ocurra
un error de desbordamiento.
Otra solucin
p Consiste en usar espacios compartidos de memoria para
la implementacin de pilas. Supongamos que se necesitan
dos pilas, c/u con un tamao mximo de N elementos. Se
definir entonces un arreglo unidimensional de 2*N
elementos, en lugar de 2 arreglos de N elementos c/u.

Figura muestra la PILA 1 ocupar desde la posicin 1 en adelante, mientras


que la PILA 2 ocupar desde la posicin 2*N hacias atrs (2*N-1..)
Si en algn momento del proceso la PILA 1 necesitar ms espacio del que
realmente tiene -N- y en ese momento la PILA 2 no tiene ocupados todos sus
N lugares entonces sera posible agregar elementos a la PILA1 sin caer en
un error de desbordamiento. Algo similar podra suceder con la PILA 2.
Espacios Compartidos
Error y Operaciones
l Otro error que se puede presentar es
tratar de eliminar un elemento de un pila
vaca. Este tipo de error se le conoce
como subdesbordamiento underflow-
l Operaciones conpilas
l Insertar un elemento push- en la pila
lEliminar -pop de la pila
lPila_vaca
lPila_llena
o Considerando que se tiene una pila
con una capacidad para almacenar un
nm mximo de elementos MAX- y
que el ltimo de ellos se indica con
TOPE, a continuacin se presentan los
algoritmos de las operaciones
mencionadas. Si la pila est vaca,
entonces TOPE es igual a 0.
Algoritmo Pila_vaca
Algoritmo Pila_llena
Algoritmo Pone
Algoritmo Quita

Ejemplo Das de la semana


Ejemplo Das de la semana
Ejemplo Das de la semana
Aplicaciones de Pilas
n
u Las pilas son un EDs muy usadas en la solucin de
diversos tipos de problemas, en el rea de
computacin. Algunos de los casos ms representativos
de aplicacin de las mismas son:
n Llamadas a subprogramas
n Recursividad
n Tratamiento de expresiones aritmticas
n Ordenacin
Llamadas a subprogramas
n Cuando se tiene un programa que llama a un
subprograma, tambin conocido como mdulo o
funcin, internamente se usan pilas para guardar el
estado de las variables del programa, as como
instrucciones pendientes de ejecucin en el
momento que se hace la llamada.
n Cuando termina la ejecucin del subprograma, los
valores almacenados en la pila se recuperan para
continuar con la ejecucin del programa en el punto
en el cual fue interrumpido.
n Adems de las variables se recupera la direccin del
programa en la que se hizo la llamada, por que a esa
posicin se regresa el control del proceso.
Ejemplo:
a) Se guarda la posicin en la que se hizo la
llamada. Al terminar UNO, el control se regresa
a PP recuperando previamente la direccin de
la pila b)
Ejercicio 1:
Implementar una funcin que recibe una lista de enteros L y un
nmero entero n de forma que modifique la lista mediante el
borrado de todos los elementos de la lista que tengan este valor.

Ejercicio 2:
Escribir una funcin Reemplazar que tenga como argumentos una
pila con tipo de elemento int y dos valores int: nuevo y viejo de
forma que si el segundo valor aparece en algn lugar de la pila,sea
reemplazado por el segundo.

Ejercicio 3:
Implementar una funcin Mezcla2 que tenga como parmetros dos
listas de enteros ordenados de menor a mayor y que devuelva una
nueva lista como unin de ambas con sus elementos ordenados de
la misma forma.
u Ejercicio 4:
u Supongamos que TEST es alguna funcin Booleana que toma cualquier entero dado y
devuelve un valor igual o distinto a cero. Consideremos el siguiente segmento de
cdigo:
u N=3;
u p=CrearPila(sizeof(int));
u for (i=1;i<=N;i++)
u if (TEST(i))
u printf("%d",i);
u else Push(&i,p);
u while (!VaciaPila(p))
u { s
u Tope(&i,p);
u Pop(p);
u printf("%d",i);
u }
Cules de las siguientes son posibles salidas del cdigo anterior?.
a)1 2 3
b)1 3 2
c)2 1 3
d)3 1 2
e)2 3 1
f)3 2 1
Tratamiento de expresiones
aritmticas
l Un problema interesante en computacin consiste en convertir
expresiones en notacin infija a su equivalente en notacin prefija o
posfija.

l Dada la expresin A+B se dice que sta en notacin infija, porque


el operador (+) se encuentra entre los operandos (A y B).

l Dada la expresin AB+ se dice que sta en notacin posfija por


que..

l Dada la expresin +AB se dice que sta en notacin prefija..

l La ventaja de usar expresiones en notacin posfija o prefija radica


en que no es necesario utilizar parntesis para indicar orden de
operacin, ya que ste queda establecido por la ubicacin de los
operadores con respecto a los operandos.
Tratamiento de expresiones
aritmticas
l Para convertir una expresin dada en notacin infija a
una en notacin posfija o prefija se establecen ciertas
condiciones:
l Los operadores de ms alta prioridad se ejecutan
primero
l Si hubiera en una expresin dos o ms operadores de
igual prioridad, entonces se procesarn de izquierda a
derecha.
l Las subexpresiones que se encuentren ente parntesis
tendrn ms prioridad que cualquier operador.
Ejemplos
l Expresin infija: X + Z * W
l Expresin posfija XZW*+
EJEMPLO 2
Algoritmo Convierta a notacin
posfija
Continuacin del Algoritmo Convierta a notacin
posfija
Notacin Infija
o Ejemplo1
o Expresin infija: X + Z * W
o Expresin prefija +X*ZW
Ejemplo 2
Algoritmo Convertir a prefija
Funcionamiento del Algoritmo
Ejemplo3
Expresin infija: X + Z * W
Expresin prefija +X*ZW
Ejemplo 4
Existen dos variantes de las dobles

Doble cola (DC) con entrada restringida

La primera permite hacer eliminaciones


por cualquiera de los dos extremos,
mientras que las inserciones slo por el FINAL de la cola
DC con salida restringida

Das könnte Ihnen auch gefallen