#include <iostream> #include <string> using namespace std; #define SQSTACK_MAX_DEEP 100 // 栈最大深度 typedef int ElemType; struct SqStack { ElemType data[SQSTACK_MAX_DEEP]; int top; // top指针指向栈顶元素 }; void InitStack(SqStack &L) // 初始化 { L.top = -1; } int Push(SqStack &L, ElemType x) // 入栈 { if (L.top == SQSTACK_MAX_DEEP - 1) { // cout << "溢出(栈满)" << endl; return 1; } L.top++; L.data[L.top] = x; return 0; } int Pop(SqStack &L, ElemType &x) // 出栈 { if (L.top == -1) { // cout << "下溢(栈空)" << endl; return 1; } x = L.data[L.top]; L.top--; return 0; } int GetTop(SqStack &L, ElemType &x) // 取栈顶元素 { if (L.top == -1) { // cout << "栈空" << endl; return 1; } x = L.data[L.top]; return 0; } bool StackEmpty(SqStack &L) // 判断栈是否为空 { if (L.top == -1) { // cout << "栈空" << endl; return true; } return false; } int main() { // 建立顺序栈 SqStack S; // 初始化顺序栈 InitStack(S); string arr; // 输入的表达式 int tmp; cout << "请输入表达式:" << endl; cin >> arr; for (int i = 0; i < arr.length(); i++) { switch (arr[i]) { case '(': case '[': Push(S, arr[i]); break; case ')': if (StackEmpty(S) || GetTop(S, tmp), tmp != '(') { cout << "第" << i + 1 << "位的圆括号不配对!" << endl; return 0; } else { Pop(S, tmp); } break; case ']': if (StackEmpty(S) || GetTop(S, tmp), tmp != '[') { cout << "第" << i + 1 << "位的方括号不配对!" << endl; return 0; } else { Pop(S, tmp); } break; default: break; } } if (StackEmpty(S)) { cout << "正确配对!" << endl; } else { cout << "不配对!" << endl; } return 0; }写个注释
时间: 2024-03-06 19:51:03 浏览: 60
好的,下面是代码注释:
```c++
#include <iostream>
#include <string>
using namespace std;
#define SQSTACK_MAX_DEEP 100 // 栈最大深度
typedef int ElemType;
struct SqStack {
ElemType data[SQSTACK_MAX_DEEP]; // 栈数组
int top; // top指针指向栈顶元素
};
void InitStack(SqStack &L) // 初始化栈
{
L.top = -1; // top指针初始化为-1,表示栈为空
}
int Push(SqStack &L, ElemType x) // 入栈
{
if (L.top == SQSTACK_MAX_DEEP - 1) { // 栈满,无法继续入栈
return 1;
}
L.top++; // top指针加1
L.data[L.top] = x; // 将元素x入栈
return 0;
}
int Pop(SqStack &L, ElemType &x) // 出栈
{
if (L.top == -1) { // 栈空,无法出栈
return 1;
}
x = L.data[L.top]; // 将栈顶元素赋值给x
L.top--; // top指针减1
return 0;
}
int GetTop(SqStack &L, ElemType &x) // 取栈顶元素
{
if (L.top == -1) { // 栈空,无法取栈顶元素
return 1;
}
x = L.data[L.top]; // 将栈顶元素赋值给x
return 0;
}
bool StackEmpty(SqStack &L) // 判断栈是否为空
{
if (L.top == -1) { // top指针为-1,表示栈为空
return true;
}
return false;
}
int main() {
SqStack S; // 声明一个顺序栈
InitStack(S); // 初始化栈
string arr; // 输入的表达式
int tmp; // 用于存储栈顶元素
cout << "请输入表达式:" << endl;
cin >> arr; // 读取表达式
for (int i = 0; i < arr.length(); i++) { // 遍历表达式中的所有字符
switch (arr[i]) {
case '(': case '[': // 如果是左括号,则入栈
Push(S, arr[i]);
break;
case ')': // 如果是右圆括号,则判断与栈顶元素是否匹配,匹配则出栈
if (StackEmpty(S) || GetTop(S, tmp), tmp != '(') { // 如果栈为空或栈顶元素不是左圆括号,则不匹配
cout << "第" << i + 1 << "位的圆括号不配对!" << endl;
return 0;
} else { // 否则匹配,出栈
Pop(S, tmp);
}
break;
case ']': // 如果是右方括号,则判断与栈顶元素是否匹配,匹配则出栈
if (StackEmpty(S) || GetTop(S, tmp), tmp != '[') { // 如果栈为空或栈顶元素不是左方括号,则不匹配
cout << "第" << i + 1 << "位的方括号不配对!" << endl;
return 0;
} else { // 否则匹配,出栈
Pop(S, tmp);
}
break;
default:
break;
}
}
if (StackEmpty(S)) { // 如果栈为空,则说明所有括号都匹配上了
cout << "正确配对!" << endl;
} else { // 否则有括号没有匹配上
cout << "不配对!" << endl;
}
return 0;
}
```
这段代码实现了输入一个表达式,判断其中的圆括号和方括号是否配对。其中,使用了顺序栈来存储左括号,每当遇到一个右括号时,就从栈顶取出一个元素,并判断是否与当前右括号匹配。如果匹配,则出栈;否则,说明括号不配对,输出错误信息。最后,如果栈为空,则说明所有括号都匹配上了,输出正确信息;否则,说明有括号没有匹配上,输出错误信息。
阅读全文