括号匹配,自定义栈SqStack判断一个中小括号组成的字符串中的括弧是否匹配的C语言代码怎么写
时间: 2024-05-16 14:15:01 浏览: 119
可以使用栈来实现括号匹配,以下是使用自定义栈SqStack判断一个中小括号组成的字符串中的括弧是否匹配的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 栈的最大容量
// 定义栈结构
typedef struct {
char data[MAXSIZE]; // 存储栈中元素
int top; // 栈顶指针
} SqStack;
// 初始化栈
void InitStack(SqStack *S) {
S->top = -1;
}
// 判断栈是否为空
int StackEmpty(SqStack *S) {
return (S->top == -1);
}
// 判断栈是否已满
int StackFull(SqStack *S) {
return (S->top == MAXSIZE - 1);
}
// 入栈
int Push(SqStack *S, char x) {
if (StackFull(S)) {
return 0; // 栈已满,无法入栈
}
S->top++;
S->data[S->top] = x;
return 1;
}
// 出栈
int Pop(SqStack *S, char *x) {
if (StackEmpty(S)) {
return 0; // 栈已空,无法出栈
}
*x = S->data[S->top];
S->top--;
return 1;
}
// 获取栈顶元素
int GetTop(SqStack *S, char *x) {
if (StackEmpty(S)) {
return 0; // 栈已空,无法获取栈顶元素
}
*x = S->data[S->top];
return 1;
}
// 判断两个字符是否匹配
int IsMatch(char left, char right) {
if (left == '(' && right == ')') {
return 1;
}
if (left == '[' && right == ']') {
return 1;
}
return 0;
}
// 判断括号是否匹配
int IsBracketMatch(char *str) {
SqStack S;
InitStack(&S);
char c;
while (*str) {
if (*str == '(' || *str == '[') { // 左括号入栈
Push(&S, *str);
} else if (*str == ')' || *str == ']') { // 右括号与栈顶元素匹配
if (StackEmpty(&S)) { // 栈已空,无法匹配
return 0;
}
GetTop(&S, &c); // 获取栈顶元素
if (IsMatch(c, *str)) { // 匹配成功,出栈
Pop(&S, &c);
} else { // 匹配失败
return 0;
}
}
str++;
}
if (StackEmpty(&S)) { // 栈为空,括号匹配成功
return 1;
} else { // 栈不为空,括号匹配失败
return 0;
}
}
int main() {
char str[MAXSIZE];
printf("请输入一个中小括号组成的字符串:");
scanf("%s", str);
if (IsBracketMatch(str)) {
printf("括号匹配成功!\n");
} else {
printf("括号匹配失败!\n");
}
return 0;
}
```
阅读全文