栈的数据结构
typedef struct
{
int top;
char *data;
}SqStack;
栈初始化
void InitStack(SqStack *S)
{
S->top=-1;
S->data=new char[MaxSize-1];
for(int i=0;i<MaxSize-1;i++)
{
S->data[i]=-1;
}
}
判断栈空
bool IsEmpty(SqStack S)
{
if(S.top==-1)
return true;
else
return false;
}
判断栈满
bool IsFull(SqStack S)
{
if(S.top==MaxSize-1)
return true;
else
return false;
}
获取栈顶元素
char GetTopElem(SqStack S)
{
if(IsEmpty(S))
return NULL;
else
return S.data[S.top];
}
压栈
bool PushStack(SqStack *S,char e)
{
if(IsFull(*S))return false;
S->top++;
S->data[S->top]=e;
return true;
}
退栈
bool PopStack(SqStack *S,char *e)
{
if(IsEmpty(*S))return false;
*e=S->data[S->top];
S->top--;
return true;
}
判断元素是否在数组中
bool IndexOf(char str[],char x)
{
int len=strlen(str);
for(int i=0;i<len;i++)
{
if(str[i]==x)
return true;
}
return false;
}
左右括号匹配
char MathRightResponding(char x)
{
char result;
switch(x)
{
case '{':result='}';break;
case '[':result=']';break;
case '(':result=')';break;
default: result=' ';
}
return result;
}
括号匹配
bool IsMatchParen(char str[])
{
SqStack S;
InitStack(&S);
char leftParen[]="{[(";
int len=strlen(str);
for(int i=0;i<len;i++)
{
if(IndexOf(leftParen,str[i]))
PushStack(&S,str[i]);
else{
if(!IsEmpty(S))
{
char top=GetTopElem(S);
char e;
if(MathRightResponding(top)==str[i])
PopStack(&S,&e);
else
return false;
}else
return false;
}
}
if(!IsEmpty(S))
return false;
return true;
}
测试数据
int main(int argc, char* argv[])
{
char str_leftmiss[]="{(())]}";
printf("输入字符串:%s\n",str_leftmiss);
bool result_leftmiss=IsMatchParen(str_leftmiss);
printf("括号匹配结果:%d\n",result_leftmiss);
char str_rightmiss[]="{(())[}";
printf("输入字符串:%s\n",str_rightmiss);
bool result_rightmiss=IsMatchParen(str_rightmiss);
printf("括号匹配结果:%d\n",result_rightmiss);
char str_miss[]="{(())[)}";
printf("输入字符串:%s\n",str_miss);
bool result_miss=IsMatchParen(str_miss);
printf("括号匹配结果:%d\n",result_miss);
char str_success[]="{(())[]}";
printf("输入字符串:%s\n",str_success);
bool result_success=IsMatchParen(str_success);
printf("括号匹配结果:%d\n",result_success);
return 0;
}
测试结果
输入字符串:{(())]}
括号匹配结果:0
输入字符串:{(())[}
括号匹配结果:0
输入字符串:{(())[)}
括号匹配结果:0
输入字符串:{(())[]}
括号匹配结果:1