Devo invertire i nodi di una pila, creando una funzione apposita (inverti)
Il programma di base è:
#include <iostream.h>
struct nodo
{
int info; // parte informativa elemento pila
struct nodo *succ; // puntatore al prossimo elemento pila
};
struct nodo *testa; // definisce un puntatore al primo elemento di pila (testa)
char scelta; // scelta menu
bool finito; // termina programma
void inizializza(void);
bool pilavuota(void);
void inverti(void);
void push(void);
void pop(void);
void stampa(void);
int main()
{
inizializza();
finito = false;
do
{
cout << endl;
cout << "0: Termina esecuzione" << endl;
cout << "1: inserimento elemento in pila" << endl;
cout << "2: estrazione elemento in pila" << endl;
cout << "3: stampare elementi della pila" << endl;
cout << "4: Inverti pila" << endl
do
{
cout << "Scelta opzione: ";
cin >> scelta;
cout << endl;
}while((scelta < '0') and (scelta >'3'));
switch(scelta)
{
case '0':
finito = true;
break;
case '1':
push();
break;
case '2':
pop();
break;
case '3':
stampa();
break;
case '4':
inverti();
break;
}
}while(finito == false);
}
void inizializza(void)
{
testa=NULL;
}
void push(void)
{
struct nodo *nuovo; // puntatore a nuovo elemento
int numero;
cout << "\nNuovo elemento informativo: ";
cin >> numero;
nuovo = (struct nodo *)malloc(sizeof(struct nodo));
nuovo->info=numero;
nuovo->succ=testa;
testa=nuovo;
}
void pop(void)
{
struct nodo *p;
if(pilavuota()==true)
cout << "pila vuota";
else
{
p=testa->succ;
delete testa;
testa=p;
}
}
void stampa(void)
{
struct nodo *p;
cout << endl;
p=testa;
while(p!=NULL)
{
cout << p->info << endl;
p = p->succ;
}
}
bool pilavuota(void)
{
if(testa == NULL)
return true;
else
return false;
}