循环队列

本文详细介绍了循环队列的基本概念及其实现原理,包括队列的初始化、入队和出队操作,并通过C++代码示例展示了如何判断队列是否为空或满的状态,以及如何进行元素的插入和删除。

循环队列并不复杂,把几个位置规定清楚是关键!比如,front和rear各指向哪?还有一些小细节,首先观察图:

从书上来看,尾端rear必定为空(特意留下一个空位置),front总是指向队头,而rear指向尾。
接着是几个重要的公式

判定队列满的公式

队列长度的计算公式

下面以入队列说明,首先判定队列是否满?第二步,在rear位置处插入数据,最后计算rear的下标,出列与之相似。

#include <iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define QueueSize 100
typedef struct
{
    int data[QueueSize];
    int front,rear;
}*SeqQueue,Squeue;
void InitQueue(SeqQueue &Q)/*初始化*/
{
    Q->front=Q->rear=0;
}
int EnQueue(SeqQueue &Q,int e)/*入队*/
{
    if(Q->front==(Q->rear+1)%QueueSize)/*队列是否满?*/
        return ERROR;
    Q->data[Q->rear]=e;
    Q->rear=(Q->rear+1)%QueueSize;
    return OK;
}
int DeQueue(SeqQueue &Q,int &e)/*出队*/
{
    if(Q->front==Q->rear)/*队列是否空*/
    {
        cout<<"队列已空!"<<endl;
        return ERROR;
    }
    e=Q->data[Q->front];
    Q->front=(Q->front+1)%QueueSize;
    return OK;
}
int main()
{
    int e;
    SeqQueue q=(SeqQueue)malloc(sizeof(Squeue));/*堆创建*/
    InitQueue(q);/*初始化*/
    EnQueue(q,12);/*入队*/
    DeQueue(q,e);/*出队*/
    cout<<"e="<<e<<endl;
    cout<<"font="<<q->front<<endl;
    cout<<"rear="<<q->rear<<endl;
    DeQueue(q,e);/*出队*/
    free(q);
    return 0;
}

转载于:https://www.cnblogs.com/tinaluo/p/5240729.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值