循环队列
typedef struct queue
{
int *pbase;
int front;
int rear;
}QUEUE;
int main()
{
QUEUE Q;
init(&Q);
en_queue(&Q,1);
en_queue(&Q,2);
en_queue(&Q,3);
en_queue(&Q,4);
en_queue(&Q,5);
en_queue(&Q,6);
}
void init(QUEUE *pq)
{
pq->pbase=(int *)malloc(sizeof(int)*6);
pq->front=0;
pq->rear=0;
}
bool is_full(QUEUE *pq)
{
if((pq->rear+1)%6==pq->front)
return true;
else return false;
}
bool en_queue(QUEUE*pq,int val)
{
if(is_full(pq))
{
return false;
}
else{
pq->pbase[pq->rear++]=val;
pq->rear=(pq->rear+1)%6;
return true;
}
}
void show(QUEUE*pq)
{
int i=pq->front;
while(pq->rear!=i)
{
printf("%d",pq->pbase[i]);
i=(i+1)%6;
}
}
bool is_empty(QUEUE*pq)
{
if(pq->front==pq->rear)
return true;
else return false;
}
bool out_queue(QUEUE*pq,int *pval)
{
if(is_empty(pq))
{
return false;
}
else{
*pval=pq->pbase[pq->front];
pq->front=(pq->front+1)%6;
}
}
总结
- 队列的rear始终为空,队列为空时rear=front;队列为满时,rear的下一个是front
- 因为是循环队列,因此在+1时需要再%数组长度