lunes, 20 de septiembre de 2010

Ejemplo Pila

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
//Definicion de la Estructura
struct nodoPila
{
 int dato;
 nodoPila *sig;};
//Menu principal
int menu()
{
    int opc;
    clrscr();
    cout<<"       MENU PRINCIPAL";
    cout<<"\n1. Inicializar Pila";
    cout<<"\n2. Apilar (push)";
    cout<<"\n3. Recorrer Pila";
    cout<<"\n4. Desapilar (pop)";
    cout<<"\n5. Maximo";
    cout<<"\n6. Promedio";
    cout<<"\n7. Primer elemento";
    cout<<"\n8. Ordenar";
    cout<<"\n9. Salir";
    cout<<"\nOpcion: ";
    cin>>opc;
    return opc;
}
//Definicion de funciones
    void inicializar(struct nodoPila **);
    void desapilar(struct nodoPila **);
    void recorrer(struct nodoPila **);
    void apilar(struct nodoPila **, int x);
    void maximo(struct nodoPila **);
    void promedio(struct nodoPila **);
    void elemento(struct nodoPila **);
 void ordenar(struct nodopila **);
//Funcion recorrer
    void recorrer(struct nodoPila **tope)
    {clrscr();
    struct nodoPila *aux;
    if(*tope==NULL)
        cout<<"\nPila Vacia. ";
    else
    {
        aux=*tope;
        while(aux!=NULL)
        {
            cout<<"Elemento: "<<aux->dato<<"\n";
   aux=aux->sig;
        }
    }
    getch();
}
//Funcion inicializar
    void inicializar(struct nodoPila **tope)
    { clrscr();
    *tope=NULL;
    cout<<"\nPila Inicializada.";
    getch();
    }
//Funcion apilar
    void apilar(struct nodoPila **tope, int dat)
    { clrscr();
    struct nodoPila *aux;
    aux=new nodoPila;
    if(aux==NULL)
     {
        cout<<"\nMemoria Insuficiente. ";
        getch();
     }
    aux->dato=dat;
    aux->sig=*tope;
    *tope=aux;
    }
//Funcion desapilar
    void desapilar(struct nodoPila **tope)
    { clrscr();
    struct nodoPila *aux;
    if(*tope==NULL)
        cout<<"Pila Vacia";
    else
     {
        aux=*tope;
        cout<<"Elemento eliminado: "<<(*tope)->dato;
        *tope=(*tope)->sig;
        delete aux;
     }
    getch();
    }
//Funcion maximo


                void maximo(struct nodoPila **tope)
                { clrscr();
     struct nodoPila *aux;
     int max=0;
    if(*tope==NULL)
        cout<<"Pila Vacia";
    else
     {
        aux=*tope;
        while(aux!=NULL)
        {
                if (aux->dato>max)
                max=aux->dato;
                aux=aux->sig;
        }
     }
        cout<<"El maximo es: "<<max<<"\n";
    getch();
   }
   //Funcion Promedio

                void promedio(struct nodoPila **tope)
                {  clrscr();
                int suma=0,promedio,a=0;
                struct nodoPila *aux;
                if(*tope==NULL)
                cout<<"\nPila Vacia. ";
                else
                {
                  aux=*tope;
                  while(aux!=NULL)
                  {a=a+1;
              suma=suma+aux->dato;
              aux=aux->sig;
            }
             cout<<"La suma es: "<<suma<<"\n";
            }
            promedio=suma/a;
            cout<<"La promedio es: "<<promedio<<"\n";
       getch();
}
/*Funcion elemento
Nombre: Obtener el primer elementos de la pila
Descripción: imprimer el primer elemento de la pila
Pre: p {}
        p= {a1, a2, a3,...an}
 
Post: Escribir: "Pila vacia"
         Escribir: El primer elemento es  a1

*/
   void elemento(struct nodoPila **tope)
  { clrscr();
      struct nodoPila *aux;
       if(*tope==NULL)
        cout<<"Pila Vacia";
          else
            {
           aux=*tope;
               while(aux->sig!=NULL)
              {
                    aux=aux->sig;
                  }
                      cout<<"El primer elemento es: "<<aux->dato<<"\n";
                   }
     getch();
   }
 /*Funcion ordenar
Nombre: Ordenar los elementos de la pila
Descripción: imprimir los elementos en forma ascendente y descendente

Pre: p {}
        p= {a1, a2, a3,...an}

Post: Escribir: "Pila vacia"

         Escribir: Ascendente: a1, a2, a3,... an
         Escribir: Descendente: an..., a3, a2, a1
*/
 void ordenar(struct nodoPila **tope)

 {clrscr();
  struct nodoPila *aux;
  int i=1, j,vec[50],aux2, cont=0;
   if(*tope==NULL)
      cout<<"\n Pila Vacia ";
   else
   {aux=*tope;
    while(aux!=NULL)
    {vec[i]= aux->dato;
     aux=aux->sig;
     cont=cont+1;
     i++;
    }
    for(i=1; i<=cont-1; i++)
    {for(j=1; j<=cont-1; j++)
     {if(vec[j] > vec[j+1])
  {aux2=vec[j];
       vec[j]=vec[j+1];
       vec[j+1]=aux2;
  }
     }
    }
    cout << "Ascendente: ";
    for(i=1; i<=cont; i++)
  {cout<<vec[i]<<"\n";
    }
    cout << "\nDescendente: ";
  for(i=cont; i>=1; i--)
    {
    cout<<vec[i]<<"\n";
    }
   }
   getch();
 }
//Cuerpo principal
 int main()
 {
   struct nodoPila *tope;
    int dat,opc;
    do
     {
        opc=menu();
        switch(opc)
        {
            case 1:{inicializar(&tope);break;}
            case 2:{
                    cout<<"\nEntre el dato: ";
                    cin>>dat;
                    apilar(&tope,dat);
                    break;
                }
            case 3:{recorrer(&tope);break;}
            case 4:{desapilar(&tope);break;}
            case 5:{maximo(&tope);break;}
            case 6:{promedio(&tope);break;}
            case 7:{elemento(&tope);break;}
    case 8:{ordenar(&tope);break;}
        }
    }while(opc!=9);
    return 0;
}

No hay comentarios: