#define QUE_SIZE 1000
typedef struct que
{
int front;
int rear;
int node[QUE_SIZE];
}Que;
int QueInit(Que *p);
int QueIsEmpty(Que *p);
int QueIsFull(Que *p);
int QueAddRear(Que *p, int n);
int QueDelFront(Que *p);
int QueGetFront(Que *p);
int QueGetRear(Que *p);
int QueClear(Que *p);
int QueGetSize(Que *p);
#include <stdlib.h>
#include "que.h"
int QueInit(Que *p)
{
int i = 0;
if(NULL == p)
{
return 0;
}
else
{
p->front = 0;
p->rear = 0;
for(i=0;i<QUE_SIZE;i++)
{
p->node[i] = 0;
}
return 1;
}
}
int QueIsEmpty(Que *p)
{
return (p->front == p->rear);
}
int QueIsFull(Que *p)
{
return (p->front == ((p->rear+1) % QUE_SIZE));
}
int QueAddRear(Que *p, int n)
{
if(QueIsFull(p))
{
return 0;
}
else
{
p->node[p->rear] = n;
p->rear = (p->rear+1) % QUE_SIZE;
return 1;
}
}
int QueDelFront(Que *p)
{
int n = -1; //there may be some problem here.
if(!QueIsEmpty(p))
{
n = p->node[p->front];
p->front = (p->front+1) % QUE_SIZE;
}
return n;
}
int QueGetFront(Que *p)
{
int n = -1; //there may be some problem here.
if(!QueIsEmpty(p))
{
n = p->node[p->front];
}
return n;
}
int QueGetRear(Que *p)
{
int i = 0;
int n = -1; //there may be some problem here.
if(!QueIsEmpty(p))
{
i = (p->rear+QUE_SIZE-1) % QUE_SIZE;
n = p->node[i];
}
return n;
}
int QueClear(Que *p)
{
if(QueIsEmpty(p))
{
return 0;
}
else
{
p->front = 0;
p->rear = 0;
return 1;
}
}
int QueGetSize(Que *p)
{
int size = 0;
if(p->front == p->rear)
{
size = 0;
}
else if(p->rear > p->front)
{
size = p->rear - p->front;
}
else
{
size = p->rear+QUE_SIZE - p->front;
}
return size;
}