Implement a stack or queue to perform comparison and check for symmetry in C

#include <stdio.h>
#include <string.h>
#define MAX 100

// Stack structure
typedef struct {
    char data[MAX];
    int top;
} Stack;

// Initialize stack
void init(Stack *s) {
    s->top = -1;
}

// Check if stack is empty
int isEmpty(Stack *s) {
    return s->top == -1;
}

// Check if stack is full
int isFull(Stack *s) {
    return s->top == MAX - 1;
}

// Push element to stack
void push(Stack *s, char ch) {
    if (isFull(s)) {
        printf("Stack is full.\n");
        return;
    }
    s->data[++(s->top)] = ch;
}

// Pop element from stack
char pop(Stack *s) {
    if (isEmpty(s)) {
        printf("Stack is empty.\n");
        return '\0';
    }
    return s->data[(s->top)--];
}

// Check symmetry using stack
void checkSymmetry(char str[]) {
    Stack s;
    init(&s);
    
    int len = strlen(str);
    int i;
    
    // Push first half to stack
    for (i = 0; i < len / 2; i++) {
        push(&s, str[i]);
    }

    // If length is odd, skip middle character
    if (len % 2 != 0) {
        i++;
    }

    // Compare second half with stack
    while (str[i] != '\0') {
        char ch = pop(&s);
        if (ch != str[i]) {
            printf("The string '%s' is NOT symmetric.\n", str);
            return;
        }
        i++;
    }

    printf("The string '%s' is symmetric.\n", str);
}

int main() {
    char str1[MAX];

    printf("Enter a string to check symmetry: ");
    scanf("%s", str1);

    checkSymmetry(str1);

    return 0;
}

Output:






Comments