Pilas en C++

| 2013-04-27 | 3 Comentarios »

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

p1

 

Operaciones básicas de la PILA

Crear o inicializar  inicializar una pila (p) vacía.

Pila vacía (empty)   determinar si una pila esta vacía.

Pila llena                  determina si la pila se ha llenado.

Meter (push)            inserta un elemento en la cima de la pila.

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;
 }
}

Acerca del autor: Rodrigo Paszniuk

Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.




SEGUÍNOS EN FACEBOOK


GITHUB