matematykaszkolna.pl
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