Pilas
Definición
¿Qué es una pila?
Una pila (stack) es una estructura de datos, que consta de una serie de datos, en la cual las inserciones y eliminaciones se hacen por un extremo, llamado cima (top), de la pila. La estructura pila se conoce como LIFO (last-in, first-out, último en entrar, primero en salir), que significa “último elemento introducido, primero sacado”.
Operaciones fundamentales
Las operaciones fundamentales introducir y eliminar se hacen por un extremo de la pila llamado cima (top).
Veamos algunos ejemplos de pilas en la vida cotidiana:
Ejemplos en Computación
l Llamado a funciones.
– El programa principal llama a una función.
– La función llama a otra función.
– La pila indica dónde debe regresar la función una vez que se termina la misma – lo indica la pila à última función que hizo el llamado, primera en volver – .
– Aplicación principal ]FUNCIONES RECURSIVAS.
l Bucles anidados.
– Último bucle en abrirse, primero en cerrarse.
l Condiciones anidadas.
– Última condición en abrirse, primera en cerrarse.
Evolución de la PILA
Operaciones básicas de la PILA
l Crear o inicializar inicializar una pila (p) vacía.
l Pila vacía (empty) determinar si una pila esta vacía.
l Pila llena determina si la pila se ha llenado.
l Meter (push) inserta un elemento en la cima de la pila.
l Sacar (pop) recupera y elimina el último elemento en la cima de la pila.
Implementación de las funciones con punteros
//Declaraciones generales
Estructura tipo_nombre
…………..
…………..
Tipo_nombre anterior
Fin de estructura
tipo_nombre à cima, elemento
tipo cantidad à tope
función inicializar
cima = nulo
fin función
lógico función vacío
si cima = nulo
devolver (verdadero)
si_no
devolver (falso)
fin_si
fin función
lógico función llena
si cima = tope
devolver (verdadero)
si_no
devolver (falso)
fin_si
fin función
función meter
tipo nombre auxi
reservar (auxi)
auxiàelemento = elemento
auxi àanterior = cima
cima = auxi
fin función
función sacar
tipo nombre auxi
auxi = cima
elemento = auxiàelemento
cima = auxiàanterior
liberar (auxi) // Procedimiento para la eliminación de variables dinámicas
fin función
Ejemplo de Pila:
#include <iostream.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <stdio.h> struct pilas { int d; pilas *a; }*c,*e; void menu(void); void ingresar(void); void sacar (void); void actualizar_pila(void); main() { menu(); } void menu(void) { int y,opc; for(;;) { cout<<"\n1. Ingresar datos"; cout<<"\t2. Sacar datos"; cout<<"\t0. Terminar"; cout<<"\n Ingrese opcion: ";cin>>opc; switch(opc) { case 1: ingresar(); break; case 2: sacar(); break; case 0: exit(1); default: cout<<"\n Opcion no valida!!"; break; } actualizar_pila(); cout<<"\n\nOprima una tecla para continuar"; getch(); } } void ingresar (void) { if(!c) { c=new(pilas); cout<<"Ingrese elemento: "; cin>>c->d; c->a=NULL; return; } e=new(pilas); cout<<"\nIngrese elemento: "; cin>>e->d; e->a=c; c=e; } void sacar(void) { if(!c) { cout<<"\n\nNo hay elementos!!"; return; } e=new(pilas); e=c; cout<<"\n\nElemento eliminado: " <<e->d; c=e->a; delete(e); } void actualizar_pila(void) { int y=2,i,ca=0; e=c; while(e) { ca++; e=e->a; } for(i=0;i<=ca;i++) { cout<<" "; } //muestro lo que tiene la pila!! i=0; e=c; while(e) { cout<<"\n"; cout<<++i<<" - "<<e->d; e=e->a; } }