Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 3.552 pregleda

Najnovija ↓

stack cloning - kako izvesti? 03.09.2006. u 19:45 · pre 245 meseci #1
Zadatak sa ispita kaze:
Napisati metodu clone(Stack s1, Stack s2) tako da posle izvrshenja s2 bude identichan kao i s1. (nije bash ovakav text ali nadam se da je poenta jasna). Pri tome se ne smeju koristiti dodatni stekovi, nizovi,itd. vec samo prosti podaci, kao npr. "int". Smeju se koristiti samo metode push, pop, isEmpty i peek. Takodje se ne smemo oslanjati ni na implementaciju steka (nebitno da li je realizovan preko linked list-a, array-a, queue-a).Najveci problem ovde je taj shto je lagano klonirati s1, s tim da je s2 obrnut klon, tj. zadnji elemenat s1 postaje prvi elemenat s2. Kako ih uchiniti identichnima pod gore navedenim uslovima???
Re: stack cloning - kako izvesti? 03.09.2006. u 22:16 · pre 245 meseci
izmenjeno 1 put, poslednji put Relaja 03.09.2006. u 22:27
  1. Relaja03.09.2006. u 22:27zapis iz teksta poruke
#2
pa to ces raditi rekurzivno.
Code:

rek(stack s1, stack& s2){
  if(s1.size())==0)return;
  int vrednost = s1.skini;
  rek(s1,s2);
  s2.push(vrednost);
}

Edit:
s2 moze biti globalna promenljiva
ukoliko s1 ne mora ostati nepromenjen, onda i on moze biti globalna promenljiva..
ovako se samo cuva s1, tj.pocetni stack.
Potpis
Ljubav je kad ja prdnem a njoj ne smrdi.
Re: stack cloning - kako izvesti? 04.09.2006. u 12:39 · pre 245 meseci #3
OK, ovo mi je jasno, ja sam ga uradio na slichan nachin, samo iterativno. E sad, hteo bih da te pitam zar to tvoje nece funkcionisati ovako: stack je LIFO, pa ce njegov poslednji elemenat koji je prvi skinut, postati prvi elemenat stacka s2. Na taj nachin se dobija clone, ali obrnut, a meni treba identichan. Mozda je tvoje reshenje tachno, ali te samo molim da mi pojasnish tu rekurziju u tvom reshenju poshto nju malo slabije kapiram.
THX
Re: stack cloning - kako izvesti? 04.09.2006. u 13:41 · pre 245 meseci #4
Odgovor koji ti je dao Relaja je tačan. Pazi ovako: Kada uzmeš prvi put iz prvog steka sa
Code:
int x = s1.skini();
Ti si lokalnoj promenljivoj dao vrednost poslednjeg člana steka, a onda to ponovo uradiš za ostatak steka. Na taj način, ako imaš stek sa ovim vrednostima [1,5,3,8] i ako si izbacio 8, ostalo ti je [1,5,3]. Onda kada uradiš rekurzivno za taj stek, ti izbacuješ 3. Zatim 5 i na kraju 1. Onda kada pošalješ prazan stek, funkcija ništa ne uradi, nego se samo vrati nazad u prethodno pozvanu funkciju. Onda se u nov stek upisuje 1, pa 5, pa 3 pa 8. Tako u drugom steku imaš [1,5,3,8], koji je identičan prvom.
Potpis
http://www.tetraedar.net/
http://www.tetraedar.net/mmwlada/
http://www.tetraedar.net/english/
Re: stack cloning - kako izvesti? 08.09.2006. u 03:27 · pre 245 meseci #6
ako bi napravili neki privremeni stack, onda bi mogli to odraditi i iterativno

Code:
  stack temp;
  while(! s1.empty())
       temp.push(s1.skini());

  while(! temp.empty())
       s2.push(temp.skini());
   
   return s2;
Re: stack cloning - kako izvesti? 10.09.2006. u 11:27 · pre 245 meseci #8
Citat:
Relaja: pa to ces raditi rekurzivno.
Code:

rek(stack s1, stack& s2){
  if(s1.size())==0)return;
  int vrednost = s1.skini;
  rek(s1,s2);
  s2.push(vrednost);
}


U sustini i ovde se koristi novi stek.
Kreiran je implicitno kada nije prosledjen po referenci (zato je moguce skidanje sa steka a da se originalni stek ne promeni, jer se u sustini skida sa kopije steka).
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme