You are on page 1of 25

Estructuras de Pilas y colas.

Las Pilas y las Colas, como tal, no existen en los lenguajes de programacin, sino que se
pueden implementar mediante el uso de estructuras estticas o dinmicas. Se
caracterizan porque las operaciones de insercin y cancelacin estn restringidas por la
estructura utilizada para resolver un ejercicio. En una pila se inserta y se cancela por un
mismo extremo, un ejemplo de una pila puede ser la forma como se organizan los platos
en un bufet (El plato que se coloca de ultimo en la pila es el primero que se saca). En
una cola se inserta por un extremo y se cancela por el extremo opuesto, un ejemplo de
una cola, puede ser una Fila de un banco donde los clientes se ubican a medida que van
llegando y salen de la fila en el mismo orden que ingresan, es decir; los primeros en
entrar en la fila son los primeros en salir.
Se van a representar las Pilas y las Colas mediante arreglos unidimensionales
PILAS
Definicin

La pila es un tipo de estructura de datos que almacena un conjunto de elementos que se


pueden acceder por un solo extremo, generalmente se conoce como el tope o cima.

Para poder utilizar una pila es necesario establecer su nombre, el tamao y


indicador que muestra la posicin del ltimo elemento incluido.

Se usar la siguiente notacin:

tope

pila

Juan

pila : nombre de la pila :

Jos

Abel

AJuan

Flor

tam

un

tope : Indica la posicin del ltimo elemento incluido


tam:

Indica el tamao de la pila

Una pila se encuentra vaca si el tope esta en cero (tope=0).

Sobre las pilas se pueden realizar diferentes operaciones, tales como incluir, eliminar,
buscar y otras.

Operaciones bsicas del uso de las PILAS

Incluir un elemento en una pila:


Para incluir un elemento en una pila representada por medio de un vector, se verifica si
hay espacio y si es as, se incrementa el tope en uno y en esta posicin se incluye el
elemento. Cuando la pila est llena no se puede insertar.

SUB Inpila (pila,tope, tam, elem)


Si

(tope < tam) entonces // Si hay espacio en la pila


topetope+1 // Aumenta el indicador
pila[tope] elem //Incluye el elemento

Sino

// No hay espacio en la pila


Esc Pila llena

Fin - si
Fin-SUB

Cancelar un elemento en una pila:

Para cancelar un elemento en una pila representada por medio de un vector, se


comprueba que no est vaca y si tiene elementos se elimina el elemento que se
encuentra en la posicin del tope. El valor eliminado se regresa en la variable llamada
elem.

SUB Canpila (pila, tope, tam,elem)


Si

(tope=0) // Cuando la pila esta vaca no hay posibilidad de eliminar


Esc Pila vaca

Sino
elempila[tope] // Se regresa el valor del elemento eliminado
topetope-1

//Se actualiza el tope

Fin - si
Fin-SUB

Todos los algoritmos de Pilas y de Colas se desarrollan utilizando los algoritmos bsicos
de cancelacin e insercin.

Ejercicios resueltos

1. Eliminar de una pila ya creada y representada por medio de un vector todas las
ocurrencias del elemento elem.
Para solucionar este ejercicio vamos a realizar los siguientes pasos:
a) Eliminar uno a uno los elementos de la pila, si son diferentes de elem se van
insertando en una pila auxiliar llamada pila1. Los elementos iguales a elem no se
insertan en la pila auxiliar.

tope10
MQ

(tope <>

0)

Canpila (pila, tope, tam elem)


Si

(elemp<>elem)
Inpila (pila1, tope1, tam,elemp)

b) Cancelar los elementos de la pila auxiliar pila1 e irlos insertando en la pila original,
para nuestro caso llamada pila.

MQ

(tope1 <>

0)

Canpila (pila1, tope1, tam,elemp)

Observe que finalmente, pila1 queda vaca y la pila original pila, queda con los
elementos diferentes de elem.

NOTA: Observe que, cuando se llaman las subrutinas de Inpila se incluye un elemento
a la vez y cuando se llama Canpila se cancela un solo elemento a la vez.

Uniendo los pasos para la solucin del problema el algoritmo finalmente queda as:

SUB EliminaPila (pila, tope, tam,elem)


tope10
MQ

(tope <>

0)

Canpila (pila, tope, tam elemp)


Si

(elemp<>elem)
Inpila (pila1, tope1, tam,elemp)

Fin - si
Fin - MQ
MQ

(tope1 <>

0)

Canpila (pila1, tope1, tam,elemp)


Inpila (pila, tope, tam,elemp)

Fin - MQ
Fin-SUB

Intercambiar el orden del elemento que est en el tope por el primer elemento de
la pila, y el primer elemento ponerlo en el tope.

Tam

20

Tam

Tope

12

12

20

Pila

Tope

Pila

El procedimiento para resolver el problema sera:

1) Eliminar el primer elemento de la pila y guardarlo en una variable la


llamaremos ultimo (Canpila (pila, tope, tam,ultimo))

2) Se sigue eliminando elemento por elemento de la pila original hasta que solo
quede un elemento y los vamos guardando en una pila auxiliar llamada Pila1.

20

Tam

Tam

Tope

Tope

7
12

12
9

12

Pila

Tam

Pila1

9
20
Pila

Tope

c) El nico elemento que quedo en la pila original lo cancelamos y lo guardamos en la


variable llamada primero.
d) Una vez la pila original queda vaca, insertamos la variable ultimo que corresponde
al la variable que estaba en el tope.
e) Empezamos a eliminar uno a uno los elementos de la pila auxiliar pila1 y los vamos
insertando en la pila original, hasta que pila1 quede vaca.
f) Finalmente insertamos en la pila original la variable primero.

Ejemplo:

SUB InterCambio (pila,tam,tope)


tope10
Canpila (pila, tope, tam,ultimo) // Se elimina el elemento que est en el tope y se guarda en
la variable llamada ultimo

MQ

(tope<>1)
Canpila (pila, tope, tam,elemp) // Se sigue cancelando en la pila original
Inpila (pila1, tope1, tam,elemp) // Se sigue incluyendo en la pila original

Fin MQ // Se termina cuando quede un solo elemento

Canpila (pila, tope, tam,primero) // Se elimina el elemento que est de primero y se


guarda en la variable llamada primero, la pila quedo
vacia.

Inpila (pila, tope, tam,ultimo)//Se incluye la variable ultimo


MQ

(tope1<>0)
Canpila (pila1, tope1, tam,elemp) //Se cancelan de pila1
Inpila (pila, tope, tam,elemp) //Se insertan en pila

Fin - MQ
Inpila (pila, tope, tam,primero) //Se inserta la variable primero
FinSUB

Realizar una prueba al siguiente algoritmo si n=3

SUB

EJEMPLO ( PILA, Tope, Tam, n)


Tope1 0
MQ

(Tope <> 0) haga


Ejecute Canpila (PILA, Tope, Tam, dato)
Si ( n <> Tope) entonces
Ejecute Inpila (PILA1, Tope1, Tam, dato)
F-Si

Fin_MQ
MQ

(Tope1 <> 0 ) haga


Ejecute Canpila (PILA1, Tope1, Tam, dato)
Ejecute Inpila (PILA, Tope, Tam, dato)
F-Si

Fin_MQ
FIN

SUB

Tam

Tope=

9
3
2
1
PILA

Ejercicios propuestos

1. Intercambiar las posiciones de dos elementos en una pila representada por un vector.
Las posiciones se brindaran por el usuario. Debe tenerse en cuenta que la posicin
ingresada debe ser menor al tamao del vector como lo muestra el ejemplo:

a. Pila = {30-40-50-10-5}

b. Intercambiar elemento en la posicin 1=30 y elemento en la posicin 4=10


c. Pila = {10-40-50-30-5}

2. Insertar un elemento, despus o antes de una posicin K en una pila representada


por medio de un vector, suponiendo que el tamao de la pila es lo suficientemente
grande como lo muestra el ejemplo

a. Pila = {5 30 20 -16 -17} insertar el numero 12 despus y antes de la


posicin 3
b. Pila = {5-30-20-12-16-17}
posicin.

si el usuario decide insertar despus de la

c. Pila = {5-30-12-20-16-17} si el usuario decide insertar antes de la posicin

3. Realizar una prueba paso a paso, mostrando el estado de la pila en cada


instruccin
INICIO
X=3
Y= 5
Z=2
LimpiarPila(P)
Meter( P,X)

Meter (P, 4)
Sacar(P,Z)
Meter(P, Y)
Meter(P, 3)
Meter(P, Z)
Sacar(P,X)
Meter(P, 2)
Meter(P, X)
MQ

(NOT PilaVacia(P)) Haga


Sacar(P, X)
Escriba X

FIN-MQ
FIN
4. Realizar una prueba paso a paso, mostrando el estado de la pila en cada
instruccin
INICIO
LimpiarPila (P)
A= 0
B=5
D= 4
Meter( P,A)
Meter( P,B)
Sacar(P,C)
A=A+ 1
Meter( P,A)
Meter( P,C)

Meter( P,8)
B =A+ B
Meter( P,B)
Meter( P,7)
MQ

(NOT PilaVacia(P)) Haga


Sacar(P, A)
Escriba A

FIN-MQ
FIN

COLAS.
Es una estructura de datos que permite insertar elementos por un extremo, lo
llamaremos Tope y cancelar por el extremo opuesto que lo llamaremos Base. Tambin
se le llama estructura FIFO (FIRST INPUT FIRST OUTPUT) porque el primer
elemento en ingresar ser el primer elemento en salir.
En nuestro caso usaremos la siguiente notacin:

Col

Jos

Abel

Flor

Figura Estructura de Cola


1.
2.
3.
4.

Cola: Nombre de la Cola


Base: Indica la posicin del ltimo elemento eliminado de la cola.
Tope: Indica la Posicin del ltimo elemento incluido en la cola.
Tamao: Nmero mximo de elementos que puede guardar la cola.

5. Una cola se encuentra vaca si el Tope y la base estn en cero( Tope=0, Base=0)
Para la cola de la figura su estado es el siguiente:
Base = 1 Posicin del ltimo elemento ELIMINADO
Tope = 4 Posicin del ltimo elemento INCLUIDO
Tam = 6 Tamao de la cola
Si realizamos las siguientes operaciones sobre la Cola de la figura, su estado en cada
literal sera:
a) Eliminar a Jos

Col

Abel

Flor

b) Insertar a Mary

Tam
Abel

Colaila
c) Eliminar a Abel

Flor

Mary

Base=2

Tope=5
Tam
Flor

Colaila
Base=3

Mary

Tope=5

d) Insertar a Pepe
AJuan
Flor

Colaila

Pepe

Mary

Base=3
AJuan

Tope=5

e) Eliminar a Flor
Tam

Colaila

Mary

Base=4
AJuan

AJuan

Pepe
Tope=5

f) Insertar a Luis
Para insertar otro Nombre, Luis. Se podra:

Hacer corrimiento a la izquierda y reubicar la Base y el Tope, cada vez


que se elimine un elemento.

Tratar el vector como circular

El realizar los corrimientos gasta ms tiempo de procesamiento que el representar la


cola mediante un vector circular. De esta forma, revisemos que debemos cambiar para
incluir a Luis en la Cola Circular.

Tam

Colaila

Mary

Base=4

Pepe
Tope=5

Como hay espacio el elemento se insertar de Primero y la cola quedar as:


AJuan
Tam

Colaila

Luis

Mary

Tope=1

Pepe

Base=4

Insertar en una cola representada por un vector circular.


Para insertar un elemento en una cola que tenga espacio, se incrementa el tope en 1.
Existen algunos casos a considerar:
AJuan

Caso 1: Cola Llena

a)
Tam

Colaila

10

30

40

15

Base=0

Tope=6

b)
Tam
30

Colaila
Base=1

40

15

9
Tope=6

AJuan

c)

Col

10

30

15

AJuan

En ninguno de los estados anteriores se puede insertar un elemento, porque tanto en b)


como en c), se confunde la posicin de la Base con la posicin del Tope y no podramos
determinar si esa posicin, corresponde al ltimo elemento incluido al ltimo
cancelado.
Caso 2: Cola con espacios a pesar que el tope coincide con su tamao
Tam
15

Colaila

Base=3

Para insertar en este estado se reubica el Tope en la posicin 1 y se incluye en esta


posicin.
Tam

Colaila

100

15
Base=3
AJuan

AJuan

En algoritmo finalmente queda as:

SUB

Incola (Cola, Base, Tope, Tam,Elem)


Si

(Tope = Tam y (Base = 1 o Base = 0) y (Tope+1) = Base)


Escribir Cola Llena

Sino
Si

(Tope = Tam)
Tope 1

Sino
TopeTope + 1
Finsi
cola[Tope]Elem
Fin si
Fin-SUB
Eliminar (Cancola): Esta operacin consiste en incrementar la variable Base en uno y
eliminar este elemento.
Observe los casos que se pueden presentar al simular la cola por medio de un vector
circular.
Caso 1.
a) Cola Vacia

Tam

Colaila
Base=03
Tope=0

AJuan

b) Cola con un solo elemento


Base=3

Tam
15

Colaila

Tope=4

Una vez se incrementa la base en uno, la Base se hace igual al Tope, quedando la cola
vaca, por eso se debe colocar la Base y el Tope en cero (Base= 0 y el Tope =0).
C) Cola circular prximo a eliminar el primero

AJuan

Colaila

10

30

40

Tam

15
Tope=4

Base=6

AJuan

Cuando la Base es igual al tamao de la cola el prximo elemento a cancelar es el


primero por esta razn, antes de eliminar el elemento se coloca la Base en 1.

SUB

Cancola (cola, Tope, Base, Tam, Elem1)


Si

(Base = 0 y Tope = 0)
Escribir cola Vaca

Sino

Si

(Base = Tam)
Base1

Sino
Base Base + 1
Fin si
Elem1cola[Base]
Si

(Base = Tope)
Base0
Tope0

Fin si
Fin si
Fin SUB

Realice una prueba paso a paso del siguiente algoritmo.


a)
LimpiarCola (C)
X=5
Y=7
INCOLA (C,X)
INCOLA (C,5)
INCOLA (C,Y)
CANCOLA( C, Y)
INCOLA (C,2)

INCOLA (C,X)
INCOLA (C,Y)
Z=XY
Si

(Z=0)
MQ

(NOT ColaVacia(C)) Haga


CANCOLA(C, X)
Escriba X

FIN-MQ
Finsi

Hacer una prueba de escritorio a los siguientes algoritmos e ir mostrando los estados de
la Cola en cada operacin de llamado.

Algoritmo 1

SUB

ESTADOSCOLA( Cola, Base, Tope, Tam)

base0; tope0; Tam30


X2
Incola ( Cola, base, tope, Tam,4)
Incola ( Cola, base, tope, Tam, X)
Cancola ( Cola, base, tope, Tam, Y)

Incola ( Cola, base, tope, Tam, Y+3)


Incola( Cola, base, tope, Tam, 0)
Cancola ( Cola, base, tope, Tam, Z)
X Y+Z
Incola ( Cola, base, tope, Tam, X)
Incola (Cola, base, tope, Tam, X-1)
Incola ( Cola, base, tope, Tam, X)
MQ

(tope <> 0)
Cancola ( Cola, base, tope, Tam, X)
Escriba X

FIN-MQ
FIN_SUB

Algoritmo 2

SUB

ESTADOPilaCola(pila, tope, Cola, Base1, tope1, Tam)


A0

B1
tope0
CA+B
MQ

(C<10)
SI

(C%2 = 0)
Ejecutar INPILA( Pila, tope, Tam, C)

SINO
Ejecutar INCOLA( Cola, Base1, tope1, Tam, C)

Fi-si
AB
BC
CA+B
Fin-MQ
MQ

(tope <> 0)
Ejecutar CANPILA( Pila, tope, Tam, C)
Escriba C

Fin-MQ
MQ

( tope1<> Base1)
Ejecutar CANCOLA(Cola,Base1, tope1, Tam, C)
Escriba C

FIN_MQ
FIN_SUB

Realice una prueba al siguiente algoritmo y escriba claramente que hace:

SUB

QUEHACE ( Pila, Tope, Max)


Tope1=0, Tope2=0
MQ

(Tope # 0 ) Haga
Llamar Canpila ( Pila, Tope, Max, elem)
Llamar Inpila ( Pila1; Tope1, Max, elem)
Llamar Inpila ( Pila2, Tope2, Max, elem)

FIN_MQ.

QUE HACE esta parte?

MQ

(Tope1# 0) Haga
Llamar Canpila ( Pila1; Tope1, Max, elem)
Llamar Inpila ( Pila, Tope, Max, elem)

FIN_MQ
MQ (Tope2# 0) Haga
parte?

Qu hace esta otra

Llamar Canpila ( Pila2, Tope2, Max, elem)


Llamar Inpila ( Pila, Tope, Max, elem)
FIN_MQ

EJERCICIOS PROPUESTOS

Realizar un procedimiento que ingrese un elemento en una cola ya creada en la posicin


Pos. Haga lo mismo para una pila.

Realizar una subrutina para cancelar el elemento de la posicin K en una cola. Haga lo
mismo con la pila.

Invertir los elementos de una cola


Invertir los elementos de una pila

Hacer una copia de una cola en otra sin los elementos repetidos. Debe utilizar las
subrutinas de Pilas y Colas utilizadas en la clase, simplemente llamndolas. Solo se
permite la solucin a este punto, utilizando PILAS y Colas.

Dada una cola representada por medio de un vector circular, hacer un algoritmo que lea
un valor n1 y si este valor es menor que el tope eliminar los elementos que se
encuentran en las posiciones 1, 1+n1, 1+2*n1, 1+3*n1,..

Tope
10

200

15

45

111

33

Si n1=2 se elimina el 10, 15, 7, 33


Si n1= 3 se elimina el 10, 45, 33

La salida y entrada a una pista de avionetas de un aerdromo est organizada en forma


de fila, con una capacidad mxima de 13 avionetas. Las avionetas llegan por el extremo
izquierdo y salen por el extremo derecho. Un piloto puede decidir retirarse de la fila por
razones tcnicas, en este caso todas las avionetas a la derecha deben ser retiradas, retirar
la que est fallando y las avionetas desplazadas colocarlas de nuevo en el mismo orden
relativo en el que estaban.
Cul es la estructura que representa este tipo de estacionamiento
A) Una pila representada por una lista doblemente enlazada
B) Una pila representada por un vector
C) Una Cola representada por una lista doblemente enlazada
D) Una cola representada por un vector circular

Se represent una cola con un vector circular de cinco posiciones. Utilizando las
variables, BASE para indicar la posicin del ltimo elemento cancelado y TOPE para
indicar la posicin del ltimo elemento incluido y suponiendo que el arreglo se defini
con los subndices del 1 al 5 Cul ser el estado de la COLA si BASE esta en la
posicin 4 y TOPE en la posicin 3

A) La COLA est llena


B) La COLA esta vaca
C) La COLA tiene dos elementos
D) La COLA tiene un elemento

Hacer un algoritmo que realice las siguientes operaciones en una pila y en una cola
vaca:
a) lea nmeros enteros hasta que se introduzca un cero. Si los nmeros son menores de
10, se almacenarn en una pila representada por un vector, y si son mayores de 9, en una
cola representada por un vector circular.
b) Despus lea un nmero N, saque de la pila N elementos y calcule la suma de ellos.
c) Por ltimo, borre de la cola el primer nmero que coincida con la suma calculada