C语言——顺序栈实现括号匹配

用顺序栈实现括号匹配:
依次扫描所有字符,遇到左括号则入栈,遇到右括号则弹出栈顶元素检查是否匹配。
匹配失败的情况:
1)左括号单身
2)右括号单身
3)左右括号都不匹配

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

#define maxsize 10

typedef struct {
	char data[maxsize];
	int top;
}stack;

//栈的初始化
void initstack(stack &s)
{
	s.top=-1;
}

//栈的判空
bool empty(stack s)
{
	if(s.top==-1)
		return true;
	else
		return false;
}

bool pushstack(stack& s,char x)
{
	if(s.top==maxsize-1)
		return false;
	s.top++;
	s.data[s.top]=x;
	return true;
}

bool popstack(stack& s, char & x)
{
	if(s.top==-1)
		return false;
	x=s.data[s.top];
	s.top--;
	return true;
}

bool gettop(stack s, char & x)
{
	if(s.top==-1)
		return false;
	x=s.data[s.top];
	return true;
}

bool bracketcheck(char* c)
{
	stack s;
	initstack(s);
	int len;
	for(len=0;c[len]!='\0';len++);	//计算字符串长度
	for (int i = 0; i < len; i++) {
		if (c[i] == '(' || c[i] == '{' || c[i] == '[') {//如果是左括号入栈
			pushstack(s,c[i]);
		}
		else {
			if(empty(s))//如果是右括号且此时栈空,说明栈中没有左括号与其匹配
				return false;
			
			char topelem;
			popstack(s,topelem);//如果是右括号且此时栈不空,看左右括号是否匹配
			if(c[i]==')'&&topelem!='(')
				return false;
			if(c[i]=='}'&&topelem!='{')
				return false;
			if(c[i]==']'&&topelem!='[')
				return false;
		}
	}
	if(empty(s))//所有的字符扫描完,且此时的栈为空,说明括号匹配成功	
		return true;
	else
		return false;	//如果栈不空,说明有左括号没有被匹配
}
int main()
{
	char word[]="{(())[]}}";
	if (bracketcheck(word)) {
		printf("匹配成功!\n");
	}
	else {
		printf("匹配失败!\n");
	}
		
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值