Codigo para invertir pilas

Iniciado por willsbs, 14 Marzo 2015, 03:00 AM

0 Miembros y 2 Visitantes están viendo este tema.

willsbs

Buenas...

Tengo este codigo que tiene varias funciones, una de ellas es invertir una pila, el codigo corre sin errores, pero a la hora de pedirle que muestre la pila invertida, unicamente me muestra el mensaje de "mostrando pila invertida" pero no me muestra nada, no se si alguien pueda ayudarme a encontrar mi error.

Gracias

...

#include <cstdlib>
#include <iostream>
#include <stack>
using namespace std;

struct nodo{
    int nro;
    struct nodo *sgte;
};

typedef nodo *ptrPila;   // creando nodo tipo puntero( tipo de dato )

  // creando nodo tipo puntero( tipo de dato )

/*                        Apilar elemento     
------------------------------------------------------------------------*/
void push( ptrPila &p, int valor )
{
     ptrPila aux;
     aux = new(struct nodo);  // apuntamos al nuevo nodo creado
     aux->nro = valor;
     
     aux->sgte = p ;
     p = aux ;
}

/*                Desapilar elemento(devuelve elemento)     
------------------------------------------------------------------------*/
int pop( ptrPila &p )
{
     int num ;
     ptrPila aux;
     
     aux = p ;
     num = aux->nro;   // asignamos el primer valor de la pila
     
     p = aux->sgte ;
     delete(aux);
     
     return num;
}



/*                Muestra elementos de la pila invertidos 
------------------------------------------------------------------------*/
void invertirpila(int argc, int *argv[])

  stack<int> s;
  for (int i='0'; i >= '1'; i++)
    s.push(i);

  while (s.empty() )
  {
    cout << s.top() << " " ;
    s.pop();
  }

}
//        Eliminar todos los elementos de la pila     
//------------------------------------------------------------------------*/
void destruir_pila( ptrPila &p)
{
     ptrPila aux;
     
     while( p != NULL)
     {
           aux = p;
           p = aux->sgte;
           delete(aux);
     }
}

/*                        Menu de opciones   
------------------------------------------------------------------------*/
void menu()
{
    cout<<"\n\t IMPLEMENTACION DE PILAS EN C++\n\n";
    cout<<" 1. APILAR                                "<<endl;
    cout<<" 2. DESAPILAR                             "<<endl;
    cout<<" 3. MOSTRAR PILA INVERTIDA                "<<endl;
    cout<<" 4. ELIMINAR PILA                         "<<endl;
    cout<<" 5. SALIR                                 "<<endl;

    cout<<"\n INGRESE OPCION: ";
}

/*                        Funcion Principal       
------------------------------------------------------------------------*/
int main(int argc, int *argv[])
{
    ptrPila p = NULL;  // creando pila
    int dato;
    int op;
    int x ; // numero que devuelve la funcon pop
   
    system("color 0b");

    do
    {
        menu();  cin>> op;

        switch(op)
        {
            case 1:

                 cout<< "\n NUMERO A APILAR: "; cin>> dato;
                 push( p, dato );
                 cout<<"\n\n\t\tNumero " << dato << " apilado...\n\n";
            break;


            case 2:

                 x = pop( p );
                 cout<<"\n\n\t\tNumero "<< x <<" desapilado...\n\n";
            break;
                 

            case 3:

               
                cout << "\n\n MOSTRANDO PILA INVERTIDA\n\n";
                 if(p!=NULL)
                    pop( p );
                 else
                    cout<<"\n\n\tPila vacia..!"<<endl;
                   
               
             
            break;


            case 4:

                 destruir_pila( p );
                 cout<<"\n\n\t\tPila eliminada...\n\n";
            break;
           
         }

        cout<<endl<<endl;
        system("pause");  system("cls");

    }while(op!=5);
   
   
    return 0;
}

rir3760

Cita de: willsbs en 14 Marzo 2015, 03:00 AMTengo este codigo [...] pero a la hora de pedirle que muestre la pila invertida, unicamente me muestra el mensaje de "mostrando pila invertida" pero no me muestra nada
No es mi intención ser grosero (o pasar por un [CENSORED]) pero no entiendo cual es el problema. Si tu hiciste el programa debes saber al menos de forma general lo que hace. No muestra la pila invertida porque ... no la inviertes.

El tercer caso consiste de las operaciones:
Código (cpp) [Seleccionar]
case 3:
   cout << "\n\n MOSTRANDO PILA INVERTIDA\n\n";
   if (p != NULL)
      pop(p);
   else
      cout << "\n\n\tPila vacia..!" << endl;
break;
case 4:

En pseudocodigo:
Imprimir "\n\n MOSTRANDO PILA INVERTIDA\n\n"
Si la pila no esta vacía
   Sacar un elemento, la operación que se realiza con ese valor es ... ninguna
Caso contrario
   Imprimir "\n\n\tPila vacia..!"


Formas para procesar una lista vinculada (al final es lo que utilizas) hay varias ya sea mediante iteración o recursion, a lo mejor tu pregunta va en ese sentido o tal vez se deba llamar a la función que invierte un cadena.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language