循环队列和栈的操作基本类似 唯一要注意的点为判满条件(q-rear+1)%MAXSIZE 这里的MAXSIZE是队列开辟的最大空间。
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int arr[10];
int front;
int rear;
}CSeQueue;
CSeQueue* InitSeQueue(CSeQueue *q)
{
q=(CSeQueue *)malloc(sizeof(CSeQueue));
q->front=q->rear=9;
return q;
}
int InSeQueue(CSeQueue *q,int x)
{
if((q->rear+1)%10==q->front)
{
printf("队满!"); return 0;
}else{
q->rear=(q->rear+1)%10;
printf("入队元素为:%d\n",q->arr[q->rear]=x);
return 1;
}
}
int OutSeQueue(CSeQueue *q,int *x)
{
if(q->front==q->rear)
{
printf("队空!"); return 0;
}
else{
q->front=(q->front+1)%10;
*x=q->arr[q->front];
printf("出队元素为:%d",*x);
return 1;
}
}
int EmptySeQueue(CSeQueue *q)
{
if(q->front==q->rear) return 1;
else return 0;
}
int main()
{
CSeQueue *p;
int x=5;
p=InitSeQueue(p);
InSeQueue(p,x);
OutSeQueue(p,&x);
}