Implement a program to check for balanced parentheses using a stack in C

 #include <stdio.h>

#include <stdlib.h>


// Stack Node

struct StackNode {

    char data;

    struct StackNode* next;

};


// Push to stack

void push(struct StackNode** top, char data) {

    struct StackNode* new_node = (struct StackNode*)malloc(sizeof(struct StackNode));

    new_node->data = data;

    new_node->next = *top;

    *top = new_node;

}


// Pop from stack

char pop(struct StackNode** top) {

    if (*top == NULL) return '\0'; // stack underflow

    struct StackNode* temp = *top;

    char popped = temp->data;

    *top = temp->next;

    free(temp);

    return popped;

}


// Peek at top element

char peek(struct StackNode* top) {

    if (top == NULL) return '\0';

    return top->data;

}


// Check for matching pair

int isMatchingPair(char opening, char closing) {

    return (opening == '(' && closing == ')') ||

           (opening == '{' && closing == '}') ||

           (opening == '[' && closing == ']');

}


// Function to check balanced parentheses

int isBalanced(const char* expr) {

    struct StackNode* stack = NULL;


    for (int i = 0; expr[i] != '\0'; i++) {

        char ch = expr[i];


        if (ch == '(' || ch == '{' || ch == '[') {

            push(&stack, ch);

        } else if (ch == ')' || ch == '}' || ch == ']') {

            if (stack == NULL || !isMatchingPair(pop(&stack), ch)) {

                return 0; // Not balanced

            }

        }

    }


    // If stack is empty, it's balanced

    return stack == NULL;

}


// Driver code

int main() {

    char expression[100];


    printf("Enter an expression: ");

    scanf("%s", expression);


    if (isBalanced(expression))

        printf("Balanced\n");

    else

        printf("Not Balanced\n");


    return 0;

}

Output:




Comments