SYBCom(CA) DS Practical Slip 18 Q.B

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;
}
Spread the love

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top