#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{
char * top;
char * base;
}SqStack;
//栈的初始化
void InitStack(SqStack &s)
{
s.base=(char*)malloc(MAXSIZE* sizeof(char));
if(!s.base)
{
exit(0);
}
s.top=s.base;
}
//入栈
bool Push(SqStack &s,char c)
{
//判断是否栈满
if(s.top-s.base==MAXSIZE)
{
return false;
}
*s.top++=c;
//s.top++;
return true;
}
//出栈
bool Pop(SqStack &s, char &c)
{
//判断栈是否为空
if(s.top==s.base)
{
return false;
}
c=*--s.top;
return true;
}
//判断是否栈空
bool StackEmpty(SqStack s)
{
return s.top==s.base;
}
void DisStack(SqStack s)
{
char c;
while (!StackEmpty(s))
{
Pop(s,c);
printf("%c",c);
}
}
//获取头元素
char GetTop(SqStack s)
{
if(s.top!=s.base)
{
return *(s.top-1);
}
}
bool Matching()
{
SqStack s;
InitStack(s); //栈的初始化
int flag=1;
char ch,c;
scanf("%c", &ch);
while (ch!='#'&&flag)
{
switch (ch)
{
case '[':
Push(s,ch);
break;
case '(':
Push(s,ch);
break;
case ']':
if(!StackEmpty(s)&&GetTop(s)=='[')
{
Pop(s,c);
} else{
flag=0;
}
break;
case ')':
if(!StackEmpty(s)&&GetTop(s)=='(')
{
Pop(s,c);
} else{
flag=0;
}
break;
}
scanf("%c",&ch);
}
if(StackEmpty(s)&&flag) //匹配成功
{
return true;
} else{
return false;
}
}
int main() {
bool b;
b=Matching();
if(b== true)
{
printf("匹配成功!\n");
} else{
printf("匹配失败!\n");
}
return 0;
}
顺序栈--括号匹配的检验
最新推荐文章于 2022-10-22 17:05:17 发布