Académique Documents
Professionnel Documents
Culture Documents
Pilas Colas
Adicionar
Extraer
Pilas
• Una pila es un tipo especial de lista simplemente enlazada
en la que sólo se pueden insertar y eliminar nodos en uno
de los extremos de la lista. Estas operaciones se conocen
como "push" y "pop", respectivamente “apilar" y
“desapilar".
• Estas características implican un comportamiento de lista
LIFO (Last In First Out), el último en entrar es el primero en
salir.
• Por ejemplo la pila de platos. Sólo es posible añadir platos
en la parte superior de la pila, y sólo pueden tomarse del
mismo extremo.
Push Pop
(apilar) (desapilar)
Declaraciones de tipos para manejar pilas en C
• Los tipos que definiremos normalmente para manejar pilas serán casi los mismos que para
manejar listas, tan sólo cambiaremos algunos nombres:
• Es evidente, a la vista del gráfico, que una pila es una lista simplemente enlazada. Así que sigue siendo muy
importante que nuestro programa nunca pierda el valor del puntero al primer elemento, igual que pasa con
las lista simplemente enlazada.
• Teniendo en cuenta que las inserciones y borrados en una pila se hacen siempre en un extremo, lo que
consideramos como el primer elemento de la lista es en realidad el último elemento de la pila.
Operaciones básicas con pilas
• Las pilas tienen un conjunto de operaciones
muy limitado, sólo permiten las operaciones
de "push" y "pop":
• Push: Añadir un elemento al final de la pila.
• Pop: Leer y eliminar un elemento del final de
la pila.
Las pilas
La pila es una estructura de datos que permite almacenar datos en el
orden LIFO (Last In First Out) en español, último en entrar, primero en
salir).
La recuperación de los datos es hecha en el orden inverso de su
inserción.
Modelo de la función:
int apilar (Pila *tas, char *dato);
La primera imagen muestra el inicio de la inserción, por lo tanto la lista de
tamaño 1 después de la inserción. La característica de la pila no es muy apreciada con un
solo elemento, ya que es el único a recuperar.
En cambio la 2da imagen nos permite observar el comportamiento de la pila.
Lo que debemos retener es que la inserción siempre se hace en la parte superior de la pila (al
inicio de la lista).
C. Eliminar un elemento de la pila (POP)
• Para eliminar un elemento de la pila, simplemente hay que eliminar el elemento
hacia el cual apunta el puntero inicio.
Esta operación no permite recuperar el dato en la cabeza de la pila, solo
eliminarlo.
Modelo de la función:
int desapilar (Pila *tas);
La función devuelve -1 en caso de error, si no devuelve 0.
Las etapas:
• el puntero sup_elemento contendrá la dirección del 1er elemento
• el puntero inicio apuntará hacia el 2do elemento (después de la eliminación del
1er elemento, el 2do elemento estará en la cabeza de la pila)
• el tamaño de la pila disminuirá un elemento.
•
Ejercicio
• Utilizando Estructura de datos tipo Pilas,
construir un algoritmo (aplicación en C++) que
permita describir el funcionamiento del juego
de la Torre de Hanoi
• Sólo aplicar el pop de toda la pila origen
• No puede colocarse un nodo con mayor valor
sobre otro de menor valor
• Mostrar los orígenes y resultados de las pilas
en cada paso
Torres de Hanoi (práctica)
A B C
A B C
Torres de Hanoi (práctica)
1
A B C
2
A B C
Torres de Hanoi (práctica)
3
A B C
4
A B C
Torres de Hanoi (práctica)
5
A B C
6
A B C
Torres de Hanoi (práctica)
7
A B C
Ejercicio
• Construir un Menu de Operaciones sobre Pilas
1. Push de un nuevo elemento
2. Pop de un elemento
3. Visualizar pila
4. Eliminar Pila
5. Salir
Ejercicio 2
Una industria despacha cajas de frascos de mermelada, cada caja
contiene 12 frascos. Se trabajan en dos fases: envasado y distribución
• Fase de Envasado: Una persona coloca 12 frascos en la caja, la
cierra y la sella con cinta adhesiva; se van ordenando en torres de
máximo 20 cajas
• Otra persona, desde cada torre, va tomando las cajas de encima y
se van etiquetando, formando una nueva pila de cajas listas para su
despacho.
• Aplicando una estructura tipo PILA Elaborar un algoritmos que
describa dicho proceso
Ejercicio 2
Una industria despacha cajas de frascos de mermelada, cada caja contiene 12 frascos. Se
trabajan en dos fases: envasado y distribución
• Fase de Envasado: Una persona coloca 12 frascos en la caja, la cierra y la sella con cinta
adhesiva; se van ordenando en torres de máximo 20 cajas
• Otra persona, desde cada torre, va tomando las cajas de encima y se van etiquetando,
formando una nueva pila de cajas listas para su despacho.
• Aplicando una estructura tipo PILA Elaborar un algoritmos que describa dicho proceso
3.- Mostrar las dos pilas • Cada desempilada debe mostrar la pila anterior y la nueva
pila
• La desempilada es un máximo de 20
• Mostrar la nueva pila indicando el inicio
Colas
• Una cola es un tipo especial de lista abierta en la que
sólo se pueden insertar nodos en uno de los extremos
de la lista y sólo se pueden eliminar nodos en el otro.
Además, como sucede con las pilas, las escrituras de
datos siempre son inserciones de nodos, y las lecturas
siempre eliminan el nodo leído.
• Este tipo de lista es conocido como lista FIFO (First In
First Out), el primero en entrar es el primero en salir.
• El símil cotidiano es una cola para comprar, por
ejemplo, las entradas del cine. Los nuevos
compradores sólo pueden colocarse al final de la cola,
y sólo el primero de la cola puede comprar la entrada.
Declaraciones de tipos para manejar colas en C
• Los tipos que definiremos normalmente para manejar colas serán casi los mismos que para manejar listas y pilas, tan sólo
cambiaremos algunos nombres:
typedef struct _nodo {
int dato;
struct _nodo *siguiente;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Cola;
• Una cola es una lista abierta. No se debe perder el valor del puntero al primer elemento, igual que pasa con las listas
abiertas. Además, debido al funcionamiento de las colas, también deberemos mantener un puntero para el último elemento
de la cola, que será el punto donde insertemos nuevos nodos.
• Teniendo en cuenta que las lecturas y escrituras en una cola se hacen siempre en extremos distintos, lo más fácil será
insertar nodos por el final,.
Operaciones básicas con colas
Nos encontramos ante una estructura con muy
pocas operaciones disponibles. Las colas sólo
permiten añadir y leer elementos:
• Añadir: Inserta un elemento al final de la cola.
• Leer: Lee y elimina un elemento del principio
de la cola.
Añadir elemento en una cola vacía
Partiremos de que ya tenemos el nodo a insertar y, por
supuesto un puntero que apunte a él, además los punteros
que definen la cola, primero y ultimo que valdrán NULL: