pilas

PILAS EN C++
  1. //implementacion de pilas
    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<iostream.h>

    struct nodo_pila
             {
                int dato;
                nodo_pila *sgte;
            };

    typedef nodo_pila *nodo;

    nodo ReservarMemoria();
    nodo CrearNodo(int elem);
    nodo Apilar(nodo Pila,int elem);
    nodo Vaciar(nodo Pila);
    nodo Liberar(nodo Pila);
    void imprimirpila(nodo Pila);
    void imprimir(nodo Pila);
    int  longitud(nodo Pila);
        Menu(int num);

    void main()
        {  nodo pila=NULL;
            int opcion,num=0;
            int elem;
         do{
             opcion=Menu(num);
             switch(opcion)
            {
         case 1:clrscr();
                printf("Ingrese elemento a Insertar ");
                 scanf("%d",&elem);
                  pila=Apilar(pila,elem);
                     break;

         case 2:clrscr();
                imprimirpila(pila);
                 getch();
                  break;

         case 3:clrscr(); imprimir(pila);
                 getch();
                  break;

         case 4:clrscr();
                 cout<<"Longitud de la Pila es:_"<<longitud(pila);
                  getch();
                    break;

         case 5:clrscr();
                 pila=Liberar(pila);
                    break;

        case 6:clrscr();
                pila=Vaciar(pila);
                    break;

         case 7: clrscr();
                 break;
             }
         }while(opcion!=7);
    }

     Menu(int num)
        {
          clrscr();
          gotoxy(20,5);
    printf("________________PILAS___________________\n\
            |•|    [1]  Apilar Pila                   |•|\n\
            |•|    [2]  Mostrar Cima                  |•|\n\
            |•|    [3]  Mostrar Pila                  |•|\n\
            |•|    [4]  Longitud Pila                 |•|\n\
            |•|    [5]  Desapilar y Liberar Memoria   |•|\n\
            |•|    [6]  Vaciar Pila                   |•|\n\
            |•|    [7]  Fin                           |•|\n\
            |•|________________________________________|•|\n\n");
             printf("Ingrese opcion: _");
             scanf("%d",&num);
          clrscr();
        return num;
        }

    nodo ReservarMemoria()
    {
     nodo nuevo;
     nuevo=(nodo)malloc (sizeof(struct nodo_pila));
     return (nuevo);
    }

    nodo CrearNodo(int elem,nodo enlace)
    {
      nodo nuevo;
      nuevo=(nodo)malloc(sizeof(struct nodo_pila));
      nuevo->dato=elem;
      nuevo->sgte=enlace;
      return nuevo;
    }


    nodo Apilar(nodo Pila, int elem)
         { nodo nuevo;
            nuevo=CrearNodo(elem,NULL);
            nuevo->sgte=Pila;
            Pila=nuevo;
            return(Pila);
         }

    void imprimir(nodo Pila){

                      if(Pila!=NULL)
                      {   while(Pila!=NULL)
                            {     printf("\n    |__%d__|",Pila->dato);
                                    Pila=Pila->sgte;
                            }
                            printf("\n");
                      }
                      else
                      printf("Pila vacia");

                                      }

    void imprimirpila(nodo Pila){
                      if(Pila!=NULL)
                          printf("   %d\n",Pila->dato);
                      else
                      printf("Pila vacia");
                        }
    int  longitud(nodo Pila){
             int i;
         if(Pila==NULL)
            return 0;
         else {
                 i=1;
                 while(Pila->sgte!=NULL)
                {
                          i++;
                          Pila=Pila->sgte;
                }
            return i;
                }
                 }

      nodo Liberar(nodo Pila)
         { nodo aux;
            aux=Pila;
            if(Pila==NULL)
             printf("La Lista esta vacia");
          else{
              Pila=Pila->sgte;
              free(aux);
            }
            return(Pila);
         }

     nodo Vaciar(nodo Pila)
     {
      nodo aux;
      aux=Pila;
     while (aux!=NULL)
     {
      Pila=Pila->sgte;
      free (aux);
      aux=Pila;
     }
     return (aux);
    }

    /*int Parentesis(char *cadena)
     {
       nodo Pila;
       Pila=NULL;
        int j=0;
        int i=0;
             while(*cadena)
        {
               if(*cadena=='(')
             i=i+1;
              Apilar(Pila,'(')  ;
           if(*cadena==')')
                 j=j+1;
           if(Pila!=NULL)
             Desapilar(Pila) ;
           else
            return 0;
           cadena++;
         }                                              
        if(i==j)
          return 1;
         else
        Vaciar(Pila);
           return 0 ;
     }



      int Desapilar(nodo Pila)
     {      nodo aux;
        int valor;
        valor=Pila->dato;
         aux=Pila;
         Pila=Pila->sgte;
         delete(aux) ;
         return valor;
     }

No hay comentarios:

Publicar un comentario