Stos można traktować jako kontener do którego możemy wrzucać kolejne obiekty określonego typu czyli wykonać operację push(). Istnieje do niej operacja przeciwna pop(), która pozwala nam wyjąć obiekt z wierzchu kontenera. Innymi słowy nie możemy wyjąć obiektu na którym coś zostało położone. Stos pozwala również sprawdzić czy kontener nie jest pusty operacją isEmpty().
Bierzemy pudełko. Jesteśmy w stanie określić czy jest puste zaglądając do środka. Włóżmy teraz kolejno dwie kartki: czerwoną, potem zieloną. Zajrzyjmy do pudełka. Nie widzimy dna, ale zieloną kartkę. Jednak możemy powiedzieć, że pudełko nie jest puste chociaż nie widzimy dna pudełka. Spróbujmy teraz wyjąć kartki. Najpierw wyjmiemy zieloną, a potem czerwoną kartkę.
Deklarowana klasa Stos będzie typu ogólnego T. Pozwoli to na przechowywanie tam dowolnych obiektów, które zostaną określone podczas deklaracji zmiennej.
Każdy odłożony obiekt na stos zostanie zapisany jako typ Element, który może przechowywać obiekt jak i będzie mogło wskazywać na konkretny element położony pod nim.
(2. - 3.) Deklaracja przechowywanych w obiekcie wartości i (5. - 7. oraz 9. - 11.) dostęp do każdej ze zmiennej. W celu ułatwienia elementów napisany został (13. - 16.) konstruktor.
Stos musi wiedzieć jaki element na nim leży, więc deklarowany jest element el, który będzie przechowywał pierwszy element od góry, albo wartość null jeśli stos jest pusty.
Utworzenie nowego stosu polega jedynie na przypisaniu zmiennej el wartość null.
Wiedząc, że jeśli nic nie leży na stosie to węzeł w nim jest równy null. W ten sposób funkcja czyPusty() zwróci prawdę tylko wtedy, gdy węzeł na stosie wynosi null:
Zauważywszy, że nasz stos jest pusty pora coś na niego położyć:
Funkcja Połóż() nic nie zwraca. Przyjmuje jedynie wartosc do położenia na stosie. Położenie nowego elementu (2.) polega na utworzeniu nowego węzła, który ma jako wartość przekazany argument i wskazuje na aktualny element na wierzchu el.
Brakuje już tylko jednej funkcji, która pozwoli zdjąć element (kartkę) z wierzchu:
Funkcja Zdejmij() zwraca element typu T dla danego stosu. Na początek (2.) deklarujemy zmienną value typu T. Następnie (3.) musimy sprawdzić czy stos nie jest pusty. Jeśli tak to (4.) zwracamy domyślną wartość elementu T. Będzie to znaczyło, że nie mamy czego zdjąć ze stosu. Jeśli jednak stos nie jest pusty to (5.) kopiujemy wartość elementu z wierzchu. (6.) Teraz stos musi wiedzieć, że kolejnym elementem już nie będzie pobrany, a ten na który wskazywał pobrany element. (7.) Na koniec zwracamy odczytaną wartość wartosc.
Na sam koniec testujemy naszą aplikację:
i otrzymujemy: