(一)代码分析
1.定义一个顺序栈
typedef struct
{
char data[Maxsize];
int top;
int len;
}sqstack;
2.顺序栈的初始化操作
void Initstack(sqstack*s)//初始化
{ (*s).top=-1;
(*s).len=0;
}
3.判断栈是否为空
int StackEmpty(sqstack s)
{if(s.top ==-1)
return 1;//栈空
return 0;//不空
}
4.进栈操作
int Push (sqstack *s,char x)
{
if ((*s).top ==Maxsize-1)
return 0;//栈满
(*s).data [++((*s).top)]=x;//入栈
(*s).len++;
}
5.出栈操作
int Pop(sqstack *s,char *x)//出栈
{if((*s).top==-1)
return 0;
*x=(*s).data[(*s).top--];
(*s).len--;
return 1;
}
6.括号匹配代码实现
int check(char str[],int len)
{sqstack s;
Initstack(&s);
int i=0;
for(i=0;i<len;i++)
{if(str[i]=='('||str[i]=='{'||str[i]=='[')
Push(&s,str[i]);//左括号入栈
else
{if(StackEmpty(s))
return 0;
char topElem;
Pop(&s,&topElem);//右括号出栈
if(str[i]==')'&&topElem!='(')
return 0;
if(str[i]=='}'&&topElem!='{')
return 0;
if(str[i]==']'&&topElem!='{')
return 0;
}
}
return StackEmpty(s);
}
(二)完整代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Maxsize 100
typedef struct
{
char data[Maxsize];
int top;
int len;
}sqstack;//定义一个顺序栈
void Initstack(sqstack*s)//初始化
{ (*s).top=-1;
(*s).len=0;
}
int StackEmpty(sqstack s)
{if(s.top ==-1)
return 1;//栈空
return 0;//不空
}
int Push (sqstack *s,char x)
{
if ((*s).top ==Maxsize-1)
return 0;//栈满
(*s).data [++((*s).top)]=x;//入栈
(*s).len++;
}
int Pop(sqstack *s,char *x)//出栈
{if((*s).top==-1)
return 0;
*x=(*s).data[(*s).top--];
(*s).len--;
return 1;
}
int check(char str[],int len)
{sqstack s;
Initstack(&s);
int i=0;
for(i=0;i<len;i++)
{if(str[i]=='('||str[i]=='{'||str[i]=='[')
Push(&s,str[i]);//左括号入栈
else
{if(StackEmpty(s))
return 0;
char topElem;
Pop(&s,&topElem);//右括号出栈
if(str[i]==')'&&topElem!='(')
return 0;
if(str[i]=='}'&&topElem!='{')
return 0;
if(str[i]==']'&&topElem!='{')
return 0;
}
}
return StackEmpty(s);
}
int main() {
printf("输入的字符只包括{} [] ()\n");
printf("请输入需要匹配的字符:\n");
char str[100];
gets(str);
int a;
a=check(str,strlen(str));
if(a==1)
printf("匹配成功");
else
printf("匹配失败");
return 0;
}