数据结构 括号匹配问题 (栈 C语言)

 现在,有一行括号序列,请你检查这行括号是否配对。

输入

数据保证只含有"[","]","(",")"四种字符

输出

如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No

代码如下

#include<stdio.h>
#include<stdlib.h>
#define SIZE 20
#define CREMENT 10


typedef struct{
char *base;
int top;
int stacksize;
}SqStack;


//初始化 
void InitStack(SqStack &S){
S.base=(char *)malloc(SIZE*sizeof(char));
if(!S.base) return ;
S.top=0;
S.stacksize=SIZE;
}


//判空 
int StackEmpty(SqStack &S){
if(S.top==0) return 1;
else return 0;
} 


//入栈 
void Push(SqStack &S,char e){
if(S.top>=S.stacksize){
S.base=(char *)realloc(S.base,(S.stacksize+CREMENT)*sizeof(char));
if(!S.base) exit(0);
S.stacksize+=CREMENT;
}
S.base[S.top++]=e;
}


//出栈 
void Pop(SqStack &S,char &e){
if(S.top==0) exit(0);
else
e=S.base[--S.top]; 
}




//括号匹配 
int AllBrackets_Test(char *str) {
char *p,ch;
SqStack S;
InitStack(S);
for(p=str;*p;p++){
if(*p=='(' || *p=='[' || *p=='{') 
Push( S, *p );
else if(*p==')' || *p==']' || *p=='}'){
if(StackEmpty(S)) return 0;
Pop( S,ch );
if( *p==')' && ch!='(') return 0;
if( *p==']' && ch!='[') return 0;
if( *p=='}' && ch!='{') return 0; //不匹配返回0  
}
}
if(StackEmpty(S))         //栈为空则匹配 
{printf("匹配!\n") ;
return 0;
}
else
printf("不匹配!\n"); 
}


int main(){
char a[100];
printf("输入一串括号:\n");
gets(a);
AllBrackets_Test(a);
return 0;
}




 

  • 18
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值