顺序循环队基本操作代码块

顺序循环队基本操作

//-------队列的顺序存储结构--------
//------------定义-----------------

#define MaxQSize 100                   //队列可达到的最大长度
typedef struct
{
    QElemType *base;                   //存储空间的基地址
    int front;                         //头指针
    int rear;                          //尾指针(记录实际队尾的后一个元素)
}SqQueue;

//---------------初始化--------------
Status InitQueue(SqQueue &Q)
{
    Q.base = new QElemType[MaxQSize];              //为队列分配一个最大容量为MaxQSize的数组空间
    if (!Q.base)
        exit (overflow);
    Q.front = Q.rear = 0;                          //头指针和尾指针置为0,表示队列为空
    return ok;
}

//----------  求队列的长度-------------
//对于非循环队列,尾指针和头指针的差值便是队列的长度,
//而对于循环队列,差值有可能为负值,因此需要加上MaxQSize,再与MaxQSize求余
int QueueLength(SqQueue Q)
{
    return (Q.rear - Q.front + MaxQSize) % MaxQSize;
}

//--------------入队--------------
/* 入队操作是在队尾插入一个新的元素,入队需要判满,将新元素插入,队尾指针加一 */

status EnQueue (SqQueue &Q , QElemType e)
{   //插入新元素e为Q的新的队尾元素
    if ((Q.rear + 1) % MaxQSize == Q.front )                    //判断队满
        return  error;
    Q.base[Q.rear] = e;                                         //新元素插入队尾
    Q.rear = (Q.rear + 1) % MaxQSize ;                          //队尾指针加一
    return ok;
}

//--------------出队----------------
/* 出队判空,保存队头元素,队头指针加一 */

status DeQueue (SqQueue &Q, QElemType &e)
{  //删除队头原则,用e返回其值
    if ( Q.front == Q.rear )                                   //判断队空
        return  error;                 
    e = Q.base[Q.front];                                       //保存队头
    Q.front = (Q.front + 1) % MaxQSize;                        //队头指针加一
    return ok;
}

//--------------取队头元素--------------

status GetHead(SqQueue Q)
{
    if (Q.front != Q.rear)                                     //队列非空
        return Q.base[Q.front];                                //返回队头元素的值,队头指针不变
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值