【发布时间】:2010-08-21 11:10:07
【问题描述】:
我正在从一本书中学习队列。作者使用以下代码解释了在队列中插入元素的操作。
#define MAX 100
char *p[MAX];
int spos = 0; // spos: holds the index of the **next free** storage location
int rpos = 0;// rpos: holds the index of the next item to retrieve
void qstore(char *q)
{
if(spos==MAX) {
printf("List Full\n");
return;
}
p[spos] = q;
spos++;
}
所以根据上面的代码,如果 spos=100 即数组中的最后一个元素,则队列已满。现在,由于 spos 保存了 下一个空闲 存储位置的索引,那么当 spos=100 时,数组中的最后一个位置为空。那么为什么它被解释为List full呢?不应该修改这段代码,以便填充数组中的最后一个位置,还是我遗漏了一些非常明显的东西?
谢谢。
【问题讨论】:
-
哈!我想我现在明白了。由于数组的大小是 100,那么数组的最后一个元素实际上是 p[99] 所以 spos=100 表示队列已满。如此简单而常规的概念,我对此感到困惑。 拍拍他的头,然后自言自语地走开
-
谢谢大家。我不知道我怎么错过了这一点。可怜的我(:
-
停止阅读“火影忍者”并阅读更多代码:P
-
与问题完全没有关系,但是为什么代码示例的作者使用了两个不同的索引变量(
spos,rpos)?似乎最好只需要一个。