现在的位置: 首页 > 综合 > 正文

Stack的应用——符号匹配问题

2013年08月08日 ⁄ 综合 ⁄ 共 1164字 ⁄ 字号 评论关闭
#include
#include
#include
#include
#include

#define TRUE 1
#define FALSE 0
#define Stack_Size 50
typedef struct
{
int elem[Stack_Size];
int top;
}SeqStack;

int Match(char a,char b)
{
if((a=='{' && b=='}')||(a=='(' && b==')')||(a=='[' && b==']'))
{
return(TRUE);
}
else
return(FALSE);
}

void InitStack(SeqStack *S)
{
S->top=-1;
}

int IsEmpty(SeqStack *S)
{
return(S->top==-1?TRUE:FALSE);
}

int IsFull(SeqStack *S)
{
return(S->top==Stack_Size-1?TRUE:FALSE);
}

int Push(SeqStack *S,char x)
{
if(S->top==Stack_Size-1)return(FALSE);
S->top++;
S->elem[S->top]=x;
return(TRUE);
}

int Pop(SeqStack *S,char *x)
{
if(S->top==-1)
return(FALSE);
else
{
*x=S->elem[S->top];
S->top--;
return(TRUE);
}
}

int GetTop(SeqStack *S,char *x)
{
if(S->top==-1)
return(FALSE);
else
{
*x=S->elem[S->top];
return(TRUE);
}
}

void BracketMatch(char *str)
{
SeqStack S;
int i;
char ch;
InitStack(&S);
for(i=0;str[i]!='/0';i++)
{
switch(str[i])
{
case '(':
case '[':
case '{':
Push(&S,str[i]);
break;
case ')':
case ']':
case '}':
if(IsEmpty(&S))
{
printf("/n右括号多余!");
return;
}
else
{
GetTop(&S,&ch);
if(Match(ch,str[i])==1)
Pop(&S,&ch);
else
{
printf("/n对应的左右括号不同类!");
return;
}
}
}
}
if(IsEmpty(&S))
printf("/n 括号匹配");
else
printf("/n左括号多余!");
}

int main()
{

int i;
i=0;
char str[50];
printf("请输入括号/n");

scanf("%s",str);
BracketMatch(str);

return 0;

}

抱歉!评论已关闭.