循环队列实现

本文详细介绍了循环队列的概念及其实现方法,包括链表法和数组法,并重点讲解了数组法实现循环队列的具体步骤。文章还提供了C++代码示例,展示了如何进行队列的插入、删除等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环队列

定义

循环队列是逻辑上首尾相连的队列,实现方法有两种:链表法和数组法。链表法只要把尾部指针指向头结点就可以。这里详述数组法。

队列数组结构图

这里写图片描述

关键词

  • front 队头,第一个元素
  • rear 队尾,最后一个元素的下一个位置

数据结构

class Queue
{
   public:
      Queue(int size);
   public:
      bool empty();
      bool full();
      void push(int elem);
      void pop();
      int front();
      int back();

   private:
      int *data;
      int _front;
      int rear;
      int maxSize;
};

关键操作

  • 判断空
    front == rear,则队列空
  • 判断满
    (rear+1)%maxSize == front,则队列满
  • 关于满的判断的两种方法
    • 一种方法是设置一个字段,记录当前队列中的元素个数
    • 另一种方法是队列中最后一个空间不存储,空留一个的目的是利于通过front与rear的相对位置判断队列的情况。若队列空间全部使用,则队列满的时候,rear == front ,这与队列空的条件相同。如果空出最后一个空间,队列满的判断条件就成上面的那样。

代码实现

Queue::Queue(int size):maxSize(size)
{
    data = new int[maxSize];
    _front = 0;
    rear = 0;
}

bool Queue::empty()
{
    return (_front == rear);
}

bool Queue::full()
{
    return ( (rear+1) % maxSize == _front);
}

void Queue::push(int elem)
{
    if(full())
    {
        return ;
    }
    data[rear] = elem;
    rear = (rear+1)% maxSize;

}

void Queue::pop()
{
    if(empty())
    {
        return ;
    }
    _front = (_front+1)%maxSize;
}

int Queue::front()
{
    return data[_front];
}

int Queue::back()
{
    return data[(rear-1+maxSize)%maxSize];
}

测试

int main()
{
    Queue que(5);
    que.push(1);
    que.push(2);
    que.push(3);
    que.push(4);
    que.push(5);

    cout << que.front() << endl;
    cout << que.back() << endl;

    que.pop();
    que.push(6);
    cout << que.front() << endl;
    cout << que.back() << endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值