栈进行括号匹配用

#include <stdio.h>
#include <stdlib.h>
//代码中函数返回值:1表示true,0表示false
#define MaxSize 10                  //栈最多可以放几个
typedef struct Stack{
    char str[MaxSize];              //栈顺序表
    int top;                        //栈顶指针
}Stack;

void InitStack(Stack *S){
    S->top=-1;                      //栈顶指针初始化为-1
}

int Push(Stack *S,char c){          //进栈函数
    if(S->top>=MaxSize)
        return 0;
    S->top++;
    S->str[S->top]=c;
    //printf("%c",S->str[S->top]);
    //show(*S);
    return 1;
}

int Pop(Stack *S,char *c){
    if(S->top<0)
        return 0;
    (*c)=S->str[S->top];                //这里要*c,因为传入的是引用变量
    S->top--;
    return 1;
}

void show(Stack S){
    //printf("%d",S.top);
    printf("当前栈内元素为:");
    for(int i=0;i<=S.top;i++){          //这里是要<=S.top;因为top是指向栈顶元素,从-1开始的;
        printf("%c\t",S.str[i]);
    }
    printf("\n");
}

int StackEmpty(Stack S){
    if(S.top==-1)
        return 1;
    return 0;
}

int GetTop(Stack S,char* c){
    if(S.top<0){
        return 0;
    }
    (*c)=S.str[S.top];
    return 1;
}

int bracket(char str[],int length){             //括号匹配算法核心代码
    Stack s;                                     //定义一个栈
    InitStack(&s);                               //初始化,栈顶top指向-1;
    for(int i=0;i<length;i++){                  //遍历括号数组
        if(str[i]=='('||str[i]=='['||str[i]=='{'){      //遇到左括号,无脑进栈
                Push(&s,str[i]);
                //continue;
        }else{                                          //遇到右括号
            char TopElem;                               //定义一个TopElem,存储栈顶元素
            //GetTop(s,&TopElem);
            Pop(&s,&TopElem);                           //栈顶元素出栈
            if(TopElem=='('&&str[i]!=')')               //对比栈顶元素与括号是否匹配
                return 0;
            if(TopElem=='['&&str[i]!=']')
                return 0;
            if(TopElem=='{'&&str[i]!='}')
                return 0;
        }
        show(s);                                        //打印一下,处理这个括号后栈的内容
    }
    return StackEmpty(s);                               //是不是空栈结束
}

int main()
{
    char chr[6] = {'(','(','(',')',')',']'};
    //show(s);
    //printf("%d",bracket(chr,6));
    if(bracket(chr,6)==1){
        printf("匹配成功");
    }else{
        printf("匹配失败");
    }
    //printf("Hello world!\n");
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值