使用鏈棧判斷輸入的表示式中的括號是否配對
阿新 • • 發佈:2019-02-05
#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>