王道408 数据结构括号匹配
由于不会用scanf和while来读写括号直接就定义字符数组了
#define MaxSize 50 //定义最大个数
#pragma warning(disable : 4996)
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
typedef struct {
int data[MaxSize]; //存放栈中元素
int top; //栈顶知指针
}SqStack;
// 初始化栈顶指针
void InitStack(SqStack &S) {
S.top = -1;
}
//判断栈空
bool StackEmpty(SqStack S) {
if (S.top == -1) {//栈空
return true;
}
else { //不空
return false;
}
}
//进栈
bool Push(SqStack &S, char x) {
if (S.top == MaxSize - 1) {//栈满报错
return false;
}
S.data[++S.top] = x; //指针+1,在入栈
//等价写法
//S.top=S.top+1
//S.data[S.top] = x
return true;
}
//出栈
bool Pop(SqStack &S, char &x) {
if (S.top == -1) { // 栈空报错
return false;
}
x = S.data[S.top--];//先出栈,指针再-1
return true;
}
//获得栈顶元素
bool GetTop(SqStack &S, char &x) {
if (S.top == -1) { //栈空报错
return false;
}
x = S.data[S.top];//x记录栈顶元素
return true;
}
bool kuohaoCheck(char str[], int length) {
SqStack S;
InitStack(S);//初始化一个栈
for (int i = 0;i < length;i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
Push(S, str[i]); //扫描左括号,入栈
}
else {
if (StackEmpty(S)) {// 扫描到右括号,且当前为栈空
printf("匹配失败");
return false;
}
char topElem;
Pop(S, topElem);//栈顶元素出栈
if (str[i] == '('&&topElem != ')') {//判断括号是否相等
printf("匹配失败");
return false;
}
if (str[i] == '{'&&topElem != '}') {
printf("匹配失败");
return false;
}
if (str[i] == '['&&topElem != ']') {
printf("匹配失败");
return false;
}
}
}
if (StackEmpty(S)) {
printf("匹配成功");
}
else {
printf("匹配失败");
}
//所有括号匹配完成后,栈空说明成功
}
int main() {
int i = 0;
char str[MaxSize] = { '(', '(', '(', ')', ')', ')','{','}' };
kuohaoCheck(str, 8);
}
运行结果