【数据结构】基于栈的括号匹配算法(C语言)

使用栈的数据结构检查括号表达式是否正确匹配。左括号入栈,遇到右括号时,若栈为空或与栈顶括号不匹配则错误;所有括号读完后,栈空则匹配,否则不匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目: 设表达式中包含三种括号:圆括号、方括号和花括号,它们可互相嵌套,如 ([{}]) 或 ({[][()]}) 等均为正确的格式,而 {[]})} 、{[() ]或 ([]} 均为不正确的格式。
利用栈的结构编写程序检验输入的括号表达式是否匹配。

思路: 利用栈“后进先出”的特点,每次读入一个括号:
(1)左括号:直接入栈等待匹配;
(2)右括号:
①栈为空说明没有与该右括号匹配的左括号,则该右括号多余;
②栈不为空则将该右括号与栈顶括号比较,若匹配则将栈顶元素出栈,若不匹配则说明左右括号类型不匹配。

当所有括号全部全部读完时,若栈为空则说明所有括号都匹配,若栈不为空则说明有左括号多余。
注意:只有左括号需要进栈,右括号不需要进栈。

完整代码+注释

# include<stdio.h>
# define Stack_Size 50
# define FALSE 0
# define TRUE 1

/*顺序栈的存储结构*/
typedef struct {
   
	char elem[Stack_Size];
	int top;
}SeqStack;

/*初始化顺序栈*/
void InitStack(SeqStack* S) {
   
	S->top = -1;
}

/*顺序栈进栈*/
int Push(SeqStack* S, char x) {
   
	if (S->top == Stack_Size - 1)
		return FALSE;
	S->top++;						//修改栈顶指针
	S->elem[S->top] = x;			//x进栈
	return TRUE;
}

/*顺序栈出栈*/
int Pop(SeqStack* S) {
   
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值