您的位置:首页 > 其它

栈的顺序实现以及括号匹配判断程序

2009-03-01 13:09 441 查看
#define STACK_MAX_NUM 10

typedef struct tag_Stack_S
{
char StackData[STACK_MAX_NUM];
int top;
}Stack_S;

void Stack_Init(Stack_S *sl)
{
sl->top = -1;

}

//进栈

int Stack_In(Stack_S *sl, char Element)
{
if (sl->top == STACK_MAX_NUM - 1)
{
return T_ERR;
}

sl->top++;
sl->StackData[sl->top] = Element;

return T_OK;
}

//出栈

int Stack_Out(Stack_S *sl , char *Element)
{
if((sl->top == -1) || (NULL == Element))
{
return T_ERR;
}

*Element = sl->StackData[sl->top--];

return T_OK;
}

int Stack_Match(char *exps)
{
Stack_S stPoly;
int i = 0;
char Data = 0;

int nomatch = 0;

if(NULL == exps)
{
return T_ERR;
}

Stack_Init(&stPoly);

while((exps[i] != '/0') && (nomatch == 0))
{
switch(exps[i])
{
case '(':
case '{':
case '[':
Stack_In(&stPoly,exps[i]);
break;
case ')':
Stack_Out(&stPoly, &Data);
if(Data != '(')
{
nomatch = 1;
}
break;

case '}':
Stack_Out(&stPoly, &Data);
if(Data != '{')
{
nomatch = 1;
}
break;

case ']':
Stack_Out(&stPoly, &Data);
if(Data != '[')
{
nomatch = 1;
}

break;
default :
break;
}
i++;
}

if(nomatch == 0)
{
return T_OK;
}
else
{
return T_ERR;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: