/** * 判断一个括号串中的括号是否为匹配。
* @param exp: 括号串 * @param n: 括号串的长度 */?Status?matchBracketSequence(char*?exp,?int n);
?有以下数据结构及其操作可用:
#define MAXSIZE?20?
#define INCREMENT?5?
typedef int Status;?
typedef char ElemType;?
typedef struct?{
?ElemType?*elem;?// 存储空间的基址?
int top;?// 栈顶元素的下一个位置,简称栈顶位标?
int size;?// 当前分配的存储容量?
int increment;?// 扩容时,增加的存储容量?
}?SqStack;?// 顺序栈?
// 初始化一个栈,size为栈的初始容量,inc为栈增容时的容量。一般而言,可令size为MAXSIZE,inc为INCREMENT?
Status?InitStack_Sq(SqStack?&S,?int size,?int inc);?// 销毁?
Status?DestroyStack_Sq(SqStack S);?//检查栈是否为空。如果为空,则返回TRUE,否则返回FALSE?Status?StackEmpty_Sq(SqStack S)?;?//将元素e进栈?Status?Push_Sq(SqStack?&S,?ElemType e)?;?//出栈,并且栈顶元素赋给e?Status?Pop_Sq(SqStack?&S,?ElemType?&e);?//将栈顶元素赋给e,但栈顶元素不出栈?Status?GetTop_Sq(SqStack&?S,?ElemType&?e);
#include "allinclude.h"
Status matchBracketSequence(char* exp, int n)
{ // Add your code here
SqStack S;
InitStack_Sq(S,20,5);
ElemType temp;
for(int i=0;i<n;i++)
{
switch(exp[i])
{
case '(' :
case '[' :
case '{' : {
Push_Sq(S,exp[i]);
break;
}
case ')' :
case ']' :
case '}' : {
if(StackEmpty_Sq(S)==true)
return false;
GetTop_Sq(S,temp);
if(temp=='(' && exp[i]==')' || temp=='{' && exp[i]=='}' || temp=='[' && exp[i]==']' )
Pop_Sq(S,temp);
}
}
}
if(StackEmpty_Sq(S))
return true;
return false;
}