循环队列中的有效长度

此循环队列题,所求的为队内的有效长度

头指针为 front

尾指针为 rear

循环队列长度为 N,最多存储N-1个数据

假设 N=5

即循环队列长度为 5 最多存储4个数据

可以按照rear 与 front的大小关系将问题划分为一下三个部分

一.rear > front时

此时,rear - front 即为队内有效长度

二.rea = front时

也可以用 rear - front来表示此时的队内有效长度

三.rear < front时

以此题为例子

此时可以看出实际上,队内有效长度为 3

三个长度可以分为两部分 rear一部分(1份数据)

                                        front一部分(2份数据)

rear部分的数据正好等于rear的小标数

而front的下标为3,可以将front部分的数据数理解为fronr到队尾存在几分数据

即 N-front

综上所述:队内有效长度为 rear-front+N

目前而言

 将两个式子经行化简转化就可达到本题的答案

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
循环队列是一种使用固定大小的数组实现的队列,可以循环利用数组的空间。求队列长度的代码如下: ```c #define MAX_SIZE 100 typedef struct { int front; // 队头指针 int rear; // 队尾指针 int size; // 队列长度 int data[MAX_SIZE]; // 存放队列元素的数组 } CircularQueue; // 初始化队列 void initQueue(CircularQueue *queue) { queue->front = 0; queue->rear = 0; queue->size = 0; } // 判断队列是否为空 int isEmpty(CircularQueue *queue) { return queue->size == 0; } // 判断队列是否已满 int isFull(CircularQueue *queue) { return queue->size == MAX_SIZE; } // 入队 void enqueue(CircularQueue *queue, int element) { if (isFull(queue)) { printf("Queue is full. Cannot enqueue.\n"); return; } queue->data[queue->rear] = element; queue->rear = (queue->rear + 1) % MAX_SIZE; // 循环更新队尾指针 queue->size++; } // 出队 int dequeue(CircularQueue *queue) { if (isEmpty(queue)) { printf("Queue is empty. Cannot dequeue.\n"); return -1; } int element = queue->data[queue->front]; queue->front = (queue->front + 1) % MAX_SIZE; // 循环更新队头指针 queue->size--; return element; } // 求队列长度 int getQueueLength(CircularQueue *queue) { return queue->size; } ``` 上述代码,使用`CircularQueue`结构体表示循环队列,其`front`和`rear`分别指向队头和队尾元素,`size`表示队列的长度,`data`数组存放队列元素。`initQueue`用于初始化队列,`isEmpty`和`isFull`判断队列是否为空或已满,`enqueue`和`dequeue`分别进行入队和出队操作,`getQueueLength`用于求队列长度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值