Online C Compiler
Openen in de compiler

Nederlandse leereditie

Wachtrij in C: FIFO-structuur

Behoud aankomstvolgorde en onderscheid een volle van een lege wachtrij.

Openen in de compiler

Wachtrij in C: FIFO-structuur
Behoud aankomstvolgorde en onderscheid een volle van een lege wachtrij.

Een wachtrij geeft elementen in aankomstvolgorde terug. enqueue voegt achteraan toe en dequeue verwijdert vooraan. Onderscheid leeg en vol duidelijk van een geldige index.

Een ringbuffer hergebruikt vrijgekomen posities door indices naar het begin terug te laten lopen. Een teller of gereserveerde plaats onderscheidt vol en leeg. Een lineaire wachtrij kan het einde bereiken terwijl vooraan ruimte vrij is.

Controleer capaciteit en toestand vóór elke bewerking. Test een geval dat voorbij het buffereinde loopt en controleer of de aankomstvolgorde behouden blijft.

Broncode

#include <stdio.h>
#define SIZE 5

typedef struct {
    int items[SIZE];
    int front;
    int rear;
} Queue;

void initQueue(Queue *q) {
    q->front = -1;
    q->rear = -1;
}

int isFull(Queue *q) { return q->rear == SIZE - 1; }
int isEmpty(Queue *q) { return q->front == -1 || q->front > q->rear; }

void enqueue(Queue *q, int val) {
    if (isFull(q)) {
        printf("Queue Full!\n");
        return;
    }
    if (q->front == -1) q->front = 0;
    q->items[++(q->rear)] = val;
}

int dequeue(Queue *q) {
    if (isEmpty(q)) {
        printf("Queue Empty!\n");
        return -1;
    }
    return q->items[(q->front)++];
}

int main() {
    Queue q;
    initQueue(&q);
    enqueue(&q, 100);
    enqueue(&q, 200);
    enqueue(&q, 300);

    printf("Dequeued: %d\n", dequeue(&q));
    printf("Dequeued: %d\n", dequeue(&q));
    return 0;
}
Openen in de compiler

Verwacht resultaat

Dequeued: 100
Dequeued: 200

Veelgestelde vragen

Waarom blijven code en sommige resultaten Engels?

C-sleutelwoorden, namen, programmacommentaar en verwachte uitvoer blijven gelijk aan het origineel om uitvoerbare code en consistente tests te behouden. Uitleg en instructies zijn vertaald.