栈的应用举例——括号匹配的检验

#include<iostream>
#include"SqStack.h"
using namespace std;
#define NUM 20
/* 说明:用1代表"(", 用2代表“)”, 用3代表“[”, 用4代表“]”*/
void Bracket(SqStack &S,SqStack &SS)
{
	int e,m;
	SOP.InitStack(S);//初始化栈S
	SOP.InitStack(SS);
	cout<<"用1代表'(', 用2代表')', 用3代表'[', 用4代表']'"<<endl;
	for(int i=1;i<=NUM;i++)
	{
		cin>>e;//输入括号所代表的数字
		if(1==e||3==e)//若是左括号“(”或“[”,则入栈
			SOP.Push(S,SS,e);
		else if(2==e)//若是右括号“)”,则与栈顶元素比较
		{
			SOP.GetTop(S,m);//用m返回栈顶元素的值
			if(1==m)//若栈顶元素是与“)”相匹配的“(”
				SOP.Pop(S,m);//将元素出栈
		}//elseif
		else if(4==e)//若是右括号"]",同理,则与栈顶元素比较
		{
			SOP.GetTop(S,m);
			if(3==m)//若栈顶元素是“[”
				SOP.Pop(S,m);
		}//else if2
		else//输入的数不是1—4
		{
			cout<<"输入有误"<<endl;
			exit(-1);
		}//else
	}//for
	if(SOP.StackEmpty(S))//若栈空,说明全部匹配成功
		cout<<"括号匹配成功"<<endl;
	else 
		cout<<"括号匹配不成功"<<endl;
}//Bracket

void main()
{
	SqStack S,SS;
	Bracket(S,SS);
	SOP.DestroyStack(S);
	SOP.DestroyStack(SS);
}//main

假设输入为:()()(())[][[]][[)(]];

栈的应用举例——括号匹配的检验_第1张图片

你可能感兴趣的:(栈,括号检验)