((())),最后的左括号要优先匹配——栈
#include <stdio.h>
#define MaxSize 10
typedef struct
{
char data[MaxSize];
int top;
}SeqStack;
//初始化栈
void InitStack(SeqStack &S)
{
for(int i=0;i<MaxSize;i++)
{
S.data[i]=NULL;
}
S.top=-1; //指栈顶元素,初始时置为-1;
}
//判断栈是否为空
bool StackEmpty(SeqStack S)
{
return S.top==-1;
}
//入栈
bool Push(SeqStack &S,char x)
{
if(S.top==MaxSize-1) return false;
S.top++;
S.data[S.top]=x;
return true;
}
//出栈
bool Pop(SeqStack &S,char &x)
{
if(S.top==-1) return false;
x=S.data[S.top];
S.top--;
return true;
}
//核心代码,这里为了结果直观,对不同匹配情况进行了打印,考试时可以不用,在调用Push、Pop等时对其简单
//注 释,可直接调用
bool BraketCheck(char Str[],SeqStack S)
{
//判断是否有括号1
for(int i=0;i<6;i++)
{
//判断是否有左括号
if(Str[i]=='['||Str[i]=='(')
{
//左括号入栈
Push(S,Str[i]);
}
else
{
//判断是否栈空
if(!StackEmpty(S))
{
char b;
Pop(S,b); //弹出栈顶元素b
//判断括号是否匹配,
if(Str[i]==')'&&b=='(') { printf("%c %c\n",b,Str[i]);}
else if(Str[i]==']'&&b=='['){ printf("%c %c\n",b,Str[i]);}
else
{
printf("Failed!Different type of baracet!\n");return false;
}
}
else
{
printf("Failed!Right Sigle.\n"); return false;
}
}
}
if(StackEmpty(S)){printf("Sucess!\n"); return true;}
else{printf("Failed!Left Sigle!\n");return true;}
}
//栈的应用——括号的匹配
int main(void)
{
SeqStack S;
InitStack(S);
char Str[6]={'[','(',')',']',')',')'};
BraketCheck(Str,S);
return 0;
}
京公网安备 11010502036488号