Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class stos
- {
- private:
- struct node
- {
- int element; //wartosc elementu
- node *prev; //wskaznik na poprzednika
- };
- unsigned int i; //stan
- node *last, *help; //pomoc - wsk na pierwszy z góry
- public:
- stos();
- stos(stos const &);
- ~stos();
- unsigned int rozmiar(); //liczba elementow na stosie
- void poloz(int);
- int zdejmij();
- friend std::ostream& operator<<(std::ostream&, stos&);
- };
- stos::stos()
- {
- i = 0;
- last = NULL;
- help = NULL;
- }
- stos::stos(stos const & S)
- {
- //dodatkowa zmienna pomocnicza ze wzgledu na brak mozliwosci edycji klasy
- node *SHelp;
- SHelp = S.last;
- int j = 0;
- int *elements = new int[S.i];
- //czytam kopie stosu
- while (SHelp != NULL)
- {
- elements[j] = SHelp->element;
- SHelp = SHelp->prev;
- j++;
- }
- //wpisywanie elementow starego stosu - chcac miec te same stosy, czytam tablice elementow odwrotnie
- for (j = S.i-1; j >= 0; j--)
- {
- if (j == 0)
- {
- last = new node;
- last->element = elements[j];
- last->prev = help;
- }
- else
- {
- help = new node;
- help->element = elements[j];
- help->prev = (j == S.i - 1) ? NULL : last;
- last = help;
- }
- }
- i = S.i;
- }
- stos::~stos()
- {
- while (last != NULL)
- {
- help = last->prev;
- delete last;
- last = help;
- }
- }
- unsigned int stos::rozmiar()
- {
- return i;
- }
- void stos::poloz(int x)
- {
- if (i == 0)
- {
- last = new node;
- last->element = x;
- last->prev = NULL;
- }
- else
- {
- help = new node;
- help->element = x;
- help->prev = last;
- last = help;
- }
- i++;
- }
- int stos::zdejmij()
- {
- if (last == NULL) return 0;
- int popValue = last->element;
- help = last->prev;
- delete last;
- last = help;
- i--;
- return popValue;
- }
- std::ostream & operator<<(std::ostream &stream, stos &S)
- {
- S.help = S.last;
- while (S.help != NULL)
- {
- stream << S.help->element << std::endl;
- S.help = S.help->prev;
- }
- return stream;
- }
- int main()
- {
- stos stosik;
- stosik.poloz(5);
- stosik.poloz(218);
- stosik.poloz(-3);
- stosik.poloz(133);
- stosik.poloz(30);
- cout << stosik << endl;
- cout << "Rozmiar stosu: " << stosik.rozmiar() << endl << endl;
- stos stosikKopia(stosik);
- stosik.zdejmij();
- stosik.zdejmij();
- cout << stosik << endl;
- cout << "Rozmiar stosu: " << stosik.rozmiar() << endl << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement