博客
关于我
括号匹配问题
阅读量:229 次
发布时间:2019-03-01

本文共 2377 字,大约阅读时间需要 7 分钟。

typedef char DataType;typedef struct Stack {       DataType* arr;    int size;    int capacity;}Stack;//初始化void StackInit(Stack* st, int n) {       //创建一个n个元素的栈    st->size = 0;    st->capacity = n;    st->arr = (DataType*)malloc(sizeof(DataType) * n);}//进栈void StackPush(Stack* st, DataType data) {       //插入时先检查栈是否已满    if (st->size >= st->capacity) {           //扩容        st->capacity += st->capacity;        st->arr = (DataType*)realloc(st->arr, st->capacity * sizeof(DataType));    }    //尾插    st->arr[st->size] = data;    st->size++;}//出栈void StackPop(Stack* st) {       if (st->size == 0) {           //空栈, 删除失败        return;    }    //尾删    st->size--;}//得到栈顶元素DataType getStackTop(Stack* st) {       return st->arr[st->size - 1];}//得到栈的大小int getStackSize(Stack* st) {       return st->size;}//判空int StackEmpty(Stack* st) {       if (st->size == 0) {           return 1;    }    return 0;}//销毁void StackDestory(Stack* st) {       free(st->arr);    st->arr = NULL;    st->capacity = 0;    st->size = 0;}bool isValid(char * s){       Stack st;    StackInit(&st, 10);    //创建一个括号的映射    char map[3][2] = {   {   '(', ')'}, {   '[', ']'}, {   '{', '}'}};    //遍历字符串    while (*s != '\0') {           //先找到左括号, 放入栈中, 直到出现第一个右括号        //flag  1表示找到了一个左括号  0代表没找到        int falg = 0;        for (int i = 0; i < 3; i++) {               //循环找左括号            if (*s == map[i][0]) {                   falg = 1;                StackPush(&st, *s);                s++;                break;            }        }        //下面这个循环只有当第一个右括号出现的时候才会进入        if (falg == 0) {               //检查栈是否为空            if (StackEmpty(&st) == 1) {                   //栈为空说明没有找到左括号, 直接返回false                return false;            }            //栈不为空, 开始检查括号是否匹配            for (int j = 0; j < 3; j++) {                   //循环找右括号                if (*s == map[j][1]) {                       //找到右括号后, 取出栈顶元素, 检查是否匹配                    //匹配则继续, 不匹配直接返回 false                    char top = getStackTop(&st);                    if (top == map[j][0]) {                           //括号匹配, 出栈并更新s                        StackPop(&st);                        s++;                        break;                    }                    else                         return false;                }            }        }    }    if (StackEmpty(&st) == 1)        return true;    else         return false;}

转载地址:http://uunv.baihongyu.com/

你可能感兴趣的文章
nginx如何实现图片防盗链
查看>>
Nginx学习总结(10)——Nginx前后端分离将多个请求转发到多个Tomcat,负载均衡反向代理
查看>>
Nginx学习总结(11)——提高Nginx服务器的安全性,稳定性和性能的12种技巧
查看>>
Nginx学习总结(12)——Nginx各项配置总结
查看>>
Nginx学习总结(13)——Nginx 重要知识点回顾
查看>>
Nginx学习总结(14)——Nginx配置参数详细说明与整理
查看>>
Nginx学习总结(15)—— 提升 Web 应用性能的十个步骤
查看>>
Nginx学习总结(1)——Nginx入门简介
查看>>
Nginx学习总结(2)——Nginx手机版和PC电脑版网站配置
查看>>
Nginx学习总结(3)——Nginx配置及应用场景之高级配置
查看>>
Nginx学习总结(4)——负载均衡session会话保持方法
查看>>
Nginx学习总结(5)——Nginx基本配置备忘
查看>>
Nginx学习总结(6)——Nginx + https + 免费SSL证书配置指南
查看>>
Nginx学习总结(7)——Nginx配置HTTPS 服务器
查看>>
Nginx学习总结(8)——Nginx服务器详解
查看>>
Nginx学习总结(9)——前端跨域问题解决
查看>>
nginx学习笔记
查看>>
nginx学习笔记001---Nginx的启动、停止与重启
查看>>
nginx学习笔记002---Nginx代理配置_案例1_实现了对前端代码的方向代理_并且配置了后端api接口的访问地址
查看>>
nginx学习笔记003---Nginx代理配置_注意,在Windows中路径要用/
查看>>