matematykaszkolna.pl
Stos Benny: Nie mogę rozkminić kawałka stosu. void stos::wstaw(int x) { elstosu *pom; //dodaje wskaźnik typu elstosu o nazwie pom, dalej nie ogarniam pom=new elstosu; if(pom!=NULL) { pom−>klucz=x; pom−>nast=szczyt; szczyt=pom; } }
3 lut 17:31
jc: A ← B ←C ←szczyt A ← B ←C ← D ←szczyt Dodajesz nowy element D (u Ciebie nazywa się pom). Zapamiętujesz klucz w D Zapamiętujesz adres C w D (adres C jest przechowywany w zmiennej szczyt W zmiennej szczyt umieszczasz adres D Ja bym napisał to tak (tylko inne nazwy bez tego NULLa) void stos::wstaw(int x){ elstosu* nowy = new elstosu; if(elstosu){ nowy −> klucz = x; nowy −> poprzedni = szczyt; // zamieniłbym nast na poprzedni szczyt = nowy; } }
3 lut 19:59
Benny: Może to się przyda struct elstosu { int klucz; elstosu *nast; } Czy w moim przypadku nie jest tak, że pom ma wskaźnik na nast, który jest szczytem stosu (C) i później w miejsce szczyt wchodzi pom?
4 lut 11:14
jc: W każdym nowym elemencie trzymasz adres poprzedniego elementu. W B masz adres A, w C adres B, a szczyt to adres C. Jak dodajesz D, to w D umieszczasz adres C (czyli szczyt) i szczycie umieszczasz adres D.
4 lut 11:22
Benny: O którym Ty mówisz teraz przypadku?
4 lut 11:44
jc: Benny, oczywiście, że musisz mieć gdzieś zdefiniowaną strukturę elstosu. Zakładałem, że masz coś takiego. W kolejno doczepianych elementach pamiętasz adresy elementów tuż poniżej. szczyt zawsze zawiera adres ostatniego elementu. szczyt = 0 dodajesz a A= (a, 0), szczyt = adres A dodajesz b A= (a,0), B=(b, adres A), szczyt = adres B dodajesz c A= (a,0), B=(b, adres A), C=(c, adres B), szczyt = adres C Adresy A, B, C są przechowywane w B, C, szczyt. Jak chcesz wstawić d, to tworzysz nowe miejsce D, zapamiętujesz w nim klucz d, adres C (znajdziesz go w zmiennej szczyt), a następnie (póki znasz) zapamiętujesz adres D w zmiennej szczyt. Z czym masz problem?
4 lut 11:56
Benny: Ok teraz już rozumiem emotka Mam zdefiniowaną strukturę, wysłałem wyżej struct elstosu { int klucz; elstosu *nast; }
4 lut 11:59