Na początek przedstawię deklarację klasy..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class stack { private: struct wezel { wezel *next; int value; }; wezel* head; public: stack(); ~stack(); bool push(int); int pop(); }; |
Struktura węzła to nic innego jak sam wskaźnik i wartość. Dalej mamy konstruktor i destruktor oraz funkcję push(int) czyli dodaj na stos i pop() czy zdejmij ze stosu.
No i właściwa implementacja tej klasy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | stack::stack(){ head=NULL; // na poczatek ustawiamy head na null, czyli stos na poczatku jest zerowy } stack::~stack(){ delete head; } bool stack::push(int a){ wezel* nowy = new wezel; //tworzymy nowy węzeł, nowy egzemplarz struktury nowy->value=a; //dopisujemy do niego wartosć podana w parametrze push(int) nowy->next=head;//jako kolejny element w stosie będzie glowa, czyli nasz null head=nowy;//ustawiamy nasz nowo stworzony węzeł jako pierwyszy (w stosie kładziemy na wierzch i zdejmujemy zwierzchu) return true; //i zwracamy true.. } int stack::pop(){ return head->value; //zwracamy wartość z góry stosu } |
Całość implementacji jest zrobiona poprawnie, ale brakuje jednego elementu ;)
Przy pobieraniu wartości z góry stosu od razu jest ona kasowana. I to zadanie jest do zrobienia dla Ciebie! :) Jeśli uda Ci się dopisac usuwanie pobieranego elementu – będzie to już całościowa implementacja stosu. Jak to zrobić? Podpowiedź znajdziesz w komentarzach do kodu który znajdziesz tutaj :)
Mateusz Mazurek