miércoles, 11 de enero de 2012

PILA

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
struct pilanodo{
       int dato;
       struct pilanodo *sig;
       };
       typedef struct pilanodo PILA;
       typedef PILA *PILAPTR;
void menu(void);//no regresa valor pero no se pasa una lista de parametros
void push (PILAPTR*,int);
int pop(PILAPTR *);
int estavacia(PILAPTR );
int imprime (PILAPTR);
      
       main()
       {
          PILAPTR pilaptr = NULL;// se asigna valor nulo por que no existe la  pila
             int opcion,valor;//para el menu de main
             //llamado a un menu
menu(); 
do{
printf("\tElige una opcion....\n");
scanf("%d",&opcion);
      switch (opcion)
      {
        
             case 1: printf("dame el valor: \n");
             scanf("%d",&valor);
             push(&pilaptr,valor);
                          break;
             case 2: if (!estavacia(pilaptr))//llama una funcion dice que si no esta vacia
             printf ("\n\n El valor extraido de la pila es : %d\n",pop(&pilaptr));
             break;
             case 3: printf("el contenido de la pila es: \n\n");
             imprime(pilaptr );
             break;
             default: printf("El numero que ingresaste es incorrecto\n");
      }
            } while(opcion!=4);

         
getch();
}
void menu(void)
{
     system ("cls");
          printf("operaciones disponibles con la PILA\n\n"); 
          printf ("1.- insertar un valor en la pila\n");
          printf ("2.- extraer un valor de la pila\n");
          printf ("3.- imprimir la pila\n"); 
          printf ("4.- salir del programa\n\n\n");
}
void push (PILAPTR *aux, int valor ){
     PILAPTR aux1;
     aux1=malloc (sizeof (PILA));//malloc busca en memoria una area del tamanio de pila
     if(aux1!= NULL)
     {      
                    aux1 -> dato = valor;
                    aux1 -> sig =NULL;
                   
                    if(*aux==NULL)
                    *aux =aux1;
                    else{
                    aux1->sig=*aux;
                    *aux=aux1;
                    }  } 
          }
int estavacia(PILAPTR aux){
    return aux ==NULL;//verifica que la pila no esta vacia y manda cero o uno
    }
int pop (PILAPTR*aux)//aux apuntaa pilaptr
{
    if (aux==NULL){
    printf("No se a ingresado ningun valor");
}
else{
PILAPTR aux1;
int salevalor;// se declara un valor entero
aux1=*aux;
*aux=aux1->sig;//sirve para pasar a pilaptr al siguiente nodo
salevalor=aux1->dato;
free (aux1);// libera el espacio en memoria para otra aplicacion
return (salevalor);//regressa un valor y e guarda en pop &pilaptr
}}
int imprime (PILAPTR aux)



{
    if (aux==NULL){
          printf("La pila esta vacia\n");
       }
       else{
   system ("cls");
    printf ("tope de la pila");
    while (aux != NULL){
          printf("\n%d\n",aux->dato);
          aux=aux-> sig;
}
         
          printf("fondo DE LA PILA\n");
          }                
     }
    



No hay comentarios:

Publicar un comentario