#include <stdio.h>
#define bool char
#define true 1
#define false 0
#define stack_size 100
typedef char StackElemType;
typedef struct
{
StackElemType elem[stack_size];
int top;
}SeqStack;
void InitStack(SeqStack *S)
{
S->top=-1;
}
bool Push(SeqStack *S,StackElemType *e)
{
if(S->top >= stack_size-1)
{
printf("满栈");
return false;
}
S->elem[++ S->top]=*e;
return true;
}
bool Pop(SeqStack *S,StackElemType *e)
{
if(S->top==-1)
{
printf("空栈 error");
return false;
}
*e = S->elem[S->top--];
return true;
}
bool GetTop(SeqStack *S,StackElemType *e)
{
if(S->top==-1)
{
return false;
}
*e=S->elem[S->top];
return true;
}
bool IsEmpty(SeqStack *S)
{
/*
if(S->top==-1)
{
return true;
}
else
{
return false;
}*/
return S->top==-1;
}
bool Match(StackElemType *e1,StackElemType *e2)
{
if(*e1=='(' && *e2==')' || *e1=='[' && *e2==']' || *e1=='{' && *e2=='}')
{
return true;
}
return false;
}
void BracketMatch(char *str)
{
SeqStack S;
InitStack(&S);
int i;
char ch;
for(i=0;str[i]!='\0';++i)
{
//printf("%c ",str[i]);
switch(str[i])
{
case '(':
case '[':
case '{':
Push(&S,&str[i]);
break;
case ')':
case ']':
case '}':
if(IsEmpty(&S))
{
printf("\n右括号多余");
}
else
{
GetTop(&S,&ch);
if(Match(&ch,&str[i]))
{
Pop(&S,&ch);
}
else
{
printf("\n左右括号不匹配");
printf("ch:%c str[i]:%c ",ch,str[i]);
return;
}
}
}
}
if(IsEmpty(&S))
{
printf("括号匹配");
}
else
{
printf("括号不匹配");
}
}
int main()
{
char str1[100];
scanf("%s",str1);
/*
SeqStack S1;
InitStack(&S1);
*/
BracketMatch(str1);
return 0;
}
顺序栈 C语言练习
最新推荐文章于 2022-11-27 21:40:50 发布