Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

stack cloning - kako izvesti?

[es] :: Art of Programming :: stack cloning - kako izvesti?

[ Pregleda: 2590 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

trodon
Nebojsa Brindic
CTO
Bincode Entertainment
Beograd

Član broj: 14115
Poruke: 219
*.89.eunet.yu.

Sajt: bincode-entertainment.com


Profil

icon stack cloning - kako izvesti?03.09.2006. u 18:45 - pre 213 meseci
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???
 
Odgovor na temu

Relaja
Relja Petrovic
Krusevac

Član broj: 48066
Poruke: 111
*.beobug.com.

ICQ: 393683437


Profil

icon Re: stack cloning - kako izvesti?03.09.2006. u 21:16 - pre 213 meseci
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.

[Ovu poruku je menjao Relaja dana 03.09.2006. u 22:27 GMT+1]
Ljubav je kad ja prdnem a njoj ne smrdi.
 
Odgovor na temu

trodon
Nebojsa Brindic
CTO
Bincode Entertainment
Beograd

Član broj: 14115
Poruke: 219
*.138.eunet.yu.

Sajt: bincode-entertainment.com


Profil

icon Re: stack cloning - kako izvesti?04.09.2006. u 11:39 - pre 213 meseci
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
 
Odgovor na temu

mmwlada
Vladimir Milovanović
Web developer, U.S. Steel Serbia

Član broj: 99390
Poruke: 62
195.252.78.*

Sajt: www.tetraedar.net/mmwlada


+1 Profil

icon Re: stack cloning - kako izvesti?04.09.2006. u 12:41 - pre 213 meseci
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.
 
Odgovor na temu

trodon
Nebojsa Brindic
CTO
Bincode Entertainment
Beograd

Član broj: 14115
Poruke: 219
*.152.eunet.yu.

Sajt: bincode-entertainment.com


Profil

icon Re: stack cloning - kako izvesti?04.09.2006. u 19:15 - pre 213 meseci
Hvala ljudi, skapirao sam!!!
 
Odgovor na temu

emiraga

Član broj: 54285
Poruke: 32
*.iiu.edu.my.



Profil

icon Re: stack cloning - kako izvesti?08.09.2006. u 02:27 - pre 213 meseci
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;
 
Odgovor na temu

mmwlada
Vladimir Milovanović
Web developer, U.S. Steel Serbia

Član broj: 99390
Poruke: 62
195.252.78.*

Sajt: www.tetraedar.net/mmwlada


+1 Profil

icon Re: stack cloning - kako izvesti?08.09.2006. u 13:12 - pre 213 meseci
Da, ali u zadatku kaže da ne sme da koristi druge stackove, nizove i slično.
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
217.169.219.*

Jabber: DarkMan


Profil

icon Re: stack cloning - kako izvesti?10.09.2006. u 10:27 - pre 213 meseci
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).
 
Odgovor na temu

[es] :: Art of Programming :: stack cloning - kako izvesti?

[ Pregleda: 2590 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.