Leggendo in ritardo la bellissima idea di 'Who am I' di utilizzare l' ereditarietà per risolvere il problema, ho già pensato ad una soluzione che prevede la creazione di 3 classi (1 per il nodo, 1 per lo stack e 1 per la coda). Mi stavo complicando la vita con il mio ragionamento LO-HI, in effetti dovrei aver risolto il problema procedendo così:
1- Stack : PUSH -> Inserisco i nuovi elementi in testa alla lista ; POP -> Ritiro gli elementi partendo dalla testa. In modo tale che l'ultimo ad entrare è il primo ad uscire.
2- Coda : PUSH -> Inserisci i nuovi elementi in coda alla lista ; POP -> Ritiro gli elementi partendo dalla testa. In modo tale che il primo ad entrare è il primo ad uscire.
Classe NODO :
codice:
class nodo
{
public:
char inf;
nodo * next;
nodo (char c)
{
inf=c;
next=null;
}
};
Classe STACK con relativo svolgimento dei metodi:
codice:
class stack
{
private:
nodo * head;
public:
void push (char x);
stack * pop ();
};
void stack::push (char x)
{
nodo * nuovo = new nodo (x);
nuovo -> next = head;
head = nuovo;
}
stack * stack::pop ()
{
nodo * app = head;
head = head -> next;
return app;
}
Classe CODA con relativo svolgimento dei metodi:
codice:
class coda
{
private:
nodo * head;
public:
void push (char x);
coda * pop ();
};
void coda::push (char x)
{
nodo * app = head;
nodo * nuovo = new nodo (x);
if (app==null)
cout <<"La lista è vuota!" <<endl;
else
{
while (app -> next != null)
app = app -> next;
app -> next = nuovo;
}
}
coda * coda::pop ()
{
nodo * app = head;
head = head -> next;
return app;
}
Che ne pensate?