用栈判断表达式中的括号是否匹配

来源:互联网 发布:手机淘宝首页装修布局 编辑:程序博客网 时间: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
原创粉丝点击