算法中设置一个栈,每次读入一个括号,若是右括号,则或者与置于栈顶的括号匹配,或者是不合法的情况,若是左括号,则入栈。若算法结束,栈是空的,则括号合法。
括号匹配函数

Status bracket_match(){SElemType brackets[100];int i;SElemType e;SqStack S;Init_Stack(S);scanf("%s",brackets);while(brackets[i]!='\0'){if(i==0&&(brackets[i]=='}'||brackets[i]==']'||brackets[i]==')'))return ERROR;else{switch(brackets[i]){case '}':Get_Top(S,e);if(e=='{')Pop(S,e);break;case ']':Get_Top(S,e);if(e=='[')Pop(S,e);break;case ')':Get_Top(S,e);if(e=='(')Pop(S,e);break; default:Push(S,brackets[i]);break;}}i++;}if(Stack_Empty(S)){Destroy_Stack(S);return OK;}else{Destroy_Stack(S);return ERROR;}
}

全部表示和实现,以及测试代码

#include<stdio.h>
#include<stdlib.h>#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0typedef int Status;
typedef char SElemType;typedef struct{SElemType *base;SElemType *top;int stacksize;
}SqStack;Status Init_Stack(SqStack &S){S.base=(SElemType*)malloc(sizeof(SElemType)*STACK_INIT_SIZE);if(!S.base){printf("Merry Error\n");exit(0);}S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;
}Status Clear_Stack(SqStack &S){S.top=S.base;return OK;
}Status Stack_Empty(SqStack S){if(S.top==S.base){return TRUE;}else{return FALSE;}
}int Stack_Length(SqStack S){int length=0;while(S.base!=S.top){S.top--;length++;}return length;
} Status Get_Top(SqStack S,SElemType &e){if(S.base==S.top){return ERROR;}else{e=*(S.top-1);return OK;}
}Status Push(SqStack &S,SElemType e){if(S.top-S.base>=S.stacksize){S.base=(SElemType *)realloc(S.base,sizeof(SElemType)*(S.stacksize+STACKINCREMENT));if(!S.base){printf("Merroy Error!\n");exit(0);}}S.stacksize+=STACKINCREMENT;*S.top++=e;return OK;
}Status Pop(SqStack &S,SElemType &e){if(S.base==S.top){return ERROR;}e=*(--S.top);return OK;
}Status Destroy_Stack(SqStack &S){S.top=S.base;free(S.base);return OK;
}Status bracket_match(){SElemType brackets[100];int i;SElemType e;SqStack S;Init_Stack(S);scanf("%s",brackets);while(brackets[i]!='\0'){if(i==0&&(brackets[i]=='}'||brackets[i]==']'||brackets[i]==')'))return ERROR;else{switch(brackets[i]){case '}':Get_Top(S,e);if(e=='{')Pop(S,e);break;case ']':Get_Top(S,e);if(e=='[')Pop(S,e);break;case ')':Get_Top(S,e);if(e=='(')Pop(S,e);break; default:Push(S,brackets[i]);break;}}i++;}if(Stack_Empty(S)){Destroy_Stack(S);return OK;}else{Destroy_Stack(S);return ERROR;}}int main(){while(1){if(bracket_match())printf("Brackets Is OK!\n");else{printf("Wrong Brackets\n");}}return 0;
} 


欢迎留言交流。。。

栈的应用--括号匹配的检验相关推荐

  1. 栈的应用-括号匹配的检验

    1.算法描述 在括号匹配算法中定义int flag = 1变量来标记匹配结果是成功还是失败! 利用数据结构栈,从左到右依次扫描字符串:若是遇到左括号入栈:若是遇到右括号:若栈非空,使用Pop(s,to ...

  2. c语言括号匹配的检验,检验括号匹配的算法

    用栈实现检验括号匹配的算法没啥具体描述,数据结构的知识,急用,有重赏 思想是 先进栈,获取第一个半边括号,标记一下,继续进栈直到获取到第二个与之匹配的另一外括号,然后出栈,取出内容.就这样.. 数据结 ...

  3. 字符串括号匹配c语言,数据结构C语言括号的检验源程序 , 数据结构(C) 请用类C语言实现括号匹配的检验这个算法...

    问题标题 数据结构C语言括号的检验源程序 , 数据结构(C) 请用类C语言实现括号匹配的检验这个算法 2019-8-21来自ip:13.149.196.77的网友咨询 浏览量:270 手机版 问题补充 ...

  4. 栈应用之 括号匹配问题(Python 版)

    栈应用之 括号匹配问题(Python 版) 检查括号是否闭合 循序扫描被检查正文(一个字符)里的一个个字符 检查中跳过无关字符(所有非括号字符都与当前处理无关) 遇到开括号将其压入栈 遇到闭括号时弹出 ...

  5. 数据结构实验之栈四:括号匹配

     数据结构实验之栈四:括号匹配 Description 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. Inp ...

  6. sdut 数据结构实验之栈四:括号匹配

    数据结构实验之栈四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description ...

  7. c语言栈训练题目:括号匹配

    c语言栈训练题目:括号匹配 基本思路: 当前字符不是括号,不做处理: 当前字符是左括号,则进栈: 当前字符是右括号:若栈空,则表明该"右括号"多余,不匹 配,结束:否则和栈顶元素比 ...

  8. 栈的应用 括号匹配 c++

    在算术表达式中,除了加.减.乘.除等运算外,往往还有括号.包括有大括号{},中括号[],小括号(),尖括号<>等. 对于每一对括号,必须先左边括号,然后右边括号:如果有多个括号,则每种类型 ...

  9. 栈应用之括号匹配(C语言)

    { ( hey! )[不管是电子表还是劳力士,他们的指针都是一样转动的.] } ) 宁是否发现了不舒服的地方,oh这种事是无法让强迫症忍受的,没错,这里的括号是不匹配的,就像C语言中,如果你输入的括号 ...

最新文章

  1. 计算机操作系统“进程”与“线程”的通俗解析
  2. [OpenCV] -- win7下配置OpenCV的Qt开发环境
  3. [评论]为什么中国的程序员技术偏低
  4. ASP.NET MVC实践系列6-Grid实现(上)
  5. php word excel,PHP 生成word 和 excel 文档
  6. java 匹配最后一次出现的字符_在Java中查找字符串中字符的最后一次出现
  7. 【无标题】Kafka副本管理—— 为何去掉replica.lag.max.messages参数
  8. 又拍网架构-又一个用到python的网站(转载)
  9. javascript动画系列 —— 切换图片(原生)
  10. 4-1.最大子数组分治法实现
  11. 单场淘汰制场次计算方法_怎样用单循环制进行的比赛计算场数
  12. 用python做炒股软件-python通达信接口_基于python的炒股软件
  13. C# SplitContainer 控件详细用法
  14. matlab 复制 模块,想把m文件在simulink 中的调用,我用的是matlab function 模块。
  15. vue导入音乐_【vlog制作】不经电脑,如何在VUE中导入自定义音乐
  16. pc端常用电脑屏幕 媒体查询尺寸
  17. 为什么一买就跌一卖就涨,主力如何利用AI大数据击穿散户的心理防线?
  18. Vue--Router--路由模式--种类/区别/原理
  19. Unity:SLG游戏画线模块
  20. 1225 D. Power Products 哈希

热门文章

  1. 【APICloud系列|32】iOS 上架去除Icon图像中的alpha通道或透明度
  2. oracle pl/sql编程详解,OraclePL/SQL高级编程详解
  3. c语言程序设计徐立辉答案,C语言程序设计 牛志成,徐立辉,刘冬莉著 清华大学出版社 9787302165620...
  4. mysql as tmp,启动mysql时显示:/tmp/mysql.sock 不存在的解决办法
  5. 一个路由器两个网段互通_如何判断两个IP地址是否在同一个网段?什么是子网掩码?...
  6. 基于HTML5陀螺仪实现ofo首页眼睛移动效果
  7. jQuery文档就绪
  8. 前端学习---css基本知识
  9. jboss4。0下mysql数据源的配置
  10. mysql binlog空间维护