问题描述

给定一串字符(以’#’结束,不超过100个字符),可能包括三种括号:小括号、中括号和大括号,各种括号之间允许任意的嵌套,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入格式:
输入一字符串(以’#’结束,不超过100个字符),可能包括三种括号:小括号、中括号和大括号,各种括号之间允许任意的嵌套。
输出格式:
如果括号配对,输出配对成功信息,否则输出配对不成功信息。
2.测试数据
(1) ([]{})
(2) {[}]
(3) {{}
(4) ())

代码内容

#include<iostream>
#define OK 1
#define ERROR 0
using namespace std;
//dypedef:为一种数据类型定义一个新名字
typedef char SElemType;	
typedef char ElemType;
typedef int Status;
//链栈存储结构
typedef struct Node{
	ElemType data;
	struct Node *next;
}stacknode,*LinkStack;
//链栈初始化 
Status InitStack(LinkStack &S){
	//构造一个空栈S,栈顶指针置空
	S=NULL;
	return OK;
}
//链栈入栈
Status Push(LinkStack &S,SElemType &e){
	LinkStack p=new stacknode;	//生成新节点
	p->data=e;	//数据域置e
	p->next=S;	//将新节点插入栈顶
	S=p;	//修改栈顶指针为p
	return OK;
}
//链栈的出栈
Status Pop(LinkStack &S,SElemType &e){
	//删除S的栈顶元素,用e返回其值
	if(S==NULL)	//判断是否为空栈
		return ERROR;
	LinkStack p=S; 	//定义新节点,用于临时保存S栈顶元素的空间,以备释放
	e=S->data;		//将栈顶元素赋值给e
	S=S->next;		//修改栈顶指针
	delete p;		//释放原栈顶空间
	return OK;
}
//取栈顶元素
SElemType GetTop(LinkStack S){
	if(S!=NULL)
		return S->data; 	//返回栈顶元素,栈顶指针不变
}
void Matching(){
	LinkStack S;
	InitStack(S);	//初始化空栈
	char ch,x;
	cin>>ch;		//读取第一个字符
	int flag=1,count=1;	//用于标记是否匹配成功
	//以#结束且不超过100个字符
	while(ch!='#'&&flag&&count<=100){
		switch(ch){
			case '{':
			case '[':
			case '(':		//若是左括号,将其压入栈
				Push(S,ch);
				break;
			//若是右括号,分类型进行匹配
			case ')':
				if(S!=NULL&&GetTop(S)=='(')
					Pop(S,x);
				else flag=0;
				break;
			case ']':
				if(S!=NULL&&GetTop(S)=='[')
					Pop(S,x);
				else flag=0;
				break;
			case '}':
				if(S!=NULL&&GetTop(S)=='{')
					Pop(S,x);
				else flag=0;
				break;
		}
		cin>>ch;	//继续读取下一个字符
		count++;		//计数器
	}
	//如果栈空且都能匹配成功,则匹配成功,否则匹配失败
	if(S==NULL&&flag)	
		cout<<"匹配成功"<<endl;
	else
		cout<<"匹配失败"<<endl; 
}
int main(){
	Matching();	//主函数调用方法
	return 0;
} 

测试结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

括号匹配问题主要就是考察对栈的使用,通过入栈和出栈来进行匹配,入栈出栈等操作既可以使用顺序栈也可以使用链栈来实现,我这里使用的是链栈,主要是因为代码量比顺序栈相对少点0.0

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐