首页 > 其他 > 详细

有效的括号

时间:2020-04-03 13:48:50      阅读:120      评论:0      收藏:0      [点我收藏+]

技术分享图片

/*
给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串,判断字符串是否有效。

有效字符串需满足:
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。
*/
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include <iostream>
typedef struct Stack{
    int top;
    char index[1000];
};
/*入栈*/
void stack_push(char e,struct Stack *stack){
    stack->top++;
    stack->index[stack->top]=e;
}
/*出栈*/
void stack_pop(struct Stack *stack){
    stack->top--;
}
/*栈顶*/
char stack_top(struct Stack *stack){
    return stack->index[stack->top];
}
/*是否为空*/
bool stack_empty(struct Stack *stack){
    if(stack->top==-1)
        return 1;
    return 0;
}

bool isValid(char * s){
    int i=0;
    char c;
    struct Stack *stack;
    stack=(struct Stack*)malloc(sizeof(struct Stack));
    stack->top=-1;
    if(s==NULL||s[i]==\0)
        return true;
    while(s[i]!=\0){
        if(s[i]==(||s[i]=={||s[i]==[){
            stack_push(s[i],stack);
        }else{
            c=stack_top(stack);
            //printf("%c ",c);
            switch(s[i]){
                case ):
                    stack_pop(stack);
                    if(c!=()
                        return false;
                    break;
                case }:
                    stack_pop(stack);
                    if(c!={)
                        return false;
                    break;
                case ]:
                    stack_pop(stack);
                    if(c!=[)
                        return false;
                    break;
                default:
                    break;
            }
        }
        i++;
    }
    if(stack_empty(stack))
        return true;
    return false;
}

bool isValid1(char * s){
    int i=0,top=-1;
    char data[100],c;
    if(s==NULL||s[i]==\0)
        return true;
    while(s[i]!=\0){
        if(s[i]==(||s[i]=={||s[i]==[){
            top++;
            data[top]=s[i];
        }else{
            c=data[top];
            //printf("%c ",c);
            switch(s[i]){
                case ):
                    top--;
                    if(c!=()
                        return false;
                    break;
                case }:
                    top--;
                    if(c!={)
                        return false;
                    break;
                case ]:
                    top--;
                    if(c!=[)
                        return false;
                    break;
                default:
                    break;
            }
        }
        i++;
    }
    if(top==-1)
        return true;
    return false;
}

int main()
{
    char s[6]={(,),[,],{,}};
    printf("%d\n",isValid(s));
    return 0;
}

 

有效的括号

原文:https://www.cnblogs.com/zhaohuan1996/p/12625562.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!