///nie rozumiem do konca funkcji na dole
void push(string nowy_element) { //w argumentach nowy element jaki chcemy dodac
stos *punkt; //czym jest ten punkt ?
punkt = wierzch; //i czemu ma wartosc wierzcholka ?
wierzch = new stos; //no dobra ,troche to rozumiem ,tworzymy stos...
wierzch->dane = nowy_element; //wierzcholek miesci w sobie nowy element
wierzch->nast = punkt; //czemu nastepny element stosu jest rowny wierzcholkwi skoro jezcze tam nic nie ma
}
'wierzch' to wskaźnik na najwyższy element stosu - jak wiemy stos budowany jest od dołu, jest to tzw. LIFO czyli Last In First Out (ostatni który wchodzi jest pierwszym który wychodzi), czyli żeby dokopać się do najniższego elementu stosu musimy zrzucić każdy wyższy element.
Ta funkcja tworzy kopię wskaźnika na poprzedni najwyższy punkt stosu. Następnie 'wierzch' staje się kolejnym elementem (wyżej położonym na stosie niż 'punkt'). Ustawiamy jego dane na string 'nowy_element' oraz wskaźnik na element, który jest o jeden niżej czyli nasz poprzedni 'punkt'.
'wierzch' to nie skrót od "wierzchołek" tylko po prostu - wierzch stosu.
https://sjp.pwn.pl/szukaj/wierzch.html
Cała ta implementacja jest tak zła, że żal na to patrzeć ale już niech będzie.