链式栈基础上实现括号的匹配校验——C语言


前言

括号都是英文字符括号,而且有三类:{}、[]、()

一、核心代码

//括号匹配
bool bracket_match(char* str) {
	LinkedStack* tmp_stack = stack_create();
	if (tmp_stack == NULL) {
		printf("error:stack_create failed in main.\n");
		exit(1);
	}
	char *p = str;
	while (*p) {
		if (*p == '{') {
			stack_push(tmp_stack, '}');
		}
		if (*p == '[') {
			stack_push(tmp_stack, ']');
		}
		if (*p == '(') {
			stack_push(tmp_stack, ')');
		}
		if (*p == '}' || *p == ']' || *p == ')') {
			if (is_empty(tmp_stack) || tmp_stack->top->data != *p) {
				stack_destroy(tmp_stack);
				return false;
			}
			stack_pop(tmp_stack);
		}
		p++;
	}
	bool ret = is_empty(tmp_stack);
	stack_destroy(tmp_stack);
	return ret;
}

二、测试源

#include "stack.h"
int main(void) {
    char str[] = "{[]1(2)3}";
    if (bracket_match(str))
    {
        printf("括号匹配成功\n");
    }
    else {
        printf("括号匹配失败\n");
    }
    //stack_destroy(stack);
    return 0;
}

三、输出样例

在这里插入图片描述


总结

实现逻辑为:
1、遍历,遇见左括号,就将对应的右括号入栈
2、遇见右括号时。如果栈为空或栈顶元素与这个遇见的右括号不一致,则匹配失败。如果栈顶元素即为此右括号,匹配成功,继续遍历,直到遍历完。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值