C queues
Created By: chatGPT
C Queues are linear data structures that operate in a First-In-First-Out (FIFO) manner. This means elements are added at the rear and removed from the front. Queues are widely used in various applications such as job scheduling and handling requests in print spooling. Below, we'll implement a basic queue using an array in C.
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
typedef struct Queue {
int items[MAX];
int front;
int rear;
} Queue;
Queue* createQueue() {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->front = -1;
q->rear = -1;
return q;
}
int isFull(Queue* q) {
return q->rear == MAX - 1;
}
int isEmpty(Queue* q) {
return q->front == -1 || q->front > q->rear;
}
void enqueue(Queue* q, int value) {
if (isFull(q)) {
printf("Queue is full!\n");
return;
}
if (isEmpty(q)) {
q->front = 0;
}
q->rear++;
q->items[q->rear] = value;
}
int dequeue(Queue* q) {
if (isEmpty(q)) {
printf("Queue is empty!\n");
return -1;
}
int item = q->items[q->front];
q->front++;
return item;
}
void display(Queue* q) {
if (isEmpty(q)) {
printf("Queue is empty!\n");
return;
}
printf("Queue: ");
for (int i = q->front; i <= q->rear; i++) {
printf("%d ", q->items[i]);
}
printf("\n");
}
int main() {
Queue* q = createQueue();
enqueue(q, 10);
enqueue(q, 20);
enqueue(q, 30);
display(q);
printf("Dequeued: %d\n", dequeue(q));
display(q);
free(q);
return 0;
}
Key Operations in a queue include:
- Enqueue: Adding an element to the end of the queue.
- Dequeue: Removing an element from the front of the queue.
- Display: Viewing all elements in the queue without removing them.
// In the main function, you can test other operations like enqueueing more elements
// or dequeuing multiple times to see the queue functionality.
int main() {
Queue* q = createQueue();
enqueue(q, 10);
enqueue(q, 20);
enqueue(q, 30);
display(q);
printf("Dequeued: %d\n", dequeue(q));
display(q);
enqueue(q, 40);
enqueue(q, 50);
enqueue(q, 60); // Will indicate the queue is full
display(q);
while (!isEmpty(q)) {
printf("Dequeued: %d\n", dequeue(q));
}
display(q); // Will show that the queue is empty
free(q);
return 0;
}