目录
•栈的括号匹配
栈的相关操作参考前面的博客 《栈的基本操作》,这里用的是顺序栈
#include <stdio.h>
#include <stdbool.h>
#define MaxSize 10
#define ElemType char
typedef struct {
ElemType data[MaxSize]; //静态数组存放栈中的元素
int top; //栈顶指针,指示当前栈顶元素的位置(从0开始的数组下标)
} SqStack;
void InitStack(SqStack &S); //栈的初始化
bool Push(SqStack &S, ElemType e); //入栈
bool StackEmpty(SqStack S); //判空
bool Pop(SqStack &S, ElemType &x); //出栈,返回值为x
int main()
{
SqStack S;
InitStack(S); //初始化栈
char str[8] = {'(', '(', '[', ']', '[', ']', ')' , ']'}; //括号数组
char e; //存放栈顶元素
for (int i = 0; i < 8; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
//左括号入栈
Push(S, str[i]);
} else {
//右括号则进行判断
if (StackEmpty(S)) {
//栈空,则匹配失败
printf("\n匹配失败,右括号多余!");
return 0;
}
Pop(S, e); //出栈
//匹配各个括号
switch (e) {
case '(' :
if (str[i] != ')'){
printf("\n匹配失败,括号不同!");
return 0;
}
break;
case '[' :
if (str[i] != ']'){
printf("\n匹配失败,括号不同!");
return 0;
}
break;
case '{' :
if (str[i] != '}'){
printf("\n匹配失败,括号不同!");
return 0;
}
break;
default:
break;
}
}
}
//右括号匹配玩,验证是否还有左括号
if (StackEmpty(S)) {
printf("\n配对成功!");
} else {
printf("\n匹配失败,左括号多余!");
}
return 0;
}