用栈判断表达式中的括号是否匹配
来源:互联网 发布:手机淘宝首页装修布局 编辑:程序博客网 时间:2024/06/04 20:08
判断表达式中的括号是否匹配
一.问题描述
给定一个算数表达式,算式中可能包括括号,括号的类型有大括号,小括号,中括号。输入为字符串类型,程序判断
算式中的括号是否匹配。
二.问题分析
1.此题可用栈结构来解决。算法的核心思想为:遇到一个左括号将此左括号入栈,遇到一个右括号时,出栈一个左括号。
2.当出现以下情况时,可判断此表达式括号不匹配:①出栈的左括号与右括号类型不同,例 “{” 和“)”。②遇到右括号时,
栈中已没有左括号③已到字符串结尾,栈中还有左括号。
三.关键函数
Boolean check(char *s){int i=0;STACK st;st=makeNull(st); while(s[i]!='\n'){if(s[i]=='('||s[i]=='['||s[i]=='{'){//左括号入栈 push(st,s[i]);i++;}else{if(st.size==0)return FALSE;else if(top(st)!=s[i])return FALSE;else{pop(st);//左右括号匹配 i++;} }}if(st.size!=0)return FALSE;//还有左括号,不匹配return FALSE; }
四.完整程序
程序中给了栈的型,并给出了栈的一些基本操作。
/*十一、假设表达式中允许包含三种括号:圆括号、方括号和大括号。设计一个算法采用顺序栈(用数组表示的栈)判断表达式中的括号是否正确配对。要求: 1、定义栈以及栈的型,栈中所存放元素的类型为字符型,定义枚举类型Boolean,其中两个元素分别为TRUE和FALSE。2、定义栈的各种操作。3、定义函数Boolean check(char *s); 判断s中的括号是否正确配对,如果正确配对,返回TRUE,否则返回FALSE。4、在主函数中验证所编写函数的正确性。*/ #include<iostream>#include<iomanip>#include<cmath>#include<cstdlib>#include<string>using namespace std;#define MAX 1000002enum Boolean{//枚举变量Boolean TRUE,FALSE};typedef char elementtype;struct STACK{elementtype element[MAX];int size; };/*empty() 堆栈为空则返回真 pop() 移除栈顶元素 push() 在栈顶增加元素 size() 返回栈中元素数目 top() 返回栈顶元素 */STACK makeNull(STACK &s)//将栈置空 {s.size=0;return s;}Boolean empty(STACK s){if(s.size==0)return TRUE;return FALSE;}int size(STACK s){return s.size;}elementtype top(STACK s){if(s.size==0)exit(1);elsereturn s.element[0];}void push(STACK s,elementtype e){if(s.size==0){s.element[0]=e;s.size++;}else{for(int i=s.size;i>0;i--){s.element[i]=s.element[i-1];}s.element[0]=e;s.size++;}}void pop(STACK s){if(s.size==0)return;if(s.size==1){s.size=0;return;}for(int i=0;i<s.size-1;i++){s.element[i]=s.element[i+1];}s.size--;} Boolean check(char *s){int i=0;STACK st;st=makeNull(st); while(s[i]!='\n'){if(s[i]=='('||s[i]=='['||s[i]=='{'){//左括号入栈 push(st,s[i]);i++;}else{if(st.size==0)return FALSE;else if(top(st)!=s[i])return FALSE;else{pop(st);//左右括号匹配 i++;} }}if(st.size!=0)return FALSE;//还有左括号,不匹配return FALSE; }int main(){ return 0;}
0 0
- 用栈判断表达式中的括号是否匹配
- 判断表达式中的括号是否匹配
- 栈验证表达式中的括号是否匹配
- 如何判断一个表达式中的左右括号是否匹配
- 栈的基本操作及如何判断一个表达式中的左右括号是否匹配
- 判断表达式左右括号是否匹配(栈)
- PHP判断表达式中括号是否匹配
- 利用栈判断输入的表达式中的括号是否匹配(假设只含有左、右括号)
- 判断代码中的括号是否匹配
- 判断字符串中的括号是否匹配
- 判断字符串中的括号是否匹配
- 判断括号是否匹配
- 判断括号是否匹配
- 判断括号是否匹配
- 判断括号是否匹配
- “顺序栈”判断表达式中的括号是否正确配对
- (容器配接器)堆栈应用:判断表达式中的括号是否匹配
- 用栈判断输入的括号是否匹配
- android 图片压缩
- C++ STL编程轻松入门(1)
- js中confirm()函数的用法
- android 屏幕适配
- SGU 125 Shtirlits(dfs)
- 用栈判断表达式中的括号是否匹配
- 稀疏矩阵,用vector,实现抽象类
- 个人对webdriver的理解(二)
- 小马哥---高仿苹果6 主板型号z13刷机拆机主板图 6572芯片nand字库
- lua next 用法
- mysql null 值相关规则
- SecureCRT vi彩色显示关键字
- 大数据工程师技能图谱
- canvas-转盘