You are on page 1of 13

Algoritmo y Estructura de Datos II

PILAS en C++

Lenguaje C / C++

Pilas - Definicin
Una Pila es un tipo de lista abierta en la que solo se pueden insertar o eliminar nodos en uno de los extremos de la lista. Estas operaciones son conocidas como PUSH y POP, que significan empujar y tirar respectivamente. Adems las escrituras de datos siempre con consideradas inserciones de nodos, y las lecturas siempre eliminaran el nodo ledo.

Pilas - Definicin
A las Pilas se les conoce como estructuras tipo LIFO(Last In First Out), el ultimo en entrar es el primero en salir. Un ejemplo tpico para comprender su funcionamiento es imaginar una pila de platos. El ultimo plato colocado sobre la pila es el primero que se quita de ella. El manejo de una pila es similar al de las listas, solo que el numero de operacin que puede realizarse es menor.

Pilas - Definicin
A continuacin vamos a ver como crear una pila, introducir elementos y retirar elementos de ella.

Pilas Creacin
Al igual que con las listas, consiste en definir una estructura para el nodo, crear un puntero capaz de apuntar a esos nodos y hacer que apunte NULL, ya que en un primer momento la pila esta vaca.
#include <stdio.h> #include <stdlib.h> //Definicion del nodo, Como datos contiene un numero entero //El punter ps (puntero a siguiente) permitira enlazar los nodos struct nodo { int n; struct nodo * ps; }; int main() { struct nodo *ppila; //Creo el puntero identificador de la pila ppila =NULL; //Al principio la pila no tiene nada return 0; }

Pila Introducir un nodo en la Pila


Hay que distinguir entre 2 situaciones: si la pila donde introducimos el nodo esta vaca o tiene ya elementos. SI la pila esta vaca. En este caso simplemente hacemos que el puntero de la pila apunte al nodo recin creado. El siguiente ejemplo nos muestra como realizarlo.

Pila Introducir un nodo en la Pila


int main() { struct nodo *ppila; struct nodo *pnodo; //Creo el puntero identificador de la pila //Creo el puntero a un nodo

ppila =NULL; //Al principio la pila no tiene nada pnodo = (struct nodo*) malloc(sizeof(struct nodo)); //Estoy creando el espacio en memoria para un nodo. pnodo->n = 5; //Introduzco un dato en el nodo

//Ahora adimos el nodo a la pila ppila = pnodo; pnodo->ps = NULL; //Este es el primero de la pila //Pero tambien el ultimo, por lo que su punter debera apuntar a NULL // La pila contiene ahora un solo Nodo return 0; }

Pila Introducir un nodo en la Pila


Si la pila esta vaca contiene ya algn elemento. En este caso se debe introducir un nuevo nodo colocndose delante de los dems. (En una cola los elementos introducidos siempre entran y salen por delante)

Pila Introducir un nodo en la Pila


int main() { struct nodo *ppila; struct nodo *pnodo; //Creo el puntero identificador de la pila //Creo el puntero a un nodo

//Creamos el nodo pnodo = (struct nodo*) malloc(sizeof(struct nodo)); pnodo->n = 5; //Introduzco un dato en el nodo //Ahora lo concatenamos por delante pnodo->ps = ppila; //Ese nodo es ahora el primero ppila = pnodo; //Resituo el identificador de la pila return 0;

Pila Sacar un nodo de la Pila


Sacar datos de la pila consiste en usar los datos que contenga y luego eliminar el nodo. La eliminacin de los nodos siempre se realiza por la parte delantera de la pila.

Pila Sacar un nodo de la Pila


.

//Usamos el dato. Por ejemplo lo imprimirmos


printf( Dato: %d\n, ppila->n); //Y luego lo borramos paux=ppila; ppila=ppila->ps; free(paux);

//ppila apunta ahora al siguiente // elimino el primer nodo usando paux

Actividad propuesta
Elabore un algoritmo que permita llenar una pila con los valores enteros de 1 al 10 y luego los valla sacando y mostrando en pantalla uno por uno.