数据结构之循环队列操作

2014-11-24 02:02:54 · 作者: · 浏览: 1
#include
typedef int ElemType;
typedef int STATUS;
#define MAXSIZE 5
#define OK 1
#define ERROR 0
typedef struct{
	int data[MAXSIZE];
	int front;
	int rear;
}Sequeue;
//循环队列初始化
void InitSequeue(Sequeue *Q)
{
	Q->front=0;
	Q->rear=0;
}
//计算循环队列长度
int SequeueLength(Sequeue *Q)
{
	return (Q->rear-Q->front+MAXSIZE)%MAXSIZE;
}
//往循环队列加入一个数据
STATUS EnQueue(Sequeue *Q,ElemType e)
{
	if((Q->rear+1)%MAXSIZE == Q->front)
		return ERROR;
	Q->data[Q->rear]=e;
	Q->rear=(Q->rear+1)%MAXSIZE;
	return OK;
}
//把循环队列中的数据送到一个地址中
STATUS DeQueue(Sequeue *Q,ElemType *e)
{
	if(Q->
rear==Q->front) return ERROR; *e=Q->data[Q->front]; Q->front=(Q->front+1)%MAXSIZE; return OK; } int main() { Sequeue squeue; int value,flag=0,i; InitSequeue(&squeue); printf("length=%d\n",SequeueLength(&squeue)); for(i=1;i<=5;i++) { flag=EnQueue(&squeue,i); printf("flag=%d length=%d\n",flag,SequeueLength(&squeue)); } for(i=1;i<=5;i++) { flag=DeQueue(&squeue,&value); printf("flag=%d value=%d length=%d\n",flag,value,SequeueLength(&squeue)); } return 0; }