Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: willsbs en 14 Marzo 2015, 03:00 am



Título: Codigo para invertir pilas
Publicado por: willsbs en 14 Marzo 2015, 03:00 am
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;
}


Título: Re: Codigo para invertir pilas
Publicado por: rir3760 en 14 Marzo 2015, 03:55 am
Tengo 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
  1. case 3:
  2.   cout << "\n\n MOSTRANDO PILA INVERTIDA\n\n";
  3.   if (p != NULL)
  4.      pop(p);
  5.   else
  6.      cout << "\n\n\tPila vacia..!" << endl;
  7. break;
  8. case 4:
En pseudocodigo:
Código:
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