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;
}
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:
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