循环队列的实现:
#include<stdio.h>
#include<stdlib.h>
#define FALSE 0;
#define TRUE 1;
typedef int ElemType;
typedef struct
{
int front;
int rear;
int maxSize;
ElemType *element;
} Queue;
void Create(Queue *Q,int mSize){
Q->maxSize = mSize;
Q->element = (ElemType*)malloc(sizeof(ElemType)*mSize);
Q->front = Q->rear = 0;
}
void Destroy(Queue *Q){
Q->maxSize = -1;
free(Q->element);
Q->front = Q->rear = -1;
}
int IsEmpty(Queue *Q)
{
return Q->front == Q->rear;
}
int IsFull(Queue *Q){
return (Q->rear+1)%Q->maxSize == Q->front;
}
//获取队头元素
int Front(Queue *Q,ElemType *x)
{
if(IsEmpty(Q))
return FALSE;
*x = Q->element[(Q->front+1)%Q->maxSize];
return TRUE;
}
//在队尾插入元素
int EnQueue(Queue *Q,ElemType x)
{
if(IsFull(Q))
return FALSE;
Q->rear = (Q->rear+1)%Q->maxSize;
Q->element[Q->rear] = x;
return TRUE;
}
//删除队头元素
int DeQueue(Queue *Q)
{
if(IsEmpty(Q))
return FALSE;
Q->front = (Q->front+1)%Q->maxSize;
return TRUE;
}
void Display(Queue *Q)
{
int i;
for(i = Q->front;i!=Q->rear;)
{
i = (i+1)%Q->maxSize;
printf("element: %d\n",Q->element[i%Q->maxSize]);
}
}
int main()
{
Queue Q;
Create(&Q,5);
EnQueue(&Q,10);
EnQueue(&Q,20);
EnQueue(&Q,30);
EnQueue(&Q,40);
DeQueue(&Q);
DeQueue(&Q);
DeQueue(&Q);
EnQueue(&Q,50);
EnQueue(&Q,60);
Display(&Q);
return 0;
}