#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;
}
Comments
Post a Comment