• 有效的括号


    /*
    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
    
    有效字符串需满足:
        左括号必须用相同类型的右括号闭合。
        左括号必须以正确的顺序闭合。
        注意空字符串可被认为是有效字符串。
    */
    #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]=='')
            return true;
        while(s[i]!=''){
            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]=='')
            return true;
        while(s[i]!=''){
            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
    ",isValid(s));
        return 0;
    }
  • 相关阅读:
    C语言和go语言之间的交互
    Elasticsearch笔记九之优化
    Elasticsearch笔记八之脑裂
    Elasticsearch笔记七之setting,mapping,分片查询方式
    Elasticsearch笔记六之中文分词器及自定义分词器
    Elasticsearch笔记四之配置参数与核心概念
    Elasticsearch笔记三之版本控制和插件
    Elasticsearch笔记二之Curl工具基本操作
    Elasticsearch笔记五之java操作es
    Python处理Excel表格
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/12625562.html
Copyright © 2020-2023  润新知