Witam mój problem polega na tym że nie wiem jak zaimplementować stos przechowujący różne typy danych program który napisałem nie działa jak należy.
I mam prośbe czy ktoś mógłby poprawic ten kod lub podać mi inny sposob napisania takiego programu ?
O to kod :
#include <cstdlib>
#include <iostream>
using namespace std;
class wartosc
{
private:
int liczba;
char napis[30];
public:
////////////////////////////////////////////////
void wprowadzLiczba(int li)
{
liczba = li;
}
////////////////////////////////////////////////
void wprowadzNapis(const char* nap)
{
strncpy(napis,nap,30);
}
////////////////////////////////////////////////
double pokazLiczba()
{
return liczba;
}
////////////////////////////////////////////////
char* pokazNapis()
{
return napis;
}
////////////////////////////////////////////////
};
////////////////////////////////////////////////////////////////////////////////////////////////
class wartosc_double
{
private:
double liczba_d;
public:
////////////////////////////////////////////////
void wprowadzLiczba(double li)
{
liczba_d = li;
}
////////////////////////////////////////////////
double pokazLiczba()
{
return liczba_d;
}
////////////////////////////////////////////////
};
union moja_unia
{
wartosc a;
wartosc_double b;
};
class stos
{
////////////////////////////////////////////////
private:
struct wezel
{
moja_unia dana;
wezel *adres;
};
////////////////////////////////////////////////
wezel *top;
public:
////////////////////////////////////////////////
stos()
{
top = 0;
}
////////////////////////////////////////////////
~stos()
{
empty();
}
////////////////////////////////////////////////
void push(moja_unia war_dana, int jaki_wyb)
{
wezel *e = new wezel;
if (jaki_wyb == 1)
{
e->dana.a.wprowadzLiczba(war_dana.a.pokazLiczba());
e->dana.a.wprowadzNapis(war_dana.a.pokazNapis());
}
else if(jaki_wyb == 2)
{
e->dana.b.wprowadzLiczba(war_dana.b.pokazLiczba());
}
e->adres = top;
top = e;
}
void pop()
{
wezel *e;
{
if(top == NULL) return;
e = (top)->adres;
delete top;
top = e;
}
}
void zawartosc(int jw)
{
wezel *e=top;
while(e)
{
if (jw== 1)
{
cout<<"Liczba int : \n"<<e->dana.a.pokazLiczba()<<",\n ";
cout<<"Napis : \n"<<e->dana.a.pokazNapis()<<",\n ";
}
else if(jw == 2)
{
cout<<"Liczba double : \n"<<e->dana.b.pokazLiczba()<<",\n ";
}
cout<<endl;
e=e->adres;//4
}
cout<<endl;
}
void empty()
{
wezel *e;//pomocnicza
if(top == NULL) return;
while(top)
{
e = (top)->adres;
delete top;
top = e;
}
}
bool IsEmpty()
{
if(top == NULL)
return true;
else
return false;
}
};
int main()
{
stos st;
char odp;
int licz;
double licz_d;
char nap[30];
moja_unia unia;
int wybor;
for (;;)
{
cout<<"1 int 2 double :\n";
cin>>wybor;
switch(wybor)
{
case 1:
cout<<"Podaj dana int : "<<endl;
cin>>licz;
cout<<"Podaj napis : "<<endl;
cin>>nap;
break;
unia.a.wprowadzLiczba(licz);
unia.a.wprowadzNapis(nap);
case 2:
cout<<"Podaj dana double : "<<endl;
cin>>licz_d;
break;
unia.b.wprowadzLiczba(licz_d);
}
st.push(unia,wybor);
cout<<"Cczy koniec ?"<<endl;
cin>>odp;
if (odp == 't')
break;
}
cout<<endl;
cout<<"To Twoj stos : \n\n";
st.zawartosc(wybor);
system("PAUSE");
return EXIT_SUCCESS;
}