前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >数据结构--队列Queue--循环顺序队列

数据结构--队列Queue--循环顺序队列

作者头像
Michael阿明
发布2021-02-20 10:26:46
发布2021-02-20 10:26:46
27700
代码可运行
举报
运行总次数:0
代码可运行

针对顺序队列中的入队操作:if 队列没满,但是队尾到达数组末尾了,队列"满"了,其实没有满,数据需要整体移至数组头部,才可以继续入队。 为解决该问题,避免数据的挪移,有了循环顺序队列

循环顺序队列的思路:

  1. 当队列未满,队尾到达数组末尾了,让 tail 的数组下标跳至0;
  2. 判断队列是否满,可以用队列长度==容量,或者用求模运算(少用一个数组空间,(tail+1)%capacity = head 则队列满了) 完成代码见:https://github.com/hitskyer/course/tree/master/dataAlgorithm/chenmingming/queue

1. 主要修改

入队函数修改

代码语言:javascript
代码运行次数:0
运行
复制
bool circularQueue<T>::enqueue(const T &data)
{
    if(full())
        return false;
    else
    {
        if(empty())
        {
            m_pHead = m_pTail = 0;
            arrQ[0] = data;
            m_QueueLen++;
        }
        else if(m_pTail < m_capacity-1)
        {
            arrQ[++m_pTail] = data;
            m_QueueLen++;
        }
        else    //队列没满,但是队尾到达数组末尾了,让tail变成-1
        {
            if(m_pTail + 1 == m_capacity)
                m_pTail = -1;
            arrQ[++m_pTail] = data;
            m_QueueLen++;
        }
        return true;
    }
}

打印函数修改

代码语言:javascript
代码运行次数:0
运行
复制
void circularQueue<T>::print() const
{
    if(empty())
        cout << "empty queue!" << endl;
    cout << "circularQueue from head to tail as follow:" << endl;
    int j = m_pHead;
    for(UINT i = 0; i < m_QueueLen; )
    {
        if(j == m_capacity)     //打印时注意下标循环跳转
            j = 0;
        cout << "No." << ++i << " elem is " << arrQ[j++] << endl;
    }
    cout << "--------------print end----------------" << endl;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 主要修改
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档