Круговая Очередь. Проверка, заполнена ли она или нет - PullRequest
0 голосов
/ 06 февраля 2020

У меня проблема с проверкой, заполнена ли моя круговая очередь или нет. Максимальный размер очереди установлен на 5. Однако после добавления 4-х элементов я не могу добавить пятый элемент. Я застрял.

Консольный вывод

void init (struct data* ptr) {
    ptr->rear = 0;
    ptr->front = 0;
}

void display (struct data* ptr) {
    if (empty(ptr)) {
        printf("\nNo data to display. The queue is EMPTY.\n");
    } else if (ptr->rear > ptr->front) {
        for (int i = ptr->front; i < ptr->rear; i++) {
            printf ("%d ", ptr->data[i]);
        }
    } else {
        for (int i = 0; i < ptr->rear; i++) {
            printf("%d ", ptr->data[i]);
        }
        for (int i = ptr->front; i < MAX; i++) {
            printf("%d ", ptr->data[i]);
        }
    }
    printf("\n");
}

bool empty (struct data* ptr) {
    if (ptr->rear == ptr->front) {
        return true;
    } else {
        return false;
    }
}

void enQueue (struct data* ptr, int input) {
    int nR = (ptr->rear + 1) % MAX;
    if (nR == ptr->front) {
        printf("\nQueue is FULL.\n\n");
    } else {
        ptr->data[ptr->rear] = input;
        ptr->rear = nR;
        printf("\nElement %d is inserted.\n\n", input);
    }
}

1 Ответ

3 голосов
/ 06 февраля 2020

Ваша очередь имеет пять элементов, и задняя часть может указывать на любой из них. Таким образом, фронт также может указывать на любой из пяти элементов и, таким образом, указывать пять состояний. Но если вы хотите, чтобы очередь содержала 0,1,2,3,4 или 5 элементов, это шесть разных состояний, чтобы различать guish. Вы пытаетесь поместить 6 голубей в 5 ям.

Чтобы круговая очередь работала, у вас есть три варианта: (1) добавить флаг «пусто» или «заполнен» для различения guish между этими двумя государствами; (2) добавить «счетчик заполнения», который также может использоваться для этой цели; или (3) смириться с тем, что никогда не помещаешь больше, чем N-1 элементов в свою очередь размера N.

...