我正在从一本书上学习排队。作者解释了使用以下代码在队列中插入元素的操作。

#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时,数组中的最后一个位置为空那么为什么它被解释为列表已满这段代码不应该修改为允许数组中的最后一个位置被填充吗?还是我遗漏了一些非常明显的东西?
谢谢。

最佳答案

数组索引从0开始,因此对于max==100,您将在0到99之间有有效的数组位置。因此,当spos==99表示数组中的最后一个位置可用,并且允许您在队列中放置某些内容时,spos将递增,并实际“指向”无效位置,这意味着列表已满,这实际上是真的,因为您已经填充了数组中的0-99个位置。

关于c - C队列编程问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3537391/

10-13 04:55