#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE 1
#define Stack_Size 50
#define StackElementType char
//定义栈
typedef struct
{
StackElementType elem[Stack_Size];
int top;
}Stack;
//初始化
void InitStack(Stack *S)
{
S->top=-1;
}
//进栈
char Push(Stack *S,StackElementType x)
{
if(S->top==Stack_Size-1)
return(FALSE);
S->top++;
S->elem[S->top] = x;
return(TRUE);
}
//出栈
char Pop(Stack *S,StackElementType *x)
{
if(S->top==-1)
return(FALSE);
else
{
*x =S->elem[S->top];
S->top--;
return(TRUE);
}
}
//读取栈顶元素
char GetTop(Stack *S,StackElementType *x)
{
//StackElementType x
if(S->top==-1)
return(FALSE);
else
{
*x=S->elem[S->top];
return(TRUE);
}
}
//判断栈是否为空
bool IsEmpty(Stack *S)
{
return (S->top==-1);
}
//匹配
bool Match(char S,char x)
{
if(S== '(' && x==')')
return true;
else if(S== '[' && x==']')
return true;
else if(S== '{' && x=='}')
return true;
else
return false;
}
//括号匹配算法
void BracketMatch(char *str)
{
Stack 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]))
Pop(&S,&ch);
else
{
printf("\n对应的左右括号不匹配!");
return ;
}
}
}
}
if(IsEmpty(&S))
printf("\n括号匹配!");
else
printf("\n左括号多余!");
}
int main()
{
printf("姓名:XXX 学号:XXXXXXXXXXX\n");
char str[Stack_Size];
printf("请输入括号:\n");
gets(str);
Stack *q;
q=(Stack*)malloc(sizeof(Stack));
BracketMatch(str);
return 0;
}
使用栈检查括号匹配的检验
最新推荐文章于 2024-09-10 15:24:51 发布