决断朝气蓬勃组括号是或不是相称

#include <stdio.h>

#define Stack_Size 100

typedef int StackElemType;

//定义栈的架构体 

typedef struct

{

StackElemType elem[Stack_Size];

int top;

}SeqStack;

//评释函数 

void InitStack(SeqStack *s);

void Push(SeqStack *s,StackElemType x);

int Pop(SeqStack *s);

int IsEmpty(SeqStack *s);

int GetTop(SeqStack *s);

void BracketMatch(char *str);

int Match(char left,char right);

int main()

{

char str[]={“]{[]}]”};//定义字符串 

BracketMatch(&str[0]卡塔尔国;//传首地址 BracketMatch(strState of Qatar

return 0;

}

//开头化栈 

void InitStack(SeqStack *s)

{

s->top=-1;

}

//进栈 

void Push(SeqStack *s,StackElemType x)

{

if(s->top==Stack_Size)

printf(“栈已满n”);

else

s->top++;

s->elem[s->top]=x;

 }

}

//出栈 

int Pop(SeqStack *s)

{

int a;

a=s->elem[s->top];

s->top–;

return a; 

}

//判空 

int IsEmpty(SeqStack *s)

{

if(s->top==-1)

return 1;

else

return 0; 

}

//获取栈顶成分 

int GetTop(SeqStack *s)

{

return s->elem[s->top];

}

//看左右括号是不是相配 

int Match(char left,char right)

{

switch(left)

{

case ‘[‘:

left=’]’;

break;

case ‘{‘:

left=’}’;

break;

case ‘(‘:

       left=’)’;

break;

default:

printf(“输入错误n”);

break; 

}

if(left==right)

return 1;

else

return 0; 

//括号相称函数  在该函数中定义栈,那样操作更简约 

void BracketMatch(char *str)

{

SeqStack S;

int i;

//char ch;

InitStack(&S);

for(i=0;str[i]!=’’;i++)

{

switch(str[i])

{

case ‘(‘:

case ‘{‘:

case ‘[‘:

Push(&S,str[i]);

break;

case ‘)’:

case ‘}’:

case ‘]’:

if(IsEmpty(&S))

{

printf(“右括号多余n”);

return ;

}

else

{

int top;

top=GetTop(&S);

if(Match(top,str[i]))

printf(“%c”,Pop(&S));//

else

{

printf(“n对应的左右括号分化类!”State of Qatar;

return ;

}

}

}

if(IsEmpty(&S))

printf(“n括号相配!”卡塔尔国;

else

printf(“n左括号多余”卡塔尔国;  

}