【王道数据结构】括号匹配

请添加图片描述

//括号匹配 
bool match(SqList s, char a[]) {
	int i;
	char t;
	for (i = 0; a[i] != '\0'; i++) {
		if (a[i] == '(' || a[i] == '[' || a[i] == '{') {
			push(s,a[i]);
		}
		else {
			if (isEmpty(s)) return false; //有多余的右括号
			pop(s,t);
			//判断栈顶元素是否与当前右括号匹配 
			if (t == '(' && a[i] != ')') return false; 
			else if (t == '[' && a[i] != ']') return false; 
			else if (t == '{' && a[i] != '}') return false; 
		}
	}
	return isEmpty(s); // 是否有多余的左括号 
}

全部代码

#include <iostream>

using namespace std;

#define MAXSIZE 10

typedef struct {
	char data[MAXSIZE];
	int top;
}SqList;

void initSqList(SqList &s);
void push(SqList &s, char x);
void pop(SqList &s, char &e);
int getTop(SqList s);
bool isEmpty(SqList s);
void DestorySq(SqList &s);

bool match(SqList s, char a[]);

int main(void) {
	SqList s;
	initSqList(s);
	
	char a[6];
	for (int i = 0; i < 6; i++) {
		scanf("%c", &a[i]);
	} 
	
	printf("%d", match(s,a));

}

//括号匹配 
bool match(SqList s, char a[]) {
	int i;
	char t;
	for (i = 0; a[i] != '\0'; i++) {
		if (a[i] == '(' || a[i] == '[' || a[i] == '{') {
			push(s,a[i]);
		}
		else {
			if (isEmpty(s)) return false; //有多余的右括号
			pop(s,t);
			//判断栈顶元素是否与当前右括号匹配 
			if (t == '(' && a[i] != ')') return false; 
			else if (t == '[' && a[i] != ']') return false; 
			else if (t == '{' && a[i] != '}') return false; 
		}
	}
	return isEmpty(s); // 是否有多余的左括号 
}

void initSqList(SqList &s) {
	s.top = -1;//栈顶指向栈顶元素 
}
void push(SqList &s, char x) {
	if (s.top >= MAXSIZE - 1) return; //已经满了
	s.data[++s.top] = x;
} 
void pop(SqList &s, char &e) {
	if (s.top <= -1) return;//已经空了
	e = s.data[s.top--]; 
}
int getTop(SqList s) {
	if (s.top <= -1) {
		printf("当前栈已经空了\n");
		exit(0);	
	}
	return s.data[s.top];	
}
void DestorySq(SqList &s) {
	s.top = -1;
}
bool isEmpty(SqList s) {
	return s.top == -1;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值