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
Mam zdefiniowaną strukturę, wysłałem wyżej
struct elstosu
{
int klucz;
elstosu *nast;
}
4 lut 11:59