((())),最后的左括号要优先匹配——栈

#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;
}