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

#include<stdio.h>
#include<stdlib.h>
#include <malloc.h>
#define MAX 1001

//此程序采用顺序栈做法 

typedef char ElementType;

//新建一个栈结构
typedef struct stack{
	ElementType a;
	struct stack *next;
} List,*lp;

//初始化栈
struct stack *create();
int Push(lp L,ElementType x);//入栈
int Pop(lp L,ElementType e);//出栈

int main(){
	char s[MAX];//新建一个数组并存储输入的代码
	gets(s);
	int i=0,left=0,right=0,flag=1 ;
	lp L=NULL;//新建一个栈指针,并初始化
	L=create();
	while(s[i]!='\0'){
	  if(s[i]=='('){
	    Push(L,'(');
	  	left++;
	  }	else if(s[i]=='['){
	    Push(L,'[');
		left++;
	  } else if(s[i]=='{') {
			Push(L,'{');
			left++;
      } else if(s[i]==')'){
      	if(Pop(L,'(')!=1)flag=0;
      	right++;
      	//printf("%d",flag);
	  }else if(s[i]==']') {
			if(Pop(L,'[')!=1) flag=0 ;
			right++;
			//printf("%d",flag);
	  } else if(s[i]=='}') {
			if(Pop(L,'{')!=1) flag=0 ;
			right++;
			//printf("%d",flag);
    	}
		i++;
			
	}
	
	if(L->next!=NULL) {flag=0;
	}
	printf("%d %d\n",left,right);
	
	if(flag==1){
		printf("YES\n");
	}else{
		printf("NO\n");
	}
}



struct stack *create(){
	lp s=NULL;//新建一个栈指针
	s=(lp)malloc(sizeof(lp));
	s->next=NULL;
	return s;
}

int Push(lp L,ElementType x){
	lp p=(lp)malloc(sizeof(lp));
	p->a=x;
	p->next=L->next;
	L->next=p;
	return 1;
}


int Pop(lp L,ElementType e){
	lp p=(lp)malloc(sizeof(lp));
	if(L->next==NULL) return 0;
	p=L->next;
	if(p->a==e){
		L->next=p->next;
		free(p);
		return 1;
	}else{
		return 0;
	}
}

内容源自:链接:7-1 括号匹配 (20分)(数据结构)_idependent的博客-CSDN博客 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值