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...
Kude tumbe i tri bandere