You are on page 1of 8

1

Estructuras de Datos
Estticas
Pilas y Filas
Stacks
Pilas o colas LIFO
Introduccin
Caracterstica principal:
Estructura de datos de acceso
restrictivo a sus elementos
Definicin de Pila
Lista ordenada de elementos a
la cual se puede insertar o
eliminar elementos slo por
uno de los extremos
Caracterstica de una Pila
Los elementos se eliminan en orden
inverso al que se insertaron
El ltimo elementos que se inserta
en la pila es el primero en salir
Estructura LIFO: Last In First Out
Ejemplos reales
Pila de platos o Libros
Ordenamiento de
latas en conserva
de los supermercados
Envase de pelotas de Tenis
Cargador de
Armas Automticas
2
Caractersticas
La representacin grfica tpica:
El elementos superior se
llama TOPE
No se pueden extraer los
elementos C, B y A sin
antes extraer D
B
A
D
C
El uso de las pilas es independiente de
la implementacin interna
Operaciones Elementales
Insertar o agregar un elemento a la Pila:
PUSH
Tambin se puede decir poner o apilar
NO existe limite o restriccin para
agregar elementos (crece
indefinidamente)
Quitar un elemento de la Pila: POP
Sacar o desempilar
Operaciones Elem. (cont)
Ejemplo:
push push push push pop
Pila
vaca
Mas Operaciones
Comprobar si la pila est vaca.
Operacin necesaria para saber si se pueden
eliminar elementos
NO se puede eliminar de una pila vaca
Otras:
Obtener un elemento de la pila
Imprimir los elementos de la pila
Ver el elemento en el tope de la pila sin
removerlo
Implementacin
Como programar con pilas
Consideraciones
Se deben realizar comprobaciones
periodicamente ya que:
NO se pueden sacar datos a una pila vaca
Si la pila se implementase con un vector de
tamao fijo, se puede llenar cuando se
intenta insertar (push) un nuevo valor.
Por lo tanto debe evitarse un
desbordamiento de pila (stack
overflow).
3
Consideraciones (cont)
La codificacion de una pila requiere
equilibrio: si la longitud moxima (o
tamao) de la pila es grande puede
gastar mucha memoria
innecesariamente
Si la longitud moxima tiene un valor
muy pequeo, se produciron
desbordamientos frecuentes.
Consideraciones (cont)
Se deben disear funciones para
poner (push)
quitar (pop)
pilavacia: Comprobar si la pila esto vaca
pilallena: Comprobar si la pila esto llena
vertope: Obtener el valor de elemento
que esto en el tope de la pila sin
removerlo de la pila
Implementaciones
Las pilas son estructuras de datos
fundamentales: no estn definidas en
los Lenguajes de Programacin como
los registros
Las pilas se pueden implementar
mediante dos opciones:
Arreglos (opcin esttica)
Listas Enlazadas (opcin dinmica)
Implementacin con arreglos
Se necesita un vector de tamao N y
una variable numerica llamada tope
que indique la posicion del ltimo
elemento colocado en la pila (vector).
Previamente se limita el moximo
nmero de elementos que la pila puede
contener (tamao del vector). Ejemplo:
#define N 10
Implementacin
Usando estructuras en C se puede
usar una sola variable que tenga a:
Los elementos de la pila (el vector) y,
La posicin del tope
Definicin en C de una pila
#define MAXPILA 100
typedef struct
{ int dato[MAXPILA]
int tope;
} pila;
Ahora se pueden declarar variables del
tipo pila. Ej:
pila p;
4
Consideraciones
Antes de ingresar o eliminar
elementos a la pila (vector) se
modificaro el campo tope
El valor de del campo tope
inicialmente debero ser -1 para indicar
que se encuentra vaca
Implementacin: push
La funcin de insercin en C sera:
void push (pila *p, int dato)
{ p->tope = p->tope + 1;
p->dato[p->tope] dato;
}
p->tope: Posicin de elemento al tope
de la pila
Considerocion: Anfes de inserfor (push) debero
hoberse verificodo si se puede inserfor o Io piIo,
o seo, que no esfo IIeno
Implementacin: pop
int pop (pila *p)
{ int dato;
dato p->dato[p->tope];
p->tope = p->tope - 1;
return (dato);
}
Considerocion:
Anfes de eIiminor (pop) debero hoberse verificodo
que Io piIo no esfo voco ( disfinfo de -I)
Tarea : Programar
Crear las funciones elementales Crear las funciones elementales
restantes para esta implementaci restantes para esta implementaci n n
b b sica de pilas sica de pilas
Crear un archivo Crear un archivo defpila.h defpila.h con la con la
definiciones y funciones anteriores definiciones y funciones anteriores
Crear un programa en C que incluya Crear un programa en C que incluya
( (#include #include) al m ) al m dulo dulo defpila.h defpila.h y permita y permita
operar con una pila usando las funciones operar con una pila usando las funciones
elementales a trav elementales a trav s de un men s de un men . .
Tarea : Ejercicios con Pilas
Dada Dada las las operaciones operaciones b b sicas sicas descritas descritas
en el TAD en el TAD pila pila, , definir definir funciones funciones para para: :
Imprimir Imprimir los los elementos elementos de de una una pila pila
Imprimir Imprimir la la Cantidad Cantidad de de elementos elementos de de una una
pila pila ( (tama tama o o de la de la pila pila) )
Eliminar Eliminar el el ltimo ltimo elemento elemento de la de la pila pila
Eliminar Eliminar el el n n- - simo simo elemento elemento de la de la pila pila
Invertir Invertir una una pila pila
QUEUES
FILAS o COLAS FIFO
5
Introduccin
Similarmente se les conoce como
COLAS
Se usan a menudo para simular cosas
del mundo real
Definicin de Fila
Fila o Cola (queue): Coleccin
Ordenada de elementos a partir de la
cual se pueden eliminar elementos de
un extremo, llamado frente, y agregar
elementos en el otro extremo, llamado
final (posterior, atrs).
El primer elemento que se inserta en la
Fila es el primero en salir (estructura
FIFO: First In First Out)
Ejemplos en la vida
Personas formadas
frente a las cajas de
supermercado o banco
Autos que esperan cambio de luz de
un semforo en rojo
Las mangueras (regar por ejemplo)
Caractersticas
Su representacin grfica:
Fila de 4 elementos si se agrega un
nuevo elemento E se agregar
despus de D
A B C D
Frenfe
FinoI
Operaciones con Filas
Las operaciones primarias son:
Insertar un elemento a la Fila
Eliminar un elemento de la Fila
Ejemplos
A A B A B C
B C D B C C D
Insertar
Eliminar
Insertar
Insertar
Eliminar



Insertar


Mas Operaciones
Comprobar si la fila est vaca
Esto debido a que no se puede eliminar
elementos de una fila vaca
Obtener el largo de la fila
Saber cuantos elementos tiene la fila
6
Consideraciones
La operacin de insertar no tiene
restricciones
Solo en la implementacin
No se pueden remover elementos
desde una fila vaca (underflow)
Implementaciones
Las filas son estructuras de datos
fundamentales (no estn definidas en
los Lenguajes de Programacin)
Las implementaciones tpicas usan:
Arreglos (esttica)
Listas enlazadas (dinmica)
Implementacin con arreglos
Se necesita un arreglo y dos variables
numricas:
Frente (front): Posicin del primer elemento
de la fila. Inicialmente en 0
Final o Atrs (rear): Posicin del ltimo
elemento de la fila. Inicialmente en -1
Implementacin: Definicin
Usando C con una variable
#define MAXFILA 100
typedef struct
{
int dato[MAXFILA];
int frente,final;
} fila;
Impl.con arreglos: Insercin
void inserta (fila *f, int dato)
{ f->final f-final + 1;
f->dato[f->final] = dato;
}
Consideror que no se puede ogregor si Io fiIo esfo IIeno
Anfes de IIomor o esfo rufino se debe ver que no se
cumpIo que finoI hoyo oIcon;odo Io Ifimo posicion
Por Io onferior se debe ogregor uno funcion de fiIoIIeno
Impl.con arreglos: Eliminacin
int eliminar (fila *f)
{ int sale;
sale = f->dato[f->frente]
if (f->frente==f->final)
{ f->frente=0;
f->final=-1;
}
else f->frente=f->frente+1;
return (sale);
}
Consideror que no se puede eIiminor si Io fiIo esfo voco
Anfes de IIomor o esfo rufino se debe ver que no se
cumpIo que FIMAL~-I
7
Impl. con arreglos:
Consideraciones
Las dos funciones anteriores tienen un
problema cuando se han hecho
simultneas inserciones y
eliminaciones:
En algn momento no podran insertarse
elementos aun cuando la fila no est
llena en su capacidad mxima
Impl. con arreglos: Ajustes
Situacin anterior puede resolverse de
dos maneras:
Despus de eliminar mover todos los
elementos a principio del arreglo (no muy
eficiente)
O usar Filas circulares
Otros tipos: Fila Circular
El elemento anterior
al primero es el ltimo
(en ingls es una dequeue)
Implementacin con arreglos

Otros tipos: Fila Doble


Los elementos pueden insertarse o
eliminarse por cualquiera de los dos
extremos
Variantes:
Doble fila con entrada restringida, y
Doble fila con Salida restringida
Propuesta
Crear las funciones en C que definen las Crear las funciones en C que definen las
operaciones sobre una fila circular operaciones sobre una fila circular
Insertar elementos Insertar elementos
Eliminar elementos Eliminar elementos
Ver si la fila est Ver si la fila est vac vac a a
Ver si la fila est Ver si la fila est llena llena
Imprimir los elementos Imprimir los elementos
Obtener el largo de la fila Obtener el largo de la fila
Lo mismo anterior para la doble fila Lo mismo anterior para la doble fila
Aplicaciones
Colas de impresin
Impresora que atiende
a varios usuarios
Sistemas de Tiempo Compartido
(TimeSharing)
CPU
Memoria
8
Otras variantes
Colas de prioridades

You might also like