PILAS Y COLAS
PILAS Y COLAS
PILAS
DEFINICIÓN DE PILA: UNA PILA ES UN TIPO ESPECIAL DE LISTA ABIERTA 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 "EMPUJAR" Y "TIRAR". ADEMÁS, LAS ESCRITURAS DE DATOS SIEMPRE SON INSERCIONES DE NODOS, Y LAS LECTURAS SIEMPRE ELIMINAN EL NODO LEÍDO.
ESTAS CARACTERÍSTICAS IMPLICAN UN COMPORTAMIENTO DE LISTA LIFO (LAST IN FIRST OUT), EL ÚLTIMO EN ENTRAR ES EL PRIMERO EN SALIR.
El símil del que deriva el nombre de la estructura es una 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.
typedef struct _nodo {
int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Pila;
El símil del que deriva el nombre de la estructura es una 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.
typedef struct _nodo {
int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Pila;
TIPONODO ES EL TIPO PARA DECLARAR NODOS, EVIDENTEMENTE.
PNODO ES EL TIPO PARA DECLARAR PUNTEROS A UN NODO.
PILA ES EL TIPO PARA DECLARAR PILAS.
ES EVIDENTE, QUE UNA PILA ES UNA LISTA ABIERTA. ASÍ QUE SIGUE SIENDO MUY IMPORTANTE QUE NUESTRO PROGRAMA NUNCA PIERDA EL VALOR DEL PUNTERO AL PRIMER ELEMENTO, IGUAL QUE PASA CON LAS LISTAS ABIERTAS. 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.
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.
COLAS
Una cola es un tipo especial de lista enalazada 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.
typedef struct _nodo {
int dato; struct _nodo *siguiente;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Cola;
Es evidente, que una cola es una lista abierta. Así que sigue siendo muy importante que nuestro programa nunca pierda 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, a continuación del nodo que no tiene nodo siguiente, y leerlos desde el principio, hay que recordar que leer un nodo implica eliminarlo de la cola.
Una cola es un tipo especial de lista enalazada 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.
typedef struct _nodo {
int dato; struct _nodo *siguiente;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Cola;
Es evidente, que una cola es una lista abierta. Así que sigue siendo muy importante que nuestro programa nunca pierda 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, a continuación del nodo que no tiene nodo siguiente, y leerlos desde el principio, hay que recordar que leer un nodo implica eliminarlo de la cola.