利用栈判断括号是否匹配
#include<iostream>
using namespace std;
#define MaxSize 100
// Define stack data structure
typedef char ElemType;
typedef struct node {
ElemType data[MaxSize];
int top;
} Stack;
// Initialize stack
void InitStack(Stack& S)
{
S.top = -1;
}
// Push element onto stack
bool Push(Stack& S, ElemType x)
{
if (S.top != MaxSize - 1) {
S.data[++S.top] = x;
return true;
}
return false;
}
// Pop element from stack
bool Pop(Stack& S, ElemType& x)
{
if (S.top != -1) {
x = S.data[S.top--];
return true;
}
return false;
}
// Print stack contents
void print(Stack S)
{
if (S.top == -1) return;
cout << "栈底:->";
for (int i = 0; i <= S.top; i++)
{
cout << S.data[i] << "-";
}
cout << "->栈顶\n";
}
// Check if brackets in a string are balanced
bool BracketsCheck(char* str) {
Stack S;
InitStack(S);
int i = 0;
while (str[i] != '\0')
{
switch (str[i]) {
// Left brackets push onto stack
case '(': Push(S, '('); break;
case '[': Push(S, '['); break;
case '{': Push(S, '{'); break;
// Right brackets check stack top
case ')': {
if (S.top == -1 || S.data[S.top] != '(') return false;
char temp; Pop(S, temp);
break;
}
case ']': {
if (S.top == -1 || S.data[S.top] != '[') return false;
char temp; Pop(S, temp);
break;
}
case '}': {
if (S.top == -1 || S.data[S.top] != '{') return false;
char temp; Pop(S, temp);
break;
}
default: break;
}
i++;
}
// Check if stack is empty after processing the string
if (S.top == -1) {
cout << "括号匹配" << endl;
return true;
} else {
cout << "括号不匹配" << endl;
return false;
}
}
int main()
{
char str[MaxSize];
cin.getline(str, MaxSize);
BracketsCheck(str);
return 0;
}