miércoles, 11 de enero de 2012

ejercicio_pila_codigo

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
struct pilanodo {
   int dato;
   struct pilanodo *sig;
       };
 typedef struct pilanodo PILA;
 typedef PILA *PILAPTR;

 void menu(void);
    void push(PILAPTR *, int);
    int pop(PILAPTR *);
 int vacia (PILAPTR);
    void imprime (PILAPTR);
        
main()
{  PILAPTR pilaptr = NULL;
   int opcion;
   int valor;
   menu();
   printf ("\n\n Selecciona una de las siguientes opciones:");
   scanf  ("%d", &opcion);
     while (opcion!= 4)
                {switch (opcion)
                     {case 1: printf ("\n\n Dame el valor del elemento a guardar: ");
                              scanf  ("%d", &valor);
                              push   (&pilaptr, valor);
                              menu();
                              printf ("\n\n Elige una opcion :");
                              scanf  ("%d", &opcion);
                              break;
       case 2: if(!vacia(pilaptr))
               printf("\n\n El valor extraido de la pila es %d", pop(&pilaptr));
                      case 3: imprime(pilaptr);
               menu();
               printf ("\n\n Elige una opcion :");
                              scanf  ("%d", &opcion);
                              
                              break;
                    default : printf("\n\n      Ingresaste un numero no valido\n\n");
                              printf("\n\n   || Por favor reinicie el programa ||\n\n");
               getch();
                      }
                    
                  }
               }
              
 void menu(void) {
     system("cls");
     printf("\n\n Operaciones disponibles con la Pila");
     printf("\n\n 1.- Agregar un elemento a la pila");
     printf("\n\n 2.- Eliminar un elemento a la pila");
     printf("\n\n 3.- Recorrer la pila");
     printf("\n\n 4.- Fin");
     };
 void push(PILAPTR *aux, int valor)
              {PILAPTR aux1;
               aux1=((PILAPTR)malloc(sizeof (PILA)));
                if(aux1!=NULL)
                  { aux1->dato = valor;
                    aux1->sig = NULL;
                             
                    if(*aux==NULL)
                       *aux=aux1;
                  else{ aux1->sig = *aux;
                       *aux = aux1;
                      }
                  }
                else printf ("\n\n No se creo el nodo por que no hay memoria suficiente");
      }    
  int pop(PILAPTR *aux)
  { PILAPTR aux1; int sale;
    aux1 = *aux;
    *aux =  aux1 -> sig;
    sale = aux1->dato;
    free(aux1);
    return (sale);
  }
 int vacia(PILAPTR aux){
  return aux==NULL;
}

void imprime(PILAPTR aux)
{ if (aux == NULL)
     printf("\n           || La pila esta vacia || \n\n");
  else
     { printf("\n                La pila  es: \n\n");
       printf("\n\n                   Tope");
       while (aux != NULL)
      { printf("\n                        %4d", aux->dato);
        aux = aux->sig;
      }
       printf("\n                    Fondo\n\n");
     }
  printf("\n\n                Enter para regresar...");
  getch();
}

No hay comentarios:

Publicar un comentario