解题思路:
在表达式括号配对时返回true,否则返回false。设置一个链栈st,扫描表达式exp,遇到左括号时进栈,遇到右括号时若栈顶为左括号,则出栈,否则返回false。当表达式扫描完毕,栈为空时返回true,否则返回false。算法如下:
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
#define MaxSize 60
typedef char ElemType;
typedef struct {
ElemType data[MaxSize];
int top; //栈顶指针
}SqStack; //定义顺序栈类型
//初始化栈
void InitStack(SqStack *&s){
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
//销毁栈
void DestroyStack(SqStack *&s){
free(s);
}
//判空
bool StackEmpty(SqStack *s){
return(s->top==-1);
}
//进栈
bool Push(SqStack *&s,ElemType e){
if(s->top==MaxSize-1) //进栈判满
return false;
s->top++; //指针加一
s->data[s->top]=e;
return true;
}
//出栈
bool Pop(SqStack *&s,ElemType &e){
if(s->top==-1) //出栈判空
return false;
e=s->data[s->top]; //取栈顶