/*
数组 实现循环队列
数组中留1个位置出来不用,MAXSIZE-1个 为满
*/
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
/*定义循环队列的数组空间大小*/
#define MAXSIZE 6
typedef int Status;
/*定义数据类型 假设为int*/
typedef int Element;
typedef struct{
Element data[MAXSIZE];
int front;/*队头*/
int rear;/*队尾*/
}SqQueue;
/*初始化*/
Status Init(SqQueue *q)
{
q->front = 0;
q->rear = 0;
return OK;
}
/*队列中元素个数*/
int QueueLength(SqQueue *q)
{
return (q->rear - q->front + MAXSIZE) % MAXSIZE ;
}
/*队列是否已经满*/
bool FullQueue(SqQueue *q)
{
if ( (q->rear + 1)% MAXSIZE == q->front )
return true;
else
return false;
}
/*队列是否为空*/
bool EmptyQueue(SqQueue *q)
{
return q->front == q->rear ;
}
/*入队*/
Status EnterQueue(SqQueue *q, Element data)
{
if( FullQueue(q))
return ERROR;
q->data[q->rear] = data;
q->rear = (q->rear + 1) % MAXSIZE;
printf("入队成功\n");
return OK;
}
/*出队*/
Status DepartQueue(SqQueue *q,Element *e)
{
if( EmptyQueue(q))
return ERROR;
*e = q->data[q->front];
q->front = (q->front+1)%MAXSIZE;
printf("出队成功\n");
return OK;
}
int main(void)
{
SqQueue q;
Element data;
Init(&q);
EnterQueue(&q,1);
EnterQueue(&q,2);
EnterQueue(&q,3);
EnterQueue(&q,4);
EnterQueue(&q,5);
EnterQueue(&q,6);
EnterQueue(&q,7);
DepartQueue(&q,&data);
DepartQueue(&q,&data);
DepartQueue(&q,&data);
DepartQueue(&q,&data);
DepartQueue(&q,&data);
DepartQueue(&q,&data);
DepartQueue(&q,&data);
/*测试结果 5次入队出队 成功 说明实验成功了*/
return 0;
}