Leetcode 20. 有效的括号(C语言栈)

题目解析:

给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1: 输入: “()” 输出: true
示例 2: 输入: “()[]{}” 输出: true
示例 4:输入: “([)]” 输出: false

这道题要求是按顺序闭合括号,很容易想到数据结构中的栈。找到闭合的括号就出栈,否则就入栈,最后判断true,false的条件就是判断栈是否为空。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct zhan{
    char data[100000];
    int top;//栈顶指针
};

int enzhan(struct zhan *qu,char x){
    qu->top=qu->top+1;
    qu->data[qu->top]=x;
    return 1;
}//入栈

int dezhan(struct zhan*qu){
    qu->top=qu->top-1;
    return 1;
}//出栈

bool isValid(char* s) {
    struct zhan *p=(struct zhan *)malloc(sizeof(struct zhan));
    p->top=0;
    if(strlen(s)==0)return true;
    enzhan(p,s[0]);
    for(int i=1;i<strlen(s);i++)
    {
        if(p->data[p->top]=='[')
        {
            if(s[i]==']')dezhan(p);
            else enzhan(p,s[i]);
        }
        else if(p->data[p->top]=='(')
        {
            if(s[i]==')')dezhan(p);
            else enzhan(p,s[i]);
        }
        else if(p->data[p->top]=='{')
        {
            if(s[i]=='}')dezhan(p);
            else enzhan(p,s[i]);
        }
        else enzhan(p,s[i]);
    }
    if(p->top==0)return true;
    else return false;

}
int main()
{
    char *s=((char*)malloc(sizeof(char*)*10000));
    s="[]";
    bool i=isValid(s);
    printf("%d",i);
}

注意在设置栈顶的时不能设top=-1,否则在判断语句p->data[p->top]时会报错找不到p->data[-1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值