[ Sarcom @ 24.09.2010. 10:41 ] @
Pozdrav
Ako moze pomoc oko ovoga zadatka.
Napravite program u C++ koji sa tastature učitava 30 cijelih brojeva u dvije LIFO liste (prva lista neka se zove L1, a druga lista neka se zove L2). Ako je broj djeljiv sa 3 onda se učitava u listu L1, a ako nije djeljiv sa 3 onda se učitava u listu L2. Nakon učitavanja program treba liste L1 i L2 spojiti tako da se na listu L2 nadoveže lista L1. Na kraju se se sadržaj rezultirajuća liste koja se dobije spajanjem treba ispisati na monitoru.
Naime znam kako napraviti cvor u LIFO povezanim listama i znam funkcije za stek,ali ne znam kako to dvoje da objedinim i uradim ovaj zadatak?
[ ik0 @ 24.09.2010. 12:07 ] @
Ako me dobro pamcenje sluzi LIFO je ustvari "magacin"...evo nesta sta sam radio neki seminarski rad...mozda ti pomogne...

Code:


#include <iostream>
#include <alloc>
#define LIMIT 100

typedef struct
{
   int info;
}stackrecord;

typedef struct
{
   stackrecord stackarray [LIMIT];
   int top;
}stack;

stack s;
stackrecord r;

void setstack (ps)
/* Go inicijalizira magacinot s da e prazen */
    stack *ps;
{
   (*ps).top = -1;
}

int empty (ps)
/* Vrakja true samo ako magacinot e prazen */
   stack *ps;
{
   return ((*ps).top == -1);
}

void push (pnewrecord,ps)
/* Go vmetnuva zapisot newrecord na vrvot na magacinot s */
stackrecord *pnewrecord;
stack *ps;
{
if ((*ps).top == (LIMIT - 1))
   { cout<< "overflow"<<endl; }
else
   {
     (*ps).top = (*ps).top + 1;
     (*ps).stackarray[(*ps).top].info = (*pnewrecord).info;
   }
}

void pop(ps,pvalue)
/* Ja kopira sodrzinata na top zapisot od magacinot s
vo vrednost (value) i go otstranuva zapisot od magacinot */
stack *ps;
stackrecord *pvalue;
{
if(empty(ps))
    {  cout << "underflow"<<endl; }
else
    {
       (*pvalue).info = (*ps).stackarray[(*ps).top].info;
       (*ps).top = (*ps).top - 1;
    }
}

int main()
{           
  int i;
  stackrecord *sr;
  stack *ps1;
  sr=(stackrecord *)malloc(sizeof(r));
  ps1=(stack *)malloc(sizeof(s));

  (*sr).info=1;
  setstack(ps1);
  push(sr,ps1);
  (*sr).info=2;
  push(sr,ps1);
  for (i=(*ps1).top; i>-1; i--)
      {
         cout<<(*ps1).stackarray[i].info <<endl;
      }
  pop(ps1,sr);
  for (i=(*ps1).top; i>-1; i--)
      {
         cout<<(*ps1).stackarray[i].info <<endl;
      }

return 0;
}


Kako mislis da ih spois da dobijes novu LIFO listu? Evo ti od ovaj primer vidi nesta ako mozes da izvuces...
[ Sarcom @ 24.09.2010. 12:57 ] @
thx, ima ovdje nekih stvari koje ce mi pomoci.
Pa mislim na to da u steku imamo funkcije za ubacivanje,izbacivanje i ostale operacije sa elementima i ne znam kako te funkcije da ukomponujem sa LIFO listama.
[ ik0 @ 24.09.2010. 13:37 ] @
ja bi to uranio ovako....upisao bih brojeve uneseni preko tastature u nizu...onda bi proveravao svaki broj od nize dali je deljiv sa 3 ako je deljiv zovem funkciju "push"i upisujem ga u L1 ako nije u L2...a jer nerazumem sta si htio reci sa to da spois ta dva magacina, ja bi to uradio tako da cu uraditi treci magacin de bi smestao vredoste jedan po jedan od oba magacina...Kako da ih ukoponujes...valjda imas neko predavanje :) procitaj...ne znam kako da ti objasnim to...a mesto da koristis te funkcie ima i gotovih bibljoteka...ali ako vec moras to je vec drugo...
[ Nedeljko @ 24.09.2010. 17:06 ] @
Citat:
Sarcom: Pa mislim na to da u steku imamo funkcije za ubacivanje,izbacivanje i ostale operacije sa elementima i ne znam kako te funkcije da ukomponujem sa LIFO listama.


stek = LIFO lista.