栈的应用之括号匹配:
(1)遇到“【、(、{”入栈;
(2)遇到“】、)、}”和栈顶元素比较是否匹配;
匹配则删除栈顶元素;
不匹配则返回
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define ElemType char
#define maxsize 20
typedef struct
{
ElemType string[maxsize];
int top;
}stack;
//------------匹配函数--------
bool Judge(char* ss,int n)
{
stack s;
s.top=-1;
s.string[++s.top]='#';
int i=0;
while(n>0)
{
switch(ss[i])
{
case '[':
s.string[++s.top]='[';
i++;
break;
case '(':
s.string[++s.top]='(';
i++;
break;
case '{':
s.string[++s.top]='{';
i++;
break;
case ']':
if(s.string[s.top]=='[')
{
s.top--;
i++;
break;
}
else
return false;
case ')':
if(s.string[s.top]=='(')
{
s.top--;
i++;
break;
}
else
return false;
case '}':
if(s.string[s.top]=='{')
{
s.top--;
i++;
break;
}
else
return false;
case '#':
if(s.string[s.top]=='#')
return true;
else
return false;
default:
i++; //其他字符直接略过
}//switch
n--;
}//while
//exit(0);
}//judge
int main()
{
char s[]="{[qwe(qwertyuio)[q]]}#";
if(Judge(s,22)==true)
printf("括号匹配\n");
else
printf("括号不匹配!\n");
char ss[]="{wwe(1deffffffga[d]df)]}#";
if(Judge(ss,25)==true)
printf("括号匹配!\n");
else
printf("括号不匹配!\n");
}
运行结果: