括号匹配[栈]

Posted YuRi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了括号匹配[栈]相关的知识,希望对你有一定的参考价值。

题目:求字符串[(())]的括号是否匹配,这个题相对比较简易,也记录一下。
思路,左括号就入栈,遇到右括号就出栈一个元素进行匹配判定,构造一个switch。同时,设置一个监视flag,初始置1,一旦不匹配就将之置为0,也就是以后就不用再比较了。

#include <iostream>
using namespace std;
#define maxsize 10
typedef struct stack
{
    char a[maxsize];
    int top;
}stack,*Stack;

void push(Stack &s,char ch)/*入栈*/
{
    s->a[++s->top]=ch;
}
char pop(Stack &s)/*出栈*/
{
    char x=s->a[s->top--];    
    return x;
}

int main()
{
    int i=0,flag=1;
    char x;    
    char *string="[(((())))]";
    Stack s=(Stack)malloc(sizeof(stack));
    s->top=-1;
    while(string[i]!=\0)
    {
        switch(string[i])/*左括号入栈,右括号出栈*/
        {
            case (:
            push(s,();
            break;
            case [:
            push(s,[);
            break;
            case ):           
            if((x=pop(s))!=()/*出栈后进行匹配判定*/
            flag=0;
            break;
            case ]:
            if((x=pop(s))!=[)
            flag=0;
            break;
        }
        i++;
        if(!flag)/*只要一个不匹配就退出循环*/
        break;
    };             
    if(flag)
        printf("mattch");
    else 
        printf("no mattch");    
       return 0;       
}

 

以上是关于括号匹配[栈]的主要内容,如果未能解决你的问题,请参考以下文章

栈2--括号的匹配

leetcode每日一题--有效括号的字符串匹配(双栈模拟)

表达式括号匹配(栈)

如何使用栈来实现括号匹配

最长有效括号

用栈实现括号匹配的检验