c - 使用环形缓冲区实现队列的代码
问题描述
这是在 C 中使用环形缓冲区实现队列的程序的一部分。我不明白第 8-9 行。这条线到底是什么if(q->rear == q->max) q->rear = 0;
意思?
如果后方索引等于最大容量......然后将零分配给后方?T_T 请帮帮我!
int Enque(IntQueue* q,int x)
{
if (q->num >= q->max)
return -1;
else {
q->num++;
q->que[q->rear++] = x;
if(q->rear == q->max)
q->rear = 0;
return 0;
}
}
解决方案
q->que[]
是一个整数数组。通过在数组中指定它们的索引来访问单个数组q->que[]
整数元素,例如:q->que[n];
where n
is a value from 0
to (q->max - 1)
。
q->rear
表示数组的索引q->que[]
。的值q->rear
可以是从0
到的任何位置(q->max -1)
。因此,如果q->rear
曾经等于q->max
,它将表示超出q->que[]
数组末尾的索引,并且(作为循环队列)必须定位回数组的开头(q->que[0]
)。
因此,逻辑如下:
if (q->rear == q->max)
q->rear = 0;
推荐阅读
- r - 将列表合并到 R 中的一个列表中
- javascript - 测试库 React Native
- typescript - RXJS Angular - 使用 .subscribe 和 Observable 处理错误
- r - 在R中创建列联表
- javascript - 这里有什么问题?内部有三元的组件
- python - 如何在 Django Rest Framework 的视图集中添加对自定义操作的特定访问级别?
- c++ - 使用 Libtorch 1.5 和 C++ 中的优化器选项更新学习率
- excel - 根据另一张纸上的单元格值隐藏行(包括循环)
- python - Pandas 使列可点击和排序
- postgresql - 什么是 BigQuery 在 postgreSQL 中的“CREATE OR REPLACE TABLE”的等价物