#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;
}

 

posted on 2016-04-22 16:36  SLOOP  阅读(133)  评论(0)    收藏  举报