Kód Zásobník v CPP

Z CHWiki

Přejít na: navigace, hledání
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;
}