Implementacja stosu na Stringach

0

Wtam, potrzebuje wskazowek jak zaimplementowac stos na tablicy String[].

Implementacja ma zawierac:

void push(String item);
boolean empty();
String peek();
String pop();
0

zrob sobie 1 zmienną "aktualna pozycja". na początku niech przyjmie wartość 0. będzie Ci ona mówić o ilości elementów na stosie oraz gdzie wstawić kolejny element.

0
sokgob napisał(a):

Wtam, potrzebuje wskazowek jak zaimplementowac stos na tablicy String[].

Implementacja ma zawierac:

void push(String item);
boolean empty();
String peek();
String pop();


Tworzysz tablice oraz indeks na aktualny (gorny) element (nazwijmy go IDX). Poczatkowo jest -1 gdyz stos jest pusty (jak wiesz lub nie, Java zaczyna numeracje elementow tablic od 0, a wiec indeks 0 wsakzuje na pierwszy element).

push - sprawdzasz czy stos jest pelny; jesli jest rzucasz wyjatek, jesli nie, zwiekszasz IDX o 1 i wstawiasz nowy element do tablicy w to miejsce
empty - sprawdzasz czy IDX == -1
peek - jesli stos jest pusty zwracasz null; jesli nie, zwracasz element z tablicy o indeksie IDX
pop - jesli stos jest pusty, rzucasz wyjatek; jestli nie, zapamietujesz na chwile element o indeksie IDX, zmniejszasz IDX o 1, zwracasz zachowany element

To wariant prostszy, gdzie tablica jest stala. Jeszcze przychodza mi do glowy na szybko 2 inne:
1. gdy stos sie przepelnia, zwiekszasz tablice - tworzysz chwilowo nowa, 2 razy wieksza, kopiujesz wszystkie elementy z nowej do starej, nadpisujesz referencje do starej ta nowa - i stos juz jest wiekszy
2. staos ma staly rozmiar, ale sie zapetla - gdy cala tablica jest zajeta i robiony jest push(), IDX sie 'przekreca', tzn. ustawiany jest na 0 i tam wlasnie wstawiany jest nowy element. Ten stary jest 'zapomniany' i nie bedzie juz dostepny - dlatego nie lubie jakos tego rozwiacania. To ma na pewno jakas nazwe ale w tej chwili nie przychodzi mi ona do glowy.
0

Jaki stack overflow? Chodzi Ci o nazwe ktorej nie moge sobie przypomniec? Na pewno nie jest to stack overflow. To sie raczej nazywa 'circular buffer' czy jakos tak.

0

Mógłbym prosić o jakieś przykładowe implementacje?

0

Nie mozna liczyc. To forum jest od pomagania a nie dawania gotowcow. Umiesz zadeklarowac klase? Metode? Umiesz zaalokowac tablice, wykonac przypisanie? Umiesz dodac 1 / odjac 1 od zmiennej typu int? To umiesz wszystko co trzeba zeby zaimplementowac samemu. Jak sie z czyms zatniesz to wracasz tutaj i pytasz. Albo idziesz do dzialu praca i oferujesz gratyfikacje za wykonanie implementacji za Ciebie.

0

A nie lepiej użyć Stack<String>?

A jeżeli ktoś się czepia:

 
class MyStack extends Stack<String> {
}

Voila.

0

Ja kiedys tez tak dla jaj na zejaciach zrobilem, nie sadze ze to przejdzie ;d
Po drigie, Stack dziedziczy po Vector, obie klasy sa poniekad przestarzale i nowy kod powinno sie pisac uzywajac innych klas.

0
<delete>
0

W Javie nie ma żadnych niejawnych konwersji na typ logiczny. Kod pierwszej funkcji powinien wyglądać tak:

        public boolean empty() {                           // czy stos pusty
                return (IDX==-1); 
        }

Resztę zrób sam.
Kod klasy jest niepełny, brakuje definicji pól.

0

a gdzie masz idx i table?
Wg mnie pop() nie powinien nic wpisywać do tabeli.

0
<delete>
0

Nie rozumiem, co ma wspólnego lokalna zmienna table w statycznej metodzie main z klasy ExampleStack z obiektem klasy ArrayStringStack?
Tak jakby dajesz komendę robotowi - "rusz ręką", zaś robot nie ma ręki. Na pytanie którą ręką ma ruszyć pokazujesz schemat ręki innego robota.

0
<delete>
0

table i IDX mają być polami w klasie, a nie zmiennymi lokalnymi metody main()

0
<delete>

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