圆括号匹配

来源:互联网 发布:可以听pdf的软件 编辑:程序博客网 时间:2024/06/05 06:56

问题描述:

设计一个算法判断算数表达式的圆括号是否正确匹配

算法思想:
使用栈来实现,当在输入的字符串中检测到‘(’字符时,该字符入栈。当在输入的字符串中检测到‘)’字符时,上一个字符出栈
最后判断栈是否为空,若为空,则圆括号匹配正确,否则,圆括号匹配不正确。
需要注意的是当‘)’字符最先出现时,直接判断圆括号匹配不正确。

代码实现:
ParenthesisMatch.cpp

#include<string>#include"SeqStack.h"using namespace std;int main(){    SeqStack<char> stack1;              //定义一个顺序栈对象    string s1;                          //定义一个串    cout<<"请输入算数表达式:";    cin>>s1;    for(int i=0; i<s1.size(); i++)      //依次检测每个字符    {        if(s1[i]=='(')                  //当出现'('时,入栈            stack1.Push(s1[i]);        else if(s1[i]==')' && stack1.Empty())   //当')'最先出现,直接判断圆括号不匹配        {            cout<<"算数表达式圆括号不匹配!"<<endl;            return 0;        }        else if(s1[i]==')' && !stack1.Empty())      //当出现')'且不是最先出现时,上一个字符出栈            stack1.Pop();    }    if(stack1.Empty())                              //栈空,则圆括号匹配正确        cout<<"算数表达式圆括号匹配!"<<endl;    else                                            //否则,圆括号匹配不正确        cout<<"算数表达式圆括号不匹配!"<<endl;    return 0;}

SeqStack.h

#include<iostream>using namespace std;const int StackSize = 1024;     //定义栈的最大高度template<class T>class SeqStack                  //定义顺序栈的模板类{    public:        SeqStack(){top = -1;}   //构造函数,初始化空栈        void Push(T x);         //入栈操作        T Pop();                //出栈操作        T GetTop();             //获得栈顶元素        bool Empty();           //判断栈是否为空    private:        T data[StackSize];      //定义数组        int top;                //栈顶指针};template<class T>void SeqStack<T>::Push(T x)     //入栈操作{    if(top >= StackSize-1) throw"上溢";    top++;                      //栈顶指针上移    data[top] = x;}template<class T>T SeqStack<T>::Pop()            //出栈操作{    if(Empty()) throw"下溢";    top--;                      //栈顶指针下移    return data[top+1];}template<class T>T SeqStack<T>::GetTop()         //查找栈顶元素{    if(Empty()) throw"下溢";    return data[top];}template<class T>bool SeqStack<T>::Empty(){    if(top==-1)        return true;    else        return false;}

实验结果:
这里写图片描述

0 0