#include<iostream>
using namespace std;
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 10
typedef int Status;
typedef int SElemType;//给int类型取别称为SElemType
//顺序栈的定义
typedef struct
{
SElemType* base;
SElemType* top;
int stackssize;
}SqStack;
//初始化
Status Initstack(SqStack& S)
{//构造空栈S
S.base = new SElemType[MAXSIZE];//为顺序表动态分配最大容量
if (!S.base)exit(OVERFLOW);//存储分配失败
S.top = S.base;//top初始为base,空栈
S.stackssize = MAXSIZE;//栈的最大容量
return OK;
}
//入栈
Status Push(SqStack& S, SElemType e)
{//插入元素e为新的栈顶元素
if (S.top - S.base == S.stackssize)return ERROR;
*S.top++ = e;
return OK;
}
//出栈
Status Pop(SqStack& S, SElemType& e)
{//删除栈顶元素,用e返回
if (S.top == S.base)return ERROR;
e = *--S.top;
return OK;
}
//取栈顶元素
SElemType GetTop(SqStack S)
{
if (S.top != S.base)
return*(S.top - 1);
}
int main()
{
char ch;
int e;
SqStack S;
Initstack(S); //初始化一个栈,并用S保存其返回结果
int flag = 1;
cin >> ch;
while (ch != '#' && flag)
{
switch (ch)//[()]
{
case '[':
case '(':
Push(S, ch);
break;
case')':
if (!(S.base == S.top) && GetTop(S) == '(')
Pop(S, e);
else
flag = 0;
cout << "sucess";
break;
case']':
if (!(S.base == S.top) && GetTop(S) == '[')
Pop(S, e);
else
flag = 0;
cout << "sucess";
break;
}
cin >> ch;
}
if (!(S.base == S.top) && flag) {
//cout << "括号匹配成功!";
return OK;
}
else {
//cout << "括号匹配失败!";
return ERROR;
}
}
括号匹配的检验
最新推荐文章于 2024-06-16 22:47:03 发布