#include<stdio.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef char SElemType;
#define MAXSIZE 100
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;//栈的结构
//初始化栈
Status InitStack(SqStack &S)
{
S.base = new SElemType[MAXSIZE];
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//入栈
Status Push(SqStack &S, SElemType e)
{
if (S.top - S.base == S.stacksize) // 栈满
return ERROR;
*S.top++ = e;
return OK;
}
//出栈
Status Pop(SqStack &S, SElemType &e)
{
if (S.top == S.base) // 栈空
return ERROR;
e = *--S.top;
return OK;
}
//判断的核心算法
int IsBracket(char *exp)//借助栈判断括号是否匹配,成功,返回1,否则返回0
{
SqStack S;
InitStack(S);
bool flag = true;
int i = 0;
char ch = exp[i], ch2;
while ((ch != '\0') && flag) //回车换行符
{
switch (ch)
{
case '(':
case '[':
case '{':
Push(S, ch);
break;
case ')':
Pop(S, ch2);
if (ch2 != '(')
flag = false;
break;
case ']':
Pop(S, ch2);
if (ch2 != '[')
flag = false;
break;
case '}':
Pop(S, ch2);
if (ch2 != '{')
flag = false;
break;
default:
break;
}
i++;
ch = exp[i];
}
if (S.top == S.base && flag)
return 1;
else
{
return 0;
}
}
int main()
{
char s[30];
scanf("%s", s);//从键盘输入一串字符串
printf("%d\n", IsBracket(s));
}
c语言实现--数据结构,栈的应用,括号的匹配问题
最新推荐文章于 2022-04-18 06:28:49 发布