Z CHWiki
struct STACKITEM
{
int From;
int To;
int Tmp;
int Count;
};
struct STACK
{
int Top;
int Size;
STACKITEM ** Data;
};
void STACK_init(STACK ** stack, int size)
{
*stack = new STACK();
(*stack)->Size = size;
(*stack)->Data = new STACKITEM*[(*stack)->Size];
(*stack)->Top = 0;
}
void STACK_destroy(STACK ** stack)
{
for(int i = 0; i < (*stack)->Top; i++)
{
delete (*stack)->Data[i];
}
delete [] (*stack)->Data;
(*stack)->Data = NULL;
delete *stack;
*stack = NULL;
}
bool STACK_isempty(STACK * stack)
{
return (stack->Top == 0);
}
bool STACK_isfull(STACK * stack)
{
return (stack->Top == stack->Size);
}
void STACK_push(STACK * stack, STACKITEM * si)
{
if(!STACK_isfull(stack))
{
stack->Data[stack->Top] = si;
stack->Top++;
}
}
STACKITEM* STACK_pop(STACK * stack)
{
STACKITEM* si = NULL;
if(!STACK_isempty(stack))
{
stack->Top--;
si = (stack->Data[stack->Top]);
}
return si;
}
void STACKITEM_init(STACKITEM ** si, int From = 0, int To = 0, int Tmp = 0, int Count = 0)
{
*si = new STACKITEM();
(*si)->From = From;
(*si)->To = To;
(*si)->Count = Count;
(*si)->Tmp = Tmp;
}
void STACKITEM_destroy(STACKITEM ** si)
{
delete *si;
*si = NULL;
}