问题:对于一串只含有“(”“)”“{”“}”的字符串,判断字符串中的括号是否匹配
C代码实现:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct{
char *stack;
int top;
}arrrayStack,*stackPtr;
void iniStack(stackPtr s);
void push(stackPtr s,char element);
void pop(stackPtr s);
char getTop(stackPtr s);
int main(void){
int i,flag;
char s[MAXSIZE];
arrrayStack a;
iniStack(&a);
gets(s);
for(i=0;s[i]!='\0';i++){
if(s[i]=='('||s[i]=='['){
push(&a,s[i]);
}
else if(s[i]==')'){
if(a.stack[a.top]=='('){
pop(&a);
}
else{
flag=0;
break;
}
}
else if(s[i]==']'){
if(a.stack[a.top]=='['){
pop(&a);
}
else{
flag=0;
break;
}
}
}
if(a.top==-1&&flag){
printf("Yes\n");
}
else{
printf("No\n");
}
free(a.stack);
return 0;
}
void iniStack(stackPtr s){
s->stack=(char *)malloc(sizeof(char)*MAXSIZE);
s->top=-1;
}
void push(stackPtr s,char element){
if(s->top==MAXSIZE-1){
printf("栈满,无法进栈\n");
return;
}
s->stack[++s->top]=element;
}
void pop(stackPtr s){
if(s->top==-1){
printf("栈空,无法出栈\n");
return;
}
s->top--;
}
char getTop(stackPtr s){
if(s->top==-1){
printf("栈空,无法读取\n");
return ' ';
}
return s->stack[s->top];
}