Leetcode第20题有效的括号||C语言

文章描述了一个用C语言实现的基于栈的数据结构来检查括号匹配的问题。通过初始化栈、入栈、出栈和判空等函数,检查字符串中的左括号和右括号是否正确配对。如果所有括号都能找到对应的配对,则返回true,否则返回false。代码执行效率有待优化。
摘要由CSDN通过智能技术生成
这题其实可以直接在主函数中声明一个大小为10000的char类型的数组,在声明一个i作为栈顶指针就可以解决,但我想练习一下栈的几个主要函数,所以还是打了出来
#define Maxsize 10000

typedef struct{
    char data[Maxsize];
    int top;
}Stack;

Stack* initStack(){//初始化函数
    Stack *s=(Stack *)malloc(sizeof(Stack));
    s->top=0;//栈顶初始化为0,即每次入栈时都在入栈后再将自增指针
    return s;  //即栈顶指针每次都指向最后一个元素的下一位
}

void Push(Stack *s,char x){//入栈函数
    s->data[s->top++]=x;
}

char Pop(Stack *s){//出栈函数
    if(s->top>0){
       s->top--;
       return s->data[s->top];
    }
    else return '\0';
}

bool IsEmpty(Stack *s){//判空函数
    if(s->top==0)return true;
    else return false;
}

bool isValid(char * s){
    int i;
    Stack *t=initStack();
    for(i=0;s[i]!='\0';i++){
        if(s[i]=='{'||s[i]=='['||s[i]=='(')//如果是左括号则入栈
            Push(t,s[i]);
        else if(s[i]=='}'&&Pop(t)=='{')
            continue;
        else if(s[i]==']'&&Pop(t)=='[')
            continue;    
        else if(s[i]==')'&&Pop(t)=='(')//如果是三种右括号之一且出栈后括号与之对应,则继续循环
            continue;        
        else//不满足以上情况则直接返回false
            return false;        
    }
    if(IsEmpty(t))//如果循环结束后出栈出干净了,则返回true
        return true;
    else return false;  //如果循环结束后栈内还有剩余括号,则返回false
}

执行情况
执行效率不是很好,等二刷的时候会重写吧…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值