C проблема программирования очереди - PullRequest
1 голос
/ 21 августа 2010

Я изучаю очереди из книги. Автор объясняет операцию вставки элемента в очередь, используя следующий код.

#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, последняя позиция в массиве пуста. Так почему же это объясняется как Полный список ? Разве этот код не должен быть изменен так, чтобы он позволял заполнять последнюю позицию в массиве, или я упускаю что-то очень очевидное?

Спасибо.

Ответы [ 5 ]

5 голосов
/ 21 августа 2010

p[100] выделяет 100 слотов с индексами от 0 до 99. Нет позиции 100.

2 голосов
/ 21 августа 2010

Индексирование массива начинается с 0, поэтому для вас MAX == 100 у вас будет допустимое расположение массива в диапазоне от 0 до 99. Поэтому, когда spos == 99 означает, что последняя позиция в массиве доступна, и вам разрешено поместить что-то очередь, затем spos увеличивается и фактически «указывает» на недопустимое местоположение, то есть список заполнен, что на самом деле верно, поскольку вы уже заполнили 0–99 позиций в массиве.

2 голосов
/ 21 августа 2010

Я думаю, потому что p[100] - это недопустимый доступ, который вы можете сделать к вашему массиву.Последнее допустимое местоположение - p[99]

Кроме того, учитывая, что вы реализуете очередь , используя массив , никогда не путайте абстрактный тип данных с одной из его возможных реализаций

1 голос
/ 21 августа 2010

Индекс последнего элемента массива, если 99, а не 100.

Поэтому, когда spos = 100, очередь действительно заполнена.

0 голосов
/ 10 ноября 2014

Реализация очереди на языке C

http://www.csnotes32.com/2014/09/c-program-to-implement-queue-using-array.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...