1. 程式人生 > >使用鏈棧判斷輸入的表示式中的括號是否配對

使用鏈棧判斷輸入的表示式中的括號是否配對

#include <iostream>
#include <stdlib.h>
using namespace std;
typedef char ElemType;
typedef struct linknode
{
    ElemType data;
    struct linknode *next;
} LiStack;
bool Match(char exp[],int n);//判斷表示式中括號是否配對
void InitStack(LiStack *L);//初始化棧
void DestroyStack(LiStack *L);//銷燬棧
bool StackEmpty(LiStack *L);//判斷棧是否為空
void Push(LiStack *L,ElemType e);//進棧
bool Pop(LiStack *L,ElemType &e);//出棧
bool GetTop(LiStack *L,ElemType &e);//取棧頂元素
int main()
{
    ElemType exp[]={'a','(','c','e','m'};
    cout<<Match(exp,5);
    return 0;
}

<span style="color:#ff0000;">bool Match(ElemType exp[],int n)//判斷表示式中括號是否配對
{
    int i = 0;ElemType e;
    bool match =true;
    LiStack *st=new LiStack();
    InitStack(st);
    while(i<n&&match)       //掃描exp中的字元
    {
        if(exp[i]=='(')
            Push(st,exp[i]);
        else if(exp[i]==')')
        {
            if(GetTop(st,e))
            {
                if(e!='(')
                    match =false;
                else Pop(st,e);
            }
            else match=false;
        }
        i++;
    }
    if(!StackEmpty(st))
        match =false;


    DestroyStack(st);
    return match;
}</span>