Method 1
#include <stdio.h>
#include <string.h>
#define MAX 100
// Global variables for stack
char stack[MAX];
int top;
// Initialize the stack
void initStack() {
top = -1;
}
// Push an element onto the stack
void push(char item) {
if (top == (MAX - 1)) {
printf("Stack is Full\n");
} else {
stack[++top] = item; // Increment first, then add the item
}
}
// Pop an element from the stack
void pop() {
if (top == -1) {
printf("Stack underflow! Cannot pop\n");
} else {
--top; // Decrement the top
}
}
// Check if the stack is empty
int isEmpty() {
return top == -1;
}
// Check the top element of the stack
char peek() {
if (!isEmpty()) {
return stack[top];
}
return '\0'; // Return null character if stack is empty
}
// Function to check if parentheses in an expression are balanced
int Balanced(char expression[]) {
initStack(); // Initialize the stack
for (int i = 0; i < strlen(expression); i++) {
char ch = expression[i];
switch (ch) {
// Push opening brackets onto the stack
case '(':
case '{':
case '[':
push(ch);
break;
// Check for matching opening bracket
case ')':
if (isEmpty() || peek() != '(')
return 0;
pop();
break;
case '}':
if (isEmpty() || peek() != '{')
return 0;
pop();
break;
case ']':
if (isEmpty() || peek() != '[')
return 0;
pop();
break;
}
}
// If the stack is empty, all brackets were matched
return isEmpty();
}
int main() {
char expression[MAX];
// Input the expression
printf("Enter an expression: ");
scanf("%s", expression);
// Check if the parentheses are balanced
if (Balanced(expression)) {
printf("Parentheses are balanced.\n");
} else {
printf("Parentheses are not balanced.\n");
}
return 0;
}
Method2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
struct stack {
char st[MAX];
int top;
}s;
// Initialize the stack
void initStack() {
s.top = -1;
}
// Push an element onto the stack
void push(char item) {
if (s.top == (MAX - 1)) {
printf("Stack is Full\n");
} else {
s.st[++s.top] = item; // Increment first, then add the item
}
}
// Pop an element from the stack
void pop() {
if (s.top == -1) {
printf("Stack underflow! Cannot pop\n");
} else {
--s.top; // Decrement the top
}
}
// Check if two characters are a matching pair of parentheses
int checkPair(char val1, char val2) {
return ((val1 == '(' && val2 == ')') ||
(val1 == '[' && val2 == ']') ||
(val1 == '{' && val2 == '}'));
}
// Check if the stack is empty
int isEmpty() {
return s.top == -1;
}
// Function to check if parentheses in an expression are balanced using switch-case
int checkBalanced(char expression[], int len) {
initStack(); // Initialize the stack
// Traverse the expression using a for loop
for (int i = 0; i < len; i++) {
char ch = expression[i];
// Use switch-case to handle different characters
switch (ch) {
// If an opening bracket is found, push it onto the stack
case '(':
case '{':
case '[':
push(ch);
break;
// If a closing bracket is found, check for a matching opening bracket
case ')':
case '}':
case ']':
if (isEmpty() || !checkPair(s.st[s.top], ch)) {
return 0; // Not balanced if no matching opening bracket
} else {
pop(); // Pop the matched opening bracket
}
break;
}
}
// If the stack is empty, the parentheses were balanced
return isEmpty();
}
int main() {
char expression[MAX];
// Input the expression
printf("Enter an expression: ");
scanf("%s", expression);
char len = strlen(expression); // Get the length of the expression u can use int len
// Check if the parentheses are balanced
if (checkBalanced(expression, len)) {
printf("Parentheses are balanced.\n");
} else {
printf("Parentheses are not balanced.\n");
}
return 0;
}