隊列(下)之循環隊列

循環隊列代碼


#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0

typedef int data_t;
typedef struct
{
data_t data[MAXSIZE];
int front;//隊頭位置
int rear;//隊尾下一個位置
}SqQueue;

SqQueue *CreateEmptyQueue()//創建隊列
{
SqQueue *sq = (SqQueue*)malloc(sizeof(SqQueue));
if(sq==NULL)
{
printf("CreateEmptyQueue Error\n");
return NULL;
}
sq->front=0;
sq->rear=0;
return sq;
}
int DestroyQueue(SqQueue *Q)//銷燬隊列
{
if(Q==NULL)
{
printf("DestroyQueue Error\n");
return ERROR;
}
free(Q);
Q=NULL;
return OK;
}
int QueueLength(SqQueue *Q)//求當前隊列長度
{
return (Q->rear - Q->front + MAXSIZE)%MAXSIZE;
}
int EmptyQueue(SqQueue *Q)//判斷隊是否爲空
{
if(Q==NULL)
{
printf("EmptyQueue Error\n");
return -1;
}
if(Q->rear==Q->front)
return OK;
else
return ERROR;
}
int FullQueue(SqQueue *Q)//判斷隊是否已滿
{
if(Q==NULL)
{
printf("EmptyQueue Error\n");
return -1;
}
if((Q->rear+1)%MAXSIZE==Q->front)
return OK;
else
return ERROR;
}
int EnQueue(SqQueue *Q,data_t e)//元素e入隊
{
if(FullQueue(Q)==OK)
{
printf("Queue is Full\n");
return ERROR;
}
Q->data[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXSIZE;
return OK;
}
int DeQueue(SqQueue *Q,data_t *e)//元素出隊,出隊元素存儲在e中
{
if(EmptyQueue(Q)==OK)
{
printf("Queue is Empty\n");
return ERROR;
}
*e=Q->data[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return OK;
}
int main()
{
/*
SqQueue *queue = CreateEmptyQueue();
data_t data;
EnQueue(queue,20);
EnQueue(queue,30);
EnQueue(queue,40);
DeQueue(queue,&data);
printf("DeQueue:%d\n",data);
DeQueue(queue,&data);
printf("DeQueue:%d\n",data);
DeQueue(queue,&data);
printf("DeQueue:%d\n",data);
DeQueue(queue,&data);
printf("DeQueue:%d\n",data);//此處應輸出1個“隊列爲空”
for(data=0;data<25;data++)//此處應輸出6個“隊列已滿”
{
EnQueue(queue,data);
}
if(DestroyQueue(queue)==OK)
printf("DestroyQueue success\n");
return 0;
*/
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章