Stos
Benny: Dany jest stos w implementacji tablicowej, który po wykonaniu szeregu operacji wstaw(), zwroc()
i usun() ma postać:
tab[10]={4,9,3,7,0,3,1,8,7,5}, szczyt = 1.
Przedstaw stan stosu S po wykonaniu każdej z kolejnych operacji:
S.wstaw(9); cout<<S.zwroc()<<endl; S.usun(); K.usun(); K.usun(); S.wstaw(2); S.wstaw(1);
S.usun(); cout<<S.zwroc();
Pierwsza operacja wstawiania nic nam nie zmieni, ponieważ stos jest już pełny.
Druga operacja zwroc wyświetli na ekranie 9.
Trzecia operacja usun usunie nam 9 i zmieni szczyt na 0.
Czwarta operacja i piąta nic nam nie zmienią, bo nie mamy stosu K.
Szósta operacja wstawi nam 2 za 4 i zmieni szczyt na 1.
Siódma operacja wstawi nam 1 za 2 i zmieni szczyt na 2.
Ósma operacja usunie nam 1 i zmieni szczyt na 1.
Ok?
4 lut 14:16
jc: Ja to widzę tak:
4
4 9
4 9
4
−
katastrofa!
4 lut 16:04
Pytający: Po pierwsze: na pewno masz błędy.
Po drugie: co oznacza zmienna szczyt (jeśli stos jest pusty to szczyt=0 czy szczyt=−1)?
Zakładam, że szczyt to indeks ostatniego elementu, więc jeśli stos jest pusty to szczyt=−1. Na
stosie jest szczyt+1 elementów.
Wtedy masz:
tab[10]={4,9,3,7,0,3,1,8,7,5}, szczyt = 1
S.wstaw(9);
tab[10]={4,9,9,7,0,3,1,8,7,5}, szczyt = 2
S.zwroc();
tab[10]={4,9,9,7,0,3,1,8,7,5}, szczyt = 2
S.usun();
tab[10]={4,9,9,7,0,3,1,8,7,5}, szczyt = 1
K.usun(); K.usun(); bez zmian
S.wstaw(2);
tab[10]={4,9,2,7,0,3,1,8,7,5}, szczyt = 2
S.wstaw(1);
tab[10]={4,9,2,1,0,3,1,8,7,5}, szczyt = 3
S.usun();
tab[10]={4,9,2,1,0,3,1,8,7,5}, szczyt = 2
S.zwroc();
tab[10]={4,9,2,1,0,3,1,8,7,5}, szczyt = 2
4 lut 16:17
Benny: Jeśli stos jest pusty to szczyt = −1.
Czemu nadpisujesz nowymi elementami, skoro stos jest pełny?
4 lut 16:30
jc: Co oznacza szczyt jest sprawą umowną, jednak przyjąłbym umowę, że jest to liczba
elementów na stosie. Dlaczego? Od dość dawna panuje ogólna umowa związana
z przedziałami: z lewej domknięty, z prawej "otwarty". Trzymając się tej umowy,
nie zastanawiamy się za każdym razem, jak się umówić.
4 lut 16:34
Benny: Tak, więc co oznacza reszta liczb w tablicy?
4 lut 16:45
Pytający: Stos nie jest pełny. Stos jest pełny, gdy szczyt = 9. Dlatego zaznaczyłem resztę elementów jako
szare. Elementów tablicy rzecz jasna, nie stosu. Stos ma szczyt+1 elementów i pojemność 10.
Tablica sama w sobie nigdy nie jest pusta, zawsze tam coś jest (jakieś śmieci, jeśli nie była
zainicjalizowana).
4 lut 16:46
Benny: Tak, więc co wypisze program na ekranie?
4 lut 16:50
Pytający:
9
2
4 lut 16:54
jc: Benny, pewnie autor tak, chciał, ale ja jestem przeciw.
Pamiętaj ile kłopotu sprawiał mi brak konsekwencji.
Tak samo, jak z indeksami, postępujemy ze wskaźnikami.
Przedział [p,q) ma długość q−p i nie trzeba myśleć, czy dodać jeden, czy nie.
4 lut 17:07