Witam, nie mam pomysłu na implementację funkcji odwracającej wskaźniki do węzłów(struktur) "do góry nogami", oto kod:
//Jest to implementacja klasy Stos. Jest to klasa stosu znaków.
//Struktury węzła zawierają dane typu char i wskażnik do
//następnego węzła.
#include <iostream>
#include <cstddef>
using namespace std;
struct CzlonStosu //Węzeł
{
char dane;
CzlonStosu *nast;
};
typedef CzlonStosu* WskDoCzlonuStosu;
class Stos
{
//private:
public:
Stos( ): gora(NULL)
{
//Celowo puste.
}
Stos(const Stos& stos)
{
if (stos.gora == NULL)
gora = NULL;
else
{
WskDoCzlonuStosu pom = stos.gora;
//Wskaźnik pom przechodzi po kolei po węzłach od gora w dół listy stos.
WskDoCzlonuStosu koniec;
//koniec wskazuje końcowy węzeł nowego stosu.
koniec = new CzlonStosu;
koniec->dane = pom->dane;
gora = koniec;
//Pierwszy węzeł został utworzony i wypełniony danymi.
//Nowe węzły będą teraz dodawane za tym pierwszym.
pom = pom->nast;
while (pom != NULL)
{
koniec->nast = new CzlonStosu;
koniec = koniec->nast;
koniec->dane = pom->dane;
pom = pom->nast;
}
koniec->nast = NULL;
}
}
~Stos( )
{
char nast;
while (! empty( ))
nast = zdejmij( ); //zdejmij wywołuje delete.
}
//Wykorzystuje bibliotekę cstddef:
bool empty( ) const
{
return (gora == NULL);
}
//Wykorzystuje bibliotekę cstddef:
void wepchnij(char znak)
{
WskDoCzlonuStosu wsk_pom;
wsk_pom = new CzlonStosu;
wsk_pom->dane = znak;
wsk_pom->nast = gora;
gora = wsk_pom;
}
void odwroc()
{
if (!empty( ))
{
for(WskDoCzlonuStosu iter = gora; iter!=NULL; iter = iter->nast)
{
//
}
}
}
//Wykorzystuje bibliotekę iostream:
char zdejmij( )
{
if (empty( ))
{
cout << "Błąd: próba zdjęcia elementu z pustego stosu.\n";
exit(1);
}
char wynik = gora->dane;
WskDoCzlonuStosu wsk_pom;
wsk_pom = gora;
gora = gora->nast;
delete wsk_pom;
return wynik;
}
WskDoCzlonuStosu gora;
};
int main( )
{
Stos s;
s.wepchnij('a');
s.wepchnij('b');
s.odwroc();
for(WskDoCzlonuStosu iter = s.gora; iter!=NULL; iter = iter->nast)
cout << (iter->dane) << endl; //pętla wypisująca wartości danych zawartych w
system("pause"); //poszczególnych węzłach stosu
return 0;
}