Czy taka implementacja jest ok?
#include <iostream>
using namespace std;
const int MAXINT = -2147483647;
struct elem
{
elem * next;
int data;
};
void init(elem * & top)
{
top = new elem;
top->next=NULL;
}
int size(elem * top)
{
int c = 0;
elem * p = top->next;
if(p)
do
{
c++;
p = p->next;
} while(p != top);
return c;
}
bool empty(elem *top)
{
return !top->next;
}
void push(elem * & top, int v)
{
elem * p = new elem;
p->data = v;
if(top->next) p->next = top->next;
else p->next = top;
top->next = p;
}
int pop(elem * & top)
{
if(top->next)
{
elem * p = top->next;
int v = p->data;
if(p->next != top) top->next = p->next;
else top->next = NULL;
delete p;
return v;
}
return -MAXINT;
}
void clear(elem *top)
{
while(top->next) pop(top);
}
void deleteStack(elem * & top)
{
clear(top);
delete top;
}
int main()
{
elem *stack;
init(stack);
int i;
for(i = 1; i <= 10; i++) push(stack,i);
while(!empty(stack))
{
cout << pop(stack)<<endl;
}
}