Write a program to reverse the elements of a queue (Use Static implementation of Queue)
#include <stdio.h>
#define MAX 100
// Queue structure
typedef struct {
int arr[MAX];
int front, rear;
} Queue;
// Stack structure
typedef struct {
int arr[MAX];
int top;
} Stack;
// Initialize queue
void initQueue(Queue *q) {
q->front = -1;
q->rear = -1;
}
// Check if queue is empty
int isQueueEmpty(Queue *q) {
return (q->front == -1 || q->front > q->rear);
}
// Insert into queue
void enqueue(Queue *q, int value) {
if (q->rear == MAX - 1) {
printf("Queue Overflow\n");
return;
}
if (q->front == -1)
q->front = 0;
q->arr[++q->rear] = value;
}
// Delete from queue
int dequeue(Queue *q) {
if (isQueueEmpty(q)) {
printf("Queue Underflow\n");
return -1;
}
return q->arr[q->front++];
}
// Initialize stack
void initStack(Stack *s) {
s->top = -1;
}
// Check if stack is empty
int isStackEmpty(Stack *s) {
return (s->top == -1);
}
// Push into stack
void push(Stack *s, int value) {
if (s->top == MAX - 1) {
printf("Stack Overflow\n");
return;
}
s->arr[++s->top] = value;
}
// Pop from stack
int pop(Stack *s) {
if (isStackEmpty(s)) {
printf("Stack Underflow\n");
return -1;
}
return s->arr[s->top--];
}
// Display queue
void display(Queue *q) {
if (isQueueEmpty(q)) {
printf("Queue is empty\n");
return;
}
for (int i = q->front; i <= q->rear; i++) {
printf("%d ", q->arr[i]);
}
printf("\n");
}
int main() {
Queue q;
Stack s;
int n, value;
initQueue(&q);
initStack(&s);
printf("Enter number of elements: ");
scanf("%d", &n);
printf("Enter elements:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &value);
enqueue(&q, value);
}
printf("Original Queue: ");
display(&q);
// Step 1: Dequeue all elements and push into stack
while (!isQueueEmpty(&q)) {
push(&s, dequeue(&q));
}
// Step 2: Pop from stack and enqueue back to queue
while (!isStackEmpty(&s)) {
enqueue(&q, pop(&s));
}
printf("Reversed Queue: ");
display(&q);
return 0;
}
