Kód Fronta v CPP

Z CHWiki

Přejít na: navigace, hledání
struct QUEUE
{
	int Head;
	int Tail;
	int Size;
	QUEUEITEM ** Data;
};

bool QUEUE_isempty(QUEUE * queue)
{
	return (queue->Head == queue->Tail);
}

bool QUEUE_isfull(QUEUE * queue)
{
	return ((queue->Tail - queue->Head) == queue->Size);
}

QUEUEITEM * QUEUE_get(QUEUE * queue)
{
	if(!QUEUE_isempty(queue))
	{
		QUEUEITEM * qi = queue->Data[queue->Head % queue->Size];
		queue->Head++;
		return qi;
	}
}

void QUEUE_put(QUEUE * queue, QUEUEITEM * qi)
{
	if(!QUEUE_isfull(queue))
	{
		queue->Data[queue->Tail % queue->Size] = qi;
		queue->Tail++;
	}
}

void QUEUE_init(QUEUE ** queue, int size)
{
	*queue = new QUEUE();
	(*queue)->Head = 0;
	(*queue)->Tail = 0;
	(*queue)->Size = size;
	(*queue)->Data = new QUEUEITEM*[size];
}

void QUEUE_destroy(QUEUE ** queue)
{
	for(int i = (*queue)->Head; i < (*queue)->Tail; i++)
	{
		delete (*queue)->Data[i % queue->Size];
	}
	delete (*queue)->Data;
	delete (*queue);
	*queue = NULL;
}

dá sa riešiť aj pomocou STL

#include <queue>
queue<QUEUETYPE> fronta;
fronta.pop(); - odobere prvok zo zaciatku
fronta.push(QUEUETYPE); - prida prvok na koniec
fronta.front(); - vrati prvy prvok
fronta.empty(); - vrati true, ak je fronta prazdna