括号匹配c语言

括号匹配 C语言:

提示:这里简述题目
题目来自Leetcode中国
给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效。
有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。



原因分析:

这里我们用到了数据结构的栈,栈是一种后进先出的数据结构,我们可以这样理解这个问题,当我们输入左括号时,我们将其压入栈中,当我们输入右括号时,如果与栈顶的左括号匹配,则将栈顶的左括号出栈,(不论如何变换,如果是一个可以匹配得括号字符串,那么在这个字符串中必然在中间会是一对相连的并且匹配的括号)


解决方案:

这里我们可以用指针,但是我也没有用到(不清楚使用指针会有什么样的优势),由于目前没有具体的测试样例,也不是很清楚这段代码会在哪个运行样例那里会有错误。如果大佬发现问题,希望可以指出。

//括号匹配
#include
#include
char array[]={'(','[','{','+'};
int judge(char x)//判断函数,方便下面主函数中的if语句的判断条件
{
	if(x==')')
	{return 0;
	}
	if(x==']')
	{
		return 1;
	}
	if(x=='}')
	{
		return 2;
	 } 
	 else 
	 {
	 	return 3;
	 }
 } 
typedef struct{
	int len;
	int top;
	char a[100];
}Stack;//这里定义栈的结构体

int main()
{
	Stack s;
	s.len=100;
	s.top=-1;
	int x;
	while(1)
	{
		scanf("%c",&x);
		
		if(x=='\n'||x=='\0')
		{
			break;
		}
		
		                           
		if(s.top==-1||s.a[s.top]!=array[judge(x)])
		{
			s.top++;
			s.a[s.top]=x;	
		}
		else
		{
			s.top--;
		}
	
	}
	if(s.top==-1)
	{
		printf("yes");
	}
	else
	{
		printf("no");
	}
	
	
	return 0;
}

 

希望大家指正。

昨天上课老师讲了大学期间 为数不多的鸡汤,
和大家分享
你一定要努力,但千万别着急。
可能是这样的吧,给自己或者这个时代的大家都会有一定的焦虑之类的吧,尤其是大家都在高呼内卷,更多的是看中结果的时代,怎么讲呢,高中,为了一个清晰的目标而追求,我要考大学,大学,为了保研,得奖学金,晚睡早起,搞竞赛,大家都在这样的忙碌着,生怕着自己有在哪里会比别人慢一步,这样来说吧,我们看这样的行为会感觉这个真的是一个人的努力极限了,天道酬勤,我们想着自己可以变得更好,就是要付出时间,精力,这个是必然的,但是请在努力的时候,一定不要着急,厚积薄发,做事不可急功近利,一定要记得,这个社会越是浮躁,我们越要将自己的心静下来,踏踏实实的做事情,追求自律而高效的学习。
你一定要努力,但千万别着急!
各位加油!!!

参考文献:https://blog.csdn.net/qq_45021180/article/details/104850296

你可能感兴趣的:(c语言,数据结构,算法)