Wtam, potrzebuje wskazowek jak zaimplementowac stos na tablicy String[].
Implementacja ma zawierac:
void push(String item);
boolean empty();
String peek();
String pop();
Wtam, potrzebuje wskazowek jak zaimplementowac stos na tablicy String[].
Implementacja ma zawierac:
void push(String item);
boolean empty();
String peek();
String pop();
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.
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.
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.
Mógłbym prosić o jakieś przykładowe implementacje?
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.
A nie lepiej użyć Stack<String>?
A jeżeli ktoś się czepia:
class MyStack extends Stack<String> {
}
Voila.
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.
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.
a gdzie masz idx i table?
Wg mnie pop() nie powinien nic wpisywać do tabeli.
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.
table i IDX mają być polami w klasie, a nie zmiennymi lokalnymi metody main()