循环队列(循环数组)中元素个数的计算

队列头指针为front,队列尾指针为rear(指向队尾元素),after_rear为队尾元素的后一位置(按顺时针方向),队列容量为maxsize

 

如果用 front == rear 来表示队列为空,也就是说front和rear指向同一个位置,那么:

队列满时:(rear+1) mod maxsize == front

队列中元素个数为:(rear-front+maxsize) mod maxsize

 

如果用 rear == (front-1+maxsize) mod maxsize 来表示队列为空,也就是说front指向rear的下一个位置,那么:

队列满时:(after_rear+1) mod maxsize == front

队列中元素个数为:(after_rear–front+maxsize) mod maxsize

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用 C 语言实现循环队列并输出其元素个数的完整代码示例: ```c #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 5 typedef struct { int front; int rear; int data[MAX_SIZE]; } CircularQueue; CircularQueue* createCircularQueue() { CircularQueue* q = (CircularQueue*) malloc(sizeof(CircularQueue)); q->front = 0; q->rear = 0; return q; } void enqueue(CircularQueue* q, int x) { if ((q->rear + 1) % MAX_SIZE == q->front) { printf("Error: Queue is full\n"); } else { q->data[q->rear] = x; q->rear = (q->rear + 1) % MAX_SIZE; } } int dequeue(CircularQueue* q) { if (q->front == q->rear) { printf("Error: Queue is empty\n"); return -1; } else { int x = q->data[q->front]; q->front = (q->front + 1) % MAX_SIZE; return x; } } int size(CircularQueue* q) { return (q->rear - q->front + MAX_SIZE) % MAX_SIZE; } int main() { CircularQueue* q = createCircularQueue(); enqueue(q, 1); enqueue(q, 2); enqueue(q, 3); dequeue(q); enqueue(q, 4); printf("The size of the queue is: %d\n", size(q)); free(q); return 0; } ``` 输出结果为: ``` The size of the queue is: 3 ``` 在该代码,我们定义了一个循环队列结构体 `CircularQueue`,包含队头下标 `front`、队尾下标 `rear` 和一个数组 `data`,表示存储队列元素的数据。我们使用 `createCircularQueue` 函数创建了一个新的循环队列,并使用 `enqueue` 和 `dequeue` 分别实现入队和出队操作,`size` 函数用于计算队列元素个数。在主函数,我们创建了一个循环队列 `q`,向队列添加了三个元素,然后删除了一个元素,再添加一个元素。最后,输出队列元素个数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值