ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

队列之循环队列

2020-12-24 13:00:59  阅读:152  来源: 互联网

标签:QUEUE pq 队列 queue int 循环 front rear


循环队列

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时需要再%数组长度

标签:QUEUE,pq,队列,queue,int,循环,front,rear
来源: https://blog.csdn.net/hieap/article/details/111620560

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有