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

题目解析:

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

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

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

代码:

#include 
#include 
#include 
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]

你可能感兴趣的:(Leetcode)