队列之循环队列

本文介绍了使用数组创建的循环队列数据结构及其操作。在C语言中,通过`init`初始化队列,`en_queue`入队,`is_full`检查队列是否满,`show`显示队列元素,`is_empty`判断队列是否空,以及`out_queue`出队。循环队列的特点是当rear加1再模数组长度等于front时,队列满;当front等于rear时,队列空。
摘要由CSDN通过智能技术生成

循环队列

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)//循环队列中队列为空时rear是表面上的最后一个,front是表面上的第一个,而在创建时就设立rear的位置永远为
    //空,与队列为空时rear等于front加以区分。队列为满时rear的后一个是front,rear处为空;队列为空时rear=front,rear处为空,front也就为空
        return true;
    else return false;
}
bool en_queue(QUEUE*pq,int val)//入队时先将元素放在rear处,在将rear++
{
    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时需要再%数组长度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值