循环队列(C语言)

1.定义:

        循环队列(Circular Queue),也被称为环形队列或循环缓冲区,是一种队列数据结构,它具有固定大小的缓冲区,允许在队列的前面和后面插入和删除元素。与普通队列不同,循环队列可以避免浪费存储空间的问题,因为当队列的尾部元素达到缓冲区的末尾时,它可以"循环"到缓冲区的开头。

2.主要特点:

  1. 固定大小:循环队列有一个预定义的大小,一旦分配了这个大小,就不能动态调整。

  2. 循环性质:当队列的尾部指针(rear)到达缓冲区的末尾时,下一个元素将被插入到缓冲区的开头。这种循环性质使得队列的数据结构紧凑,不会浪费存储空间。

  3. 前后指针:循环队列通常有两个指针,一个指向队列的头部(front),另一个指向队列的尾部(rear)。

  4. 满队列判定:为了区分队列是空的还是满的,可以采用不同的方法。一种常见的方法是在插入元素时检查(rear+1)%n == front,其中n是队列的大小。如果这个条件成立,队列被认为是满的。

  5. 避免数据搬移:与普通队列相比,循环队列的插入和删除操作更加高效,因为元素不需要搬移。普通队列在出队操作后,需要将后续元素向前搬移一个位置,而循环队列不需要这样做。

  6. 应用:循环队列常常用于需要固定大小缓冲区的场景。

3.示例图:

4.主要操作

  • 入队:在队尾插入元素,并将rear指针向后移动。

  • 出队:从队头删除元素,并将front指针向后移动。

  • 判满:检查队列是否已满。

  • 判空:检查队列是否为空。

  • 查看队首元素:返回 front 指针所指向的元素。
  • 查看队列长度:返回 rear 指针与 front 指针之间的元素个数。

5.循环队列的实现

5.1结构体

#define MAXSIZE 100

typedef int DataType;

typedef struct
{
    DataType data[MAXSIZE];
    int front;
    int rear;
}CirclesQueue;

5.2初始化

接收一个指向循环队列的指针函数返回0,表示初始化成功。

/*循环队列初始化*/
int init(CirclesQueue *Q);

/*循环队列初始化*/
int init(CirclesQueue *Q)
{
    Q->front = Q->rear = 0;
    return 0;
}

运行图:

5.3入队:需要判断队列是否满了,若不满,则可入队

/*入队*/
int enqueue(CirclesQueue *Q, DataType x);
/*入队*/
int enqueue(CirclesQueue *Q, DataType x)
{
    if(isfull(Q))
    {
        printf("队列已满!100001\n");
        return 100001;
    }

    Q->rear = (Q->rear+1) % MAXSIZE;
    Q->data
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与风过山岗

您的鼓励是我莫大的荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值