All pastes #2071344 Raw Edit

Queue Implementation in C

public c v1 · immutable
#2071344 ·published 2011-05-28 20:32 UTC
rendered paste body
#include <malloc.h>#define QMAX 3typedef struct{	int id;} TCB;typedef struct{	TCB * arr[QMAX];	int first;	int last;	int empty;} tcbqueue;void initialize_queue(tcbqueue * q){	q->first = 0;	q->last = 0;	q->empty = 1;}int qpush( tcbqueue * q, TCB * addme ){	if( (q->first != q->last) || (q->first == q->last && q->empty) )	{		q->arr[q->last++] = addme;				if(q->last == QMAX)			q->last = 0;		if(q->empty)			q->empty = 0;		return 1;	}	return 0;}TCB * qpop(tcbqueue * q){	if( q->first != q->last || (q->first == q->last && !q->empty) )	{		TCB * ret = q->arr[q->first++];				if(q->first == QMAX)			q->first = 0;		if(q->first == q->last)			q->empty = 1;		return ret;	}	return 0;}int main(){	tcbqueue q;	TCB * t = (TCB*)malloc(sizeof(TCB));	TCB * t2 = (TCB*)malloc(sizeof(TCB));	TCB * t3 = (TCB*)malloc(sizeof(TCB));	TCB * t4 = (TCB*)malloc(sizeof(TCB));	initialize_queue(&q);	qpush(&q, t);	qpush(&q,t2);	qpush(&q,t3);	qpush(&q,t4);	qpop(&q);	qpop(&q);	qpop(&q);	qpop(&q);	qpush(&q,t2);	qpush(&q,t4);	qpush(&q, t);	qpush(&q,t3);	qpop(&q);	return 0;}