Vous êtes sur la page 1sur 42

Unidad 5

Estructuras de
Datos Estticas
Pilas o colas LIFO

(STACKS)
Introduccin
Estudio de la TAD Pila:
Definicin de la estructura de
datos e identificacin de su
conjunto de operaciones
Aplicaciones
Tipos de implementaciones

Caracterstica: 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
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 en la vida

Pila de platos o Libros


Ordenamiento de
latas en conserva
de los supermercados
Envase de pelotas de Tenis
Cargador de
Armas Automticas
Ejemplos Computacionales
Historial de pginas visitadas en un
navegador web.

Secuencia deshacer un editor u otra


aplicacin similar
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

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 pop push

Pila
vaca
Ms Operaciones
Comprobar si la pila est vaca.
Operacin necesaria para saber si se pueden
eliminar elementos
NO se puede eliminar de una pila vaca
Determinar el elemento en el tope de la
pila sin removerlo
Ejercicios con Pilas

Dada las operaciones bsicas descritas en el


TAD pila, definir operaciones para:
Imprimir los elementos de una pila
Imprimir la Cantidad de elementos de una pila
(tamao de la pila)
Eliminar el ltimo elemento de la pila
Eliminar el n-simo elemento de la pila
Invertir una pila
Implementacin

Como programar con pilas


Consideraciones en la
implementacin
Realizar comprobaciones:
En una pila vaca no se pueden sacar datos
Si la pila se implementa con un vector de tamao
fijo, se puede llenar cuando
Puede existir desbordamiento de pila (stack
overflow).
La codificacin de una pila requiere equilibrio
(si la longitud mxima de la pila es grande
puede gastar mucha memoria)
Consideraciones (cont)
Si la longitud mxima tiene un valor muy
pequeo, se producirn desbordamientos
frecuentes.
Se deben disear funciones de
poner (push)
quitar (pop)
pilavacia: Comprobar si la pila est vaca
pilallena: Comprobar si la pila est llena
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:
Arreglos (esttica)
Listas Enlazadas (dinmica)
Implementacin con arreglos

Se necesita un arreglo y una variable


numrica, TOPE que indique la posicin
del ltimo elemento colocado en la pila.
Se limita el mximo nmero de elementos
que la pila puede contener (tamao del
arreglo)
Se puede definir una pila de enteros en C
como: int pila[n];
Implementacin con arreglos
(cont)
Push (PILA, DATO, TOPE)
Comienzo
TOPE TOPE+1
PILA[TOPE] DATO
fin

MAX: Nmero mximo de elementos


TOPE: Posicin de elemento en el tope

Consideracin: Si tope es igual a MAX no se


puede insertar (push), la pila est llena
(overflow)
Implementacin con arreglos
(cont)
Pop (PILA, DATO, TOPE)
Comienzo
DATO PILA[TOPE]
TOPETOPE-1
fin

Consideracin:
Si TOPE es igual a -1 no se puede sacar (pop),
la pila est vaca
Implementacin: Variacin

Usando registros en C se puede usar una sola


variable:

#define MAXPILA 100


typedef struct
{
int dato[MAXPILA]
int tope;
} pila;

pila p;
Aplicaciones

Donde se usan o para que sirven


Expresiones Aritmticas

Balance correcto de parntesis:


Ejemplo:
7((X*((X+Y)/J-3))+Y/(4-2.5))
Reglas:
1. Igual cantidad de parntesis izquierdos
y derechos
2. Cada parntesis derecho est precedido por el
correspondiente parntesis izquierdo
Ms Aplicaciones

Llamada a subprogramas
En cada llamada se guarda el estado de las variables del
programa en una pila.
Cuando se acaba la ejecucin del subprograma, se
recuperan los valores almacenados en la pila y continuar la
ejecucin del programa en el punto que fue interrumpido

Recursividad
Filas o Colas FIFO
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)
Ejemplos computacionales
Colas de Impresin
Caractersticas

Su representacin grfica:
Frente

A B C D

Final

Fila de 4 elementos si se agrega un nuevo


elemento E se agregar despus de D
Operaciones con Filas
Las operaciones primarias son:
Insertar un elemento a la Fila
Eliminar un elemento de la Fila
Ejemplos

Frente Final Frente Final Frente Final

Insertar Insertar Eliminar


Insertar A A B A B C

B C Insertar
B C D Eliminar
C D
Frente Final Frente Final Frente Final
Ms 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
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
Declaracin en C de una fila de enteros
int fila[MAXFILA];
int frente, final;
Impl.con arreglos: Insercin

Inserta (FILA, FINAL, DATO)


Comienzo
FINAL FINAL + 1
FILA[FINAL] DATO
fin
Considerar que no se puede agregar si la fila est llena
Antes de llamar a esta rutina se debe ver que no se
cumpla que FINAL=Mximo Cantidad de elementos

Por lo anterior se debe agregar una funcin de filallena


Impl.con arreglos: Eliminacin

Eliminar (FILA, FRENTE, FINAL, DATO)


Comienzo
DATO FILA[FRENTE]
Si FRENTE = FINAL entonces
comienzo
FRENTE 0
FINAL -1
fin
sino
FRENTE FRENTE + 1
fin
Considerar que no se puede eliminar si la fila est vaca
Antes de llamar a esta rutina se debe ver que no se
cumpla que FINAL=-1
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
Implementacin: Variacin

Usando C con una variable


#define MAXFILA 100
typedef struct
{
int dato[MAXFILA];
int frente,final;
} fila;
Propuesta: reestructurar todas
las operaciones con filas
Otros tipos: Fila Circular
Frente
El elemento anterior
al primero es el ltimo
(en ingls es una dequeue)
Final
Implementacin con arreglos
Frente

Final
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
Aplicaciones
Colas de impresin
Impresora que atiende
a varios usuarios
Sistemas de Tiempo Compartido
(TimeSharing)
CPU
Memoria
Otras variantes
Colas de prioridades

Vous aimerez peut-être aussi