Nederlandse leereditie
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 compilerVerwacht 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.