यहां हम चर्चा करेंगे कि स्टैक का उपयोग करके बैलेंस्ड ब्रैकेट्स की जांच कैसे करें। हम न केवल ओपनिंग और क्लोजिंग ब्रैकेट्स की जांच करते हैं बल्कि ब्रैकेट्स के क्रम की भी जांच करते हैं। उदाहरण के लिए, हम कह सकते हैं कि एक्सप्रेशन "[{} () {()}]" सही है, लेकिन "{[}]" सही नहीं है।
इनपुट: ब्रैकेट्स के साथ एक्सप्रेशन "{()}[]"
आउटपुट: वे बैलेंस्ड हैं
एल्गोरिदम
चरण 1: ब्रैकेट्स रखने के लिए एक स्टैक परिभाषित करें
चरण 2: एक्सप्रेशन को बाएं से दाएं ट्रैवर्स करें
चरण 2.1: यदि कैरेक्टर ओपनिंग ब्रैकेट (, या { या [ है, तो इसे स्टैक में पुश करें
चरण 2.2: यदि कैरेक्टर क्लोजिंग ब्रैकेट ), } या ] है
तो स्टैक से पॉप करें, और यदि पॉप किया गया कैरेक्टर शुरुआती ब्रैकेट से मेल खाता है तो यह ठीक है। अन्यथा वे बैलेंस्ड नहीं हैं।
चरण 3: ट्रैवर्सल के बाद यदि स्टैक में शुरुआती ब्रैकेट मौजूद है तो यह बैलेंस्ड नहीं है।
उदाहरण कोड
#include <iostream>
#include <stack>
using namespace std;
bool isBalanced(string expr) {
stack s;
char ch;
for (int i = 0; i < expr.length(); i++) {
// एक्सप्रेशन में प्रत्येक कैरेक्टर के लिए, शर्तों की जांच करें
if (expr[i] == '(' || expr[i] == '[' || expr[i] == '{') {
// जब यह ओपनिंग ब्रैकेट हो, स्टैक में पुश करें
s.push(expr[i]);
continue;
}
if (s.empty())
// स्टैक खाली नहीं हो सकता क्योंकि यह ओपनिंग ब्रैकेट नहीं है, क्लोजिंग ब्रैकेट होना चाहिए
return false;
switch (expr[i]) {
case ')': // क्लोजिंग पैरेंथेसिस के लिए, पॉप करें और ब्रेसेस और स्क्वायर ब्रैकेट्स की जांच करें
ch = s.top();
s.pop();
if (ch == '{' || ch == '[')
return false;
break;
case '}': // क्लोजिंग ब्रेसेस के लिए, पॉप करें और पैरेंथेसिस और स्क्वायर ब्रैकेट्स की जांच करें
ch = s.top();
s.pop();
if (ch == '(' || ch == '[')
return false;
break;
case ']': // क्लोजिंग स्क्वायर ब्रैकेट के लिए, पॉप करें और ब्रेसेस और पैरेंथेसिस की जांच करें
ch = s.top();
s.pop();
if (ch == '(' || ch == '{')
return false;
break;
}
}
return (s.empty()); // जब स्टैक खाली हो, true लौटाएं
}
main() {
string expr = "[{}(){()}]";
if (isBalanced(expr))
cout << "Balanced";
else
cout << "Not Balanced";
}
आउटपुट
Balanced