写一个顺序栈的括号匹配代码及其主函数
时间: 2023-12-01 09:13:12 浏览: 34
好的,以下是顺序栈的括号匹配代码及主函数:
```c++
#include <iostream>
#include <string>
using namespace std;
const int MAXSIZE = 100; // 定义栈的最大容量
// 定义顺序栈结构体
struct SeqStack {
char data[MAXSIZE];
int top;
};
// 初始化顺序栈
void InitStack(SeqStack &S) {
S.top = -1;
}
// 判断顺序栈是否为空
bool StackIsEmpty(SeqStack S) {
return S.top == -1;
}
// 判断顺序栈是否已满
bool StackIsFull(SeqStack S) {
return S.top == MAXSIZE - 1;
}
// 入栈操作
bool Push(SeqStack &S, char x) {
if (StackIsFull(S)) {
return false; // 栈已满,入栈失败
}
S.top++;
S.data[S.top] = x;
return true; // 入栈成功
}
// 出栈操作
bool Pop(SeqStack &S, char &x) {
if (StackIsEmpty(S)) {
return false; // 栈为空,出栈失败
}
x = S.data[S.top];
S.top--;
return true; // 出栈成功
}
// 获取栈顶元素
bool GetTop(SeqStack S, char &x) {
if (StackIsEmpty(S)) {
return false; // 栈为空,获取栈顶元素失败
}
x = S.data[S.top];
return true; // 获取栈顶元素成功
}
// 判断括号是否匹配
bool IsMatch(string str) {
SeqStack S;
InitStack(S);
for (int i = 0; i < str.length(); i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
Push(S, str[i]); // 左括号入栈
}
else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
if (StackIsEmpty(S)) {
return false; // 栈为空,右括号多余,不匹配
}
char top;
GetTop(S, top);
if ((top == '(' && str[i] == ')') || (top == '[' && str[i] == ']') || (top == '{' && str[i] == '}')) {
Pop(S, top); // 左右括号匹配,出栈
}
else {
return false; // 左右括号不匹配,不匹配
}
}
}
if (StackIsEmpty(S)) {
return true; // 最后栈为空,括号匹配
}
else {
return false; // 最后栈不为空,左括号多余,不匹配
}
}
// 主函数
int main() {
string str;
cout << "请输入一个字符串:" << endl;
cin >> str;
if (IsMatch(str)) {
cout << "括号匹配" << endl;
}
else {
cout << "括号不匹配" << endl;
}
return 0;
}
```
以上代码实现了顺序栈的括号匹配功能,主函数中通过调用 `IsMatch()` 函数实现对输入字符串的括号匹配判断。