Stos - dodawanie elementów

0

Witam. Temat bardzie na rozumowanie, aniżeli pomoc w kodzie.

Ok, mam napisać implementacje tablicowego stosu ograniczonego. W miarę proste zadanie. Patrze sobie w internecie jakie metody muszą być w takiej implementacji i widzę dziwną rzecz. W większości implementacji jest

public void Push(T el){

[... kod jak stos jest przepelniony]

else
      stos[rozmiar++] = el;

}

Moje pytanie brzmi czemu kolejne elementy są dokładane na pierwsze indeksy? W moim rozumowaniu powinno być:

int rozmiar_temp = stos.length-1;
stos[rozmiar_temp--] = el;

, czyli dokładamy od tyłu elementy, a nie od przodu. Czy dobrze rozumiem, że najpierw mamy dostęp do 0,1.. indeksu?

Mam nadzieje, że dobrze nakreśliłem problem.

Pozdrawiam i dziękuję za pomoc,
Ujemny

0

Moje pytanie brzmi czemu kolejne elementy są dokładane na pierwsze indeksy?

Ponieważ tak jest wygodniej.

push(x)
> stos[0] = x

push(y)
> stos[0] = x
> stos[1] = y

push(z)
> stos[0] = x
> stos[1] = y
> stos[2] = z

foo = pop()
> foo = stos[2]
> stos[0] = x
> stos[1] = y

Nie trzeba się bawić z odejmowaniem, a przy realokowaniu z dodatkowym przemieszczaniem tablicy (musiałbyś przekopiować dane na koniec bloku pamięci, a nie początek = dodatkowe, zbędne obliczenia).

0

Ale czy wtedy nie tracimy sensu stosu? W sensie abstrakcyjnym, umownym? ^^

0

"jeśli coś chodzi jak kaczka i kwacze jak kaczka, to musi być kaczką"
Jeżeli coś oferuje odpowiednie metody i działa jak stos, to musi być stos.
Po co utrudniać, jeżeli nie byłoby z tego żadnych zysków?

0

Sensem stosu jest to, że zdejmujesz z niego elementy w odwrotnej kolejności niż je tam wkładałeś. Jakiekolwiek indeksy i to czy one rosną czy maleją to już są szczegóły implementacyjne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1