栈的应用——括号匹配

// A code block

 1. 遇到左括号入栈
 2. 遇到右括号,出栈,如果与当前的右括号匹配则当前匹配成功,否则失败
 3. 遍历目标要匹配字符串,并重复1,2步骤

// An highlighted block
/*
栈的应用------括号匹配
*/
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 60
struct Stack
{
    char data[MAXSIZE];
    int top;
    /* data */
};
void CreateStack(Stack &s){
    s.top = -1;
}
int IsEmpty(Stack &s){
    if(s.top == -1)
        return 1;
    else
        return 0;
}
int Push(Stack &s,char data){
    if(s.top==MAXSIZE-1)
        return 0;
    s.data[++s.top] = data;
    return 1;
}
int Pop(Stack &s,char &data){
    if(s.top == -1)
        return 0;
    data = s.data[s.top--];
    return 1;
}
int Testify(Stack &s,char data[],int length){

    char res;
    for(int i=0;i<length;i++){

        switch (data[i])
        {
            case '[':
                Push(s,data[i]);
                break;
            case '(':
                Push(s,data[i]);
                break;
            case '{':
                Push(s,data[i]);
                break;
            case ']':
                Pop(s,res);
                if(res != '[')
                    return 0;
                break;
            case '}':
                Pop(s,res);
                if(res != '{')
                    return 0;
                break;
            case ')':
                Pop(s,res);
                if(res != '(')
                    return 0;
                break;
            default:
                break;
        }
    }
    return IsEmpty(s);
}
int GetLength(char data[]){

    int i;
    for(i=0;data[i];i++);
    return i;
}
int main(){

    Stack s;
    char data[] = {"(({[]()}))"};
    int length = 0;
    CreateStack(s);
    length = GetLength(data);
    int result = 0;
    result = Testify(s,data,length);
    if(result == 1){
        printf("SUCCESS!\n");
    }else{
        printf("FAILED!\n");
    }
    system("pause");
    return 1;
}
/*
    测试:              答案:
        (((])){()})         FAILED
        (([]))[[]]          SUCCESS
        (({[]()}))          SUCCESS
        (()){[]}]           FAILED
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值